diff --git a/README.md b/README.md index bab54f8b..ecf9fb69 100644 --- a/README.md +++ b/README.md @@ -52,11 +52,10 @@ in development environment. $ psql --user postgres postgres=# create database hc; -* create database tables, triggers, superuser: +* create database tables and the superuser account: $ cd ~/webapps/healthchecks $ ./manage.py migrate - $ ./manage.py ensuretriggers $ ./manage.py createsuperuser * run development server: diff --git a/hc/api/management/commands/droptriggers.py b/hc/api/management/commands/droptriggers.py index 6c9a672f..a2ae64bf 100644 --- a/hc/api/management/commands/droptriggers.py +++ b/hc/api/management/commands/droptriggers.py @@ -22,6 +22,7 @@ def _sqlite(cursor): class Command(BaseCommand): help = 'Drops the `update_alert_after` trigger' + requires_system_checks = False def handle(self, *args, **options): with connection.cursor() as cursor: diff --git a/hc/api/models.py b/hc/api/models.py index ee702b8f..e2441fb7 100644 --- a/hc/api/models.py +++ b/hc/api/models.py @@ -7,6 +7,7 @@ from datetime import datetime, timedelta as td from croniter import croniter from django.conf import settings +from django.core.checks import Warning from django.contrib.auth.models import User from django.db import models from django.urls import reverse @@ -164,6 +165,29 @@ class Check(models.Model): return result + @classmethod + def check(cls, **kwargs): + errors = super(Check, cls).check(**kwargs) + + trigger_detected = False + try: + dummy = Check(last_ping=timezone.now()) + dummy.save() + dummy.refresh_from_db() + trigger_detected = bool(dummy.alert_after) + dummy.delete() + except: + pass + + if trigger_detected: + err = Warning( + "Obsolete 'update_alert_after' trigger exists in database.", + hint="Please remove the trigger with 'manage.py droptriggers'", + id="hc.api.E001") + errors.append(err) + + return errors + class Ping(models.Model): n = models.IntegerField(null=True)