import requests from datetime import datetime, timedelta as td from django.core.management.base import BaseCommand from hc.api.models import Check, DEFAULT_TIMEOUT PROJECT_ID_TO_API_KEY_MAP = { 2: 'eB-PDSWREOVFjjxZr1ena3hOqB9EglWX', 1: 'RZ9BZERmgS40paCpfsGw9zomL1VIxlYe', 3: '5IVMol_f50_6DjsGCImPIcawsNzEZoxb', } PROJECT_ID_TO_INTEGRATION_ID_MAP = { 2: 'https://hooks.slack.com/services/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', 1: 'https://hooks.slack.com/services/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', 3: 'https://hooks.slack.com/services/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', } API_CHECKS_URL = 'https://healthchecks.io/api/v1/checks/' class Command(BaseCommand): help = "Migrates healthchecks from healthchecks.io to healthchecks.squadplatform.com" def handle(self, *args, **options): self.stdout.write("migration started\n") for project_id, api_key in PROJECT_ID_TO_API_KEY_MAP.items(): self.stdout.write('migrating Project ' + str(project_id)) checks = self.fetch_checks_from_api(api_key) self.stdout.write('Checks fetched') self.create_checks_in_db(checks, project_id) self.stdout.write('Created checks in DB') def fetch_checks_from_api(self, api_key: str): response = requests.get(API_CHECKS_URL, headers={'X-Api-Key': api_key}) if response.ok: return response.json()['checks'] raise Exception('API request failed for api-key', api_key) def create_checks_in_db(self, checks: [dict], project_id: int): checks_to_create = [] for check in checks: checks_to_create.append(Check( name=check['name'], tags=check['tags'], desc=check['desc'], grace=td(seconds=check['grace']), n_pings=check['n_pings'], last_ping=check['last_ping'], timeout=td(seconds=check['timeout']) if 'timeout' in check else DEFAULT_TIMEOUT, tz=check['tz'] if 'tz' in check else 'UTC', schedule=check['schedule'] if 'schedule' in check else "* * * * *", code=check['ping_url'][check['ping_url'].find('.com/')+5:], kind='simple' if 'timeout' in check else 'cron', project_id=project_id, )) Check.objects.bulk_create(checks_to_create)