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)
|
|
|
|
|
|
|
|
|