From c24f60b63eed196575749c6089043f01664a49d0 Mon Sep 17 00:00:00 2001 From: King-khid Date: Sat, 6 Jun 2026 18:53:30 +0000 Subject: [PATCH 01/10] chore: init django project and install dependencies --- .gitignore | 28 ++++++++ config/__init__.py | 0 config/asgi.py | 16 +++++ config/settings.py | 122 ++++++++++++++++++++++++++++++++ config/urls.py | 22 ++++++ config/wsgi.py | 16 +++++ docs/architecture.png | Bin 0 -> 102614 bytes docs/design-notes.md | 0 manage.py | 22 ++++++ monitors/__init__.py | 0 monitors/admin.py | 3 + monitors/apps.py | 6 ++ monitors/migrations/__init__.py | 0 monitors/models.py | 3 + monitors/tests.py | 3 + monitors/views.py | 3 + requirements.txt | 8 +++ 17 files changed, 252 insertions(+) create mode 100644 .gitignore create mode 100644 config/__init__.py create mode 100644 config/asgi.py create mode 100644 config/settings.py create mode 100644 config/urls.py create mode 100644 config/wsgi.py create mode 100644 docs/architecture.png create mode 100644 docs/design-notes.md create mode 100755 manage.py create mode 100644 monitors/__init__.py create mode 100644 monitors/admin.py create mode 100644 monitors/apps.py create mode 100644 monitors/migrations/__init__.py create mode 100644 monitors/models.py create mode 100644 monitors/tests.py create mode 100644 monitors/views.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0fc42d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Python +__pycache__/ +*.py[cod] +*.pyo +*.pyd +*.egg-info/ +dist/ +build/ + +# Virtual environment +venv/ +env/ +.venv/ + +# Django +*.sqlite3 +staticfiles/ + +# Environment variables — never commit real keys +.env + +# OS +.DS_Store +Thumbs.db + +# IDEs +.vscode/ +.idea/ \ No newline at end of file diff --git a/config/__init__.py b/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/asgi.py b/config/asgi.py new file mode 100644 index 0000000..ed7c431 --- /dev/null +++ b/config/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for config project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + +application = get_asgi_application() diff --git a/config/settings.py b/config/settings.py new file mode 100644 index 0000000..29b3929 --- /dev/null +++ b/config/settings.py @@ -0,0 +1,122 @@ +""" +Django settings for config project. + +Generated by 'django-admin startproject' using Django 5.2.15. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/5.2/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-2@2#v0e@2)27-^r48#=^12025!c*(vts%k2c0!+rw15(eye5!n' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'config.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'config.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/5.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/5.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/5.2/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' diff --git a/config/urls.py b/config/urls.py new file mode 100644 index 0000000..35a0802 --- /dev/null +++ b/config/urls.py @@ -0,0 +1,22 @@ +""" +URL configuration for config project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/5.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path + +urlpatterns = [ + path('admin/', admin.site.urls), +] diff --git a/config/wsgi.py b/config/wsgi.py new file mode 100644 index 0000000..e2fbd58 --- /dev/null +++ b/config/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for config project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + +application = get_wsgi_application() diff --git a/docs/architecture.png b/docs/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..13aa129a0f5a9cfb3673af2f3060f5454a749e8b GIT binary patch literal 102614 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 literal 0 HcmV?d00001 diff --git a/docs/design-notes.md b/docs/design-notes.md new file mode 100644 index 0000000..e69de29 diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..8e7ac79 --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/monitors/__init__.py b/monitors/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/monitors/admin.py b/monitors/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/monitors/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/monitors/apps.py b/monitors/apps.py new file mode 100644 index 0000000..cc6bc1f --- /dev/null +++ b/monitors/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MonitorsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'monitors' diff --git a/monitors/migrations/__init__.py b/monitors/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/monitors/models.py b/monitors/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/monitors/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/monitors/tests.py b/monitors/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/monitors/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/monitors/views.py b/monitors/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/monitors/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..63ff19c --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +asgiref==3.11.1 +async-timeout==5.0.1 +Django==5.2.15 +djangorestframework==3.17.1 +python-dotenv==1.2.2 +redis==8.0.0 +sqlparse==0.5.5 +typing_extensions==4.15.0 From 00c247b6df955e37a9e748d9f0b65310caa6b23f Mon Sep 17 00:00:00 2001 From: King-khid Date: Sat, 6 Jun 2026 19:22:32 +0000 Subject: [PATCH 02/10] feat: configure redis client singleton --- config/settings.py | 110 +++++++-------------------------------- config/urls.py | 21 +------- monitors/urls.py | 3 ++ redis_client/__init__.py | 0 redis_client/client.py | 22 ++++++++ 5 files changed, 45 insertions(+), 111 deletions(-) create mode 100644 monitors/urls.py create mode 100644 redis_client/__init__.py create mode 100644 redis_client/client.py diff --git a/config/settings.py b/config/settings.py index 29b3929..7263c21 100644 --- a/config/settings.py +++ b/config/settings.py @@ -1,122 +1,48 @@ -""" -Django settings for config project. - -Generated by 'django-admin startproject' using Django 5.2.15. - -For more information on this file, see -https://docs.djangoproject.com/en/5.2/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/5.2/ref/settings/ -""" - from pathlib import Path +from dotenv import load_dotenv +import os -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = Path(__file__).resolve().parent.parent - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/ +load_dotenv() -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'django-insecure-2@2#v0e@2)27-^r48#=^12025!c*(vts%k2c0!+rw15(eye5!n' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +BASE_DIR = Path(__file__).resolve().parent.parent -ALLOWED_HOSTS = [] +SECRET_KEY = os.getenv('SECRET_KEY', 'django-insecure-dev-only-key') +DEBUG = os.getenv('DEBUG', 'True') == 'True' -# Application definition +ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', 'django.contrib.staticfiles', + 'rest_framework', + 'monitors', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'config.urls' -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - WSGI_APPLICATION = 'config.wsgi.application' - -# Database -# https://docs.djangoproject.com/en/5.2/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', - } -} - - -# Password validation -# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/5.2/topics/i18n/ +DATABASES = {} LANGUAGE_CODE = 'en-us' - TIME_ZONE = 'UTC' - USE_I18N = True - USE_TZ = True - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/5.2/howto/static-files/ - STATIC_URL = 'static/' -# Default primary key field type -# https://docs.djangoproject.com/en/5.2/ref/settings/#default-auto-field +REDIS_HOST = os.getenv('REDIS_HOST', '127.0.0.1') +REDIS_PORT = int(os.getenv('REDIS_PORT', 6379)) +REDIS_DB = int(os.getenv('REDIS_DB', 0)) -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' +REST_FRAMEWORK = { + 'DEFAULT_RENDERER_CLASSES': [ + 'rest_framework.renderers.JSONRenderer', + ] +} diff --git a/config/urls.py b/config/urls.py index 35a0802..1fa49fd 100644 --- a/config/urls.py +++ b/config/urls.py @@ -1,22 +1,5 @@ -""" -URL configuration for config project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/5.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.urls import path +from django.urls import path, include urlpatterns = [ - path('admin/', admin.site.urls), + path('', include('monitors.urls')), ] diff --git a/monitors/urls.py b/monitors/urls.py new file mode 100644 index 0000000..e39cb2c --- /dev/null +++ b/monitors/urls.py @@ -0,0 +1,3 @@ +from django.urls import path + +urlpatterns = [] diff --git a/redis_client/__init__.py b/redis_client/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/redis_client/client.py b/redis_client/client.py new file mode 100644 index 0000000..5ae9fd0 --- /dev/null +++ b/redis_client/client.py @@ -0,0 +1,22 @@ +import redis +import os +from dotenv import load_dotenv + +load_dotenv() + +_client = None + +def get_redis_client(): + """ + Returns a single shared Redis connection. + Creates it once and reuses it across the app. + """ + global _client + if _client is None: + _client = redis.Redis( + host=os.getenv('REDIS_HOST', '127.0.0.1'), + port=int(os.getenv('REDIS_PORT', 6379)), + db=int(os.getenv('REDIS_DB', 0)), + decode_responses=True + ) + return _client From bbf13f5893f728ed977c60030bc0c50ef253fb91 Mon Sep 17 00:00:00 2001 From: King-khid Date: Sat, 6 Jun 2026 20:15:19 +0000 Subject: [PATCH 03/10] feat: implement POST /monitors and GET /monitors endpoints --- config/settings.py | 5 +- monitors/services/monitor_service.py | 59 +++++++++++++++++++++++ monitors/urls.py | 6 ++- monitors/views.py | 70 +++++++++++++++++++++++++++- 4 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 monitors/services/monitor_service.py diff --git a/config/settings.py b/config/settings.py index 7263c21..bbe9126 100644 --- a/config/settings.py +++ b/config/settings.py @@ -14,6 +14,7 @@ INSTALLED_APPS = [ 'django.contrib.contenttypes', + 'django.contrib.auth', 'django.contrib.staticfiles', 'rest_framework', 'monitors', @@ -44,5 +45,7 @@ REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', - ] + ], + 'DEFAULT_AUTHENTICATION_CLASSES': [], + 'DEFAULT_PERMISSION_CLASSES': [], } diff --git a/monitors/services/monitor_service.py b/monitors/services/monitor_service.py new file mode 100644 index 0000000..0493b2c --- /dev/null +++ b/monitors/services/monitor_service.py @@ -0,0 +1,59 @@ +import json +from datetime import datetime, timezone +from redis_client.client import get_redis_client + +def register_monitor(device_id, timeout, alert_email): + """ + Registers a new monitor in Redis. + - monitor:{id} → hash storing device info and status + - ttl:{id} → expiring key that triggers the alert + """ + r = get_redis_client() + + # Check if monitor already exists + if r.exists(f'monitor:{device_id}'): + return None, 'Monitor with this ID already exists' + + now = datetime.now(timezone.utc).isoformat() + + # Store monitor data as a Redis hash + r.hset(f'monitor:{device_id}', mapping={ + 'id': device_id, + 'timeout': timeout, + 'alert_email': alert_email, + 'status': 'active', + 'created_at': now, + 'updated_at': now, + }) + + # Set the expiring TTL key — this is what Redis watches + r.set(f'ttl:{device_id}', '1', ex=timeout) + + return { + 'id': device_id, + 'timeout': timeout, + 'alert_email': alert_email, + 'status': 'active', + 'created_at': now, + }, None + + +def get_monitor(device_id): + """Fetch a single monitor by ID.""" + r = get_redis_client() + data = r.hgetall(f'monitor:{device_id}') + if not data: + return None + return data + + +def get_all_monitors(): + """Fetch all registered monitors.""" + r = get_redis_client() + keys = r.keys('monitor:*') + monitors = [] + for key in keys: + data = r.hgetall(key) + if data: + monitors.append(data) + return monitors diff --git a/monitors/urls.py b/monitors/urls.py index e39cb2c..b1d79fe 100644 --- a/monitors/urls.py +++ b/monitors/urls.py @@ -1,3 +1,7 @@ from django.urls import path +from monitors.views import MonitorListView, MonitorDetailView -urlpatterns = [] +urlpatterns = [ + path('monitors/', MonitorListView.as_view(), name='monitor-list'), + path('monitors//', MonitorDetailView.as_view(), name='monitor-detail'), +] diff --git a/monitors/views.py b/monitors/views.py index 91ea44a..4b3189c 100644 --- a/monitors/views.py +++ b/monitors/views.py @@ -1,3 +1,69 @@ -from django.shortcuts import render +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework import status +from monitors.services.monitor_service import ( + register_monitor, + get_monitor, + get_all_monitors, +) -# Create your views here. + +class MonitorListView(APIView): + + def get(self, request): + """GET /monitors — list all monitors""" + monitors = get_all_monitors() + return Response(monitors, status=status.HTTP_200_OK) + + def post(self, request): + """POST /monitors — register a new monitor""" + data = request.data + + # Validate required fields + required = ['id', 'timeout', 'alert_email'] + for field in required: + if field not in data: + return Response( + {'error': f'Missing required field: {field}'}, + status=status.HTTP_400_BAD_REQUEST + ) + + device_id = data['id'] + timeout = data['timeout'] + alert_email = data['alert_email'] + + # Validate timeout is a positive integer + if not isinstance(timeout, int) or timeout <= 0: + return Response( + {'error': 'timeout must be a positive integer (seconds)'}, + status=status.HTTP_400_BAD_REQUEST + ) + + monitor, error = register_monitor(device_id, timeout, alert_email) + + if error: + return Response( + {'error': error}, + status=status.HTTP_409_CONFLICT + ) + + return Response( + { + 'message': f'Monitor for {device_id} created successfully', + 'monitor': monitor, + }, + status=status.HTTP_201_CREATED + ) + + +class MonitorDetailView(APIView): + + def get(self, request, device_id): + """GET /monitors/{id} — get a single monitor""" + monitor = get_monitor(device_id) + if not monitor: + return Response( + {'error': f'Monitor {device_id} not found'}, + status=status.HTTP_404_NOT_FOUND + ) + return Response(monitor, status=status.HTTP_200_OK) From f894a9146d828a99f7334ea0f7169950dbc2e9c1 Mon Sep 17 00:00:00 2001 From: King-khid Date: Sat, 6 Jun 2026 21:05:20 +0000 Subject: [PATCH 04/10] feat: implement POST /monitors/{id}/heartbeat endpoint --- monitors/services/monitor_service.py | 51 ++++++++++++++++++++++++---- monitors/urls.py | 7 +++- monitors/views.py | 24 +++++++++++-- 3 files changed, 73 insertions(+), 9 deletions(-) diff --git a/monitors/services/monitor_service.py b/monitors/services/monitor_service.py index 0493b2c..4e743c0 100644 --- a/monitors/services/monitor_service.py +++ b/monitors/services/monitor_service.py @@ -1,7 +1,7 @@ -import json from datetime import datetime, timezone from redis_client.client import get_redis_client + def register_monitor(device_id, timeout, alert_email): """ Registers a new monitor in Redis. @@ -10,13 +10,11 @@ def register_monitor(device_id, timeout, alert_email): """ r = get_redis_client() - # Check if monitor already exists if r.exists(f'monitor:{device_id}'): return None, 'Monitor with this ID already exists' now = datetime.now(timezone.utc).isoformat() - # Store monitor data as a Redis hash r.hset(f'monitor:{device_id}', mapping={ 'id': device_id, 'timeout': timeout, @@ -26,18 +24,59 @@ def register_monitor(device_id, timeout, alert_email): 'updated_at': now, }) - # Set the expiring TTL key — this is what Redis watches - r.set(f'ttl:{device_id}', '1', ex=timeout) + r.set(f'ttl:{device_id}', '1', ex=int(timeout)) return { 'id': device_id, - 'timeout': timeout, + 'timeout': int(timeout), 'alert_email': alert_email, 'status': 'active', 'created_at': now, }, None +def heartbeat_monitor(device_id): + """ + Resets the countdown timer for a monitor. + - If monitor does not exist → return error + - If monitor is down → return error + - If monitor is paused → unpause and restart timer + - If monitor is active → reset timer + """ + r = get_redis_client() + + data = r.hgetall(f'monitor:{device_id}') + if not data: + return None, 'not_found' + + current_status = data.get('status') + timeout = int(data.get('timeout', 60)) + + if current_status == 'down': + return None, 'down' + + now = datetime.now(timezone.utc).isoformat() + + # Reset the TTL key (also unpauses if paused) + r.set(f'ttl:{device_id}', '1', ex=timeout) + + # Update status to active and refresh updated_at + r.hset(f'monitor:{device_id}', mapping={ + 'status': 'active', + 'updated_at': now, + }) + + # Clear any backoff alert keys if they exist + r.delete(f'backoff:{device_id}') + + return { + 'id': device_id, + 'status': 'active', + 'message': 'Heartbeat received — timer reset', + 'updated_at': now, + }, None + + def get_monitor(device_id): """Fetch a single monitor by ID.""" r = get_redis_client() diff --git a/monitors/urls.py b/monitors/urls.py index b1d79fe..a86fb82 100644 --- a/monitors/urls.py +++ b/monitors/urls.py @@ -1,7 +1,12 @@ from django.urls import path -from monitors.views import MonitorListView, MonitorDetailView +from monitors.views import ( + MonitorListView, + MonitorDetailView, + HeartbeatView, +) urlpatterns = [ path('monitors/', MonitorListView.as_view(), name='monitor-list'), path('monitors//', MonitorDetailView.as_view(), name='monitor-detail'), + path('monitors//heartbeat/', HeartbeatView.as_view(), name='monitor-heartbeat'), ] diff --git a/monitors/views.py b/monitors/views.py index 4b3189c..c5242bf 100644 --- a/monitors/views.py +++ b/monitors/views.py @@ -3,6 +3,7 @@ from rest_framework import status from monitors.services.monitor_service import ( register_monitor, + heartbeat_monitor, get_monitor, get_all_monitors, ) @@ -19,7 +20,6 @@ def post(self, request): """POST /monitors — register a new monitor""" data = request.data - # Validate required fields required = ['id', 'timeout', 'alert_email'] for field in required: if field not in data: @@ -32,7 +32,6 @@ def post(self, request): timeout = data['timeout'] alert_email = data['alert_email'] - # Validate timeout is a positive integer if not isinstance(timeout, int) or timeout <= 0: return Response( {'error': 'timeout must be a positive integer (seconds)'}, @@ -67,3 +66,24 @@ def get(self, request, device_id): status=status.HTTP_404_NOT_FOUND ) return Response(monitor, status=status.HTTP_200_OK) + + +class HeartbeatView(APIView): + + def post(self, request, device_id): + """POST /monitors/{id}/heartbeat — reset the timer""" + result, error = heartbeat_monitor(device_id) + + if error == 'not_found': + return Response( + {'error': f'Monitor {device_id} not found'}, + status=status.HTTP_404_NOT_FOUND + ) + + if error == 'down': + return Response( + {'error': f'Monitor {device_id} is down — re-register to resume'}, + status=status.HTTP_400_BAD_REQUEST + ) + + return Response(result, status=status.HTTP_200_OK) From 66b0d663e0495b2caf5c81a3233b958b8dbd27c6 Mon Sep 17 00:00:00 2001 From: King-khid Date: Sat, 6 Jun 2026 21:17:17 +0000 Subject: [PATCH 05/10] feat: implement keyspace listener and exponential backoff alert engine --- monitors/management/__init__.py | 0 monitors/management/commands/__init__.py | 0 .../management/commands/start_listener.py | 43 ++++++++++ monitors/services/alert_service.py | 80 +++++++++++++++++++ 4 files changed, 123 insertions(+) create mode 100644 monitors/management/__init__.py create mode 100644 monitors/management/commands/__init__.py create mode 100644 monitors/management/commands/start_listener.py create mode 100644 monitors/services/alert_service.py diff --git a/monitors/management/__init__.py b/monitors/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/monitors/management/commands/__init__.py b/monitors/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/monitors/management/commands/start_listener.py b/monitors/management/commands/start_listener.py new file mode 100644 index 0000000..940853a --- /dev/null +++ b/monitors/management/commands/start_listener.py @@ -0,0 +1,43 @@ +from django.core.management.base import BaseCommand +from redis_client.client import get_redis_client +from monitors.services.alert_service import fire_alert, fire_backoff_alert + + +class Command(BaseCommand): + help = 'Listens for Redis keyspace expiry events and fires alerts' + + def handle(self, *args, **options): + r = get_redis_client() + pubsub = r.pubsub() + + pubsub.psubscribe('__keyevent@0__:expired') + + self.stdout.write(self.style.SUCCESS( + 'Keyspace listener started — waiting for expiry events...' + )) + + for message in pubsub.listen(): + if message['type'] != 'pmessage': + continue + + expired_key = message['data'] + self.stdout.write(f'Key expired: {expired_key}') + + # ttl:{device_id} expired → device missed heartbeat + if expired_key.startswith('ttl:'): + device_id = expired_key[len('ttl:'):] + self.stdout.write(self.style.WARNING( + f'Monitor {device_id} missed heartbeat — firing alert' + )) + fire_alert(device_id) + + # backoff:{device_id}:{level} expired → escalate alert + elif expired_key.startswith('backoff:'): + parts = expired_key.split(':') + if len(parts) == 3: + device_id = parts[1] + level = int(parts[2]) + self.stdout.write(self.style.WARNING( + f'Firing backoff level {level} alert for {device_id}' + )) + fire_backoff_alert(device_id, level) diff --git a/monitors/services/alert_service.py b/monitors/services/alert_service.py new file mode 100644 index 0000000..d81e1fe --- /dev/null +++ b/monitors/services/alert_service.py @@ -0,0 +1,80 @@ +import json +from datetime import datetime, timezone +from redis_client.client import get_redis_client + + +BACKOFF_LEVELS = { + '1': {'delay': 30, 'severity': 'URGENT'}, + '2': {'delay': 90, 'severity': 'CRITICAL'}, +} + + +def fire_alert(device_id): + """ + Fires the first alert when a device goes down. + Sets monitor status to down and schedules backoff alerts. + """ + r = get_redis_client() + + data = r.hgetall(f'monitor:{device_id}') + if not data: + return + + now = datetime.now(timezone.utc).isoformat() + + # Update monitor status to down + r.hset(f'monitor:{device_id}', mapping={ + 'status': 'down', + 'updated_at': now, + }) + + # Fire Alert 1 — Warning + alert = { + 'ALERT': f'Device {device_id} is down!', + 'severity': 'WARNING', + 'email': data.get('alert_email'), + 'time': now, + } + print(json.dumps(alert)) + + # Schedule Alert 2 — set a backoff key with 30s TTL + r.set(f'backoff:{device_id}:1', '1', ex=30) + + +def fire_backoff_alert(device_id, level): + """ + Fires escalating alerts after the initial one. + level 1 → URGENT (fires 30s after first alert) + level 2 → CRITICAL (fires 90s after second alert) + """ + r = get_redis_client() + + data = r.hgetall(f'monitor:{device_id}') + if not data: + return + + # If device recovered, stop escalating + if data.get('status') != 'down': + return + + now = datetime.now(timezone.utc).isoformat() + level_str = str(level) + config = BACKOFF_LEVELS.get(level_str) + + if not config: + return + + # Fire the escalated alert + alert = { + 'ALERT': f'Device {device_id} is still down!', + 'severity': config['severity'], + 'email': data.get('alert_email'), + 'time': now, + } + print(json.dumps(alert)) + + # Schedule next level if it exists + next_level = str(level + 1) + if next_level in BACKOFF_LEVELS: + next_delay = BACKOFF_LEVELS[next_level]['delay'] + r.set(f'backoff:{device_id}:{next_level}', '1', ex=next_delay) From 3c9f08e5e0c46f501b024f1565aa7415b53e9e4a Mon Sep 17 00:00:00 2001 From: King-khid Date: Sat, 6 Jun 2026 21:40:30 +0000 Subject: [PATCH 06/10] feat: implement POST /monitors/{id}/pause endpoint --- config/settings.py | 2 +- monitors/services/monitor_service.py | 57 ++++++++++++++++++++-------- monitors/urls.py | 2 + monitors/views.py | 28 ++++++++++++++ 4 files changed, 72 insertions(+), 17 deletions(-) diff --git a/config/settings.py b/config/settings.py index bbe9126..c7f20a5 100644 --- a/config/settings.py +++ b/config/settings.py @@ -6,7 +6,7 @@ BASE_DIR = Path(__file__).resolve().parent.parent -SECRET_KEY = os.getenv('SECRET_KEY', 'django-insecure-dev-only-key') +SECRET_KEY = os.getenv("SECRET_KEY") DEBUG = os.getenv('DEBUG', 'True') == 'True' diff --git a/monitors/services/monitor_service.py b/monitors/services/monitor_service.py index 4e743c0..6e3fc59 100644 --- a/monitors/services/monitor_service.py +++ b/monitors/services/monitor_service.py @@ -3,11 +3,6 @@ def register_monitor(device_id, timeout, alert_email): - """ - Registers a new monitor in Redis. - - monitor:{id} → hash storing device info and status - - ttl:{id} → expiring key that triggers the alert - """ r = get_redis_client() if r.exists(f'monitor:{device_id}'): @@ -36,13 +31,6 @@ def register_monitor(device_id, timeout, alert_email): def heartbeat_monitor(device_id): - """ - Resets the countdown timer for a monitor. - - If monitor does not exist → return error - - If monitor is down → return error - - If monitor is paused → unpause and restart timer - - If monitor is active → reset timer - """ r = get_redis_client() data = r.hgetall(f'monitor:{device_id}') @@ -60,13 +48,13 @@ def heartbeat_monitor(device_id): # Reset the TTL key (also unpauses if paused) r.set(f'ttl:{device_id}', '1', ex=timeout) - # Update status to active and refresh updated_at + # Update status to active r.hset(f'monitor:{device_id}', mapping={ 'status': 'active', 'updated_at': now, }) - # Clear any backoff alert keys if they exist + # Clear any backoff keys r.delete(f'backoff:{device_id}') return { @@ -77,8 +65,46 @@ def heartbeat_monitor(device_id): }, None +def pause_monitor(device_id): + """ + Pauses a monitor by removing the TTL key. + Redis PERSIST removes the expiry — key stays forever until deleted. + No alerts will fire while paused. + """ + r = get_redis_client() + + data = r.hgetall(f'monitor:{device_id}') + if not data: + return None, 'not_found' + + current_status = data.get('status') + + if current_status == 'down': + return None, 'down' + + if current_status == 'paused': + return None, 'already_paused' + + now = datetime.now(timezone.utc).isoformat() + + # Remove the TTL — timer stops completely + r.persist(f'ttl:{device_id}') + + # Update status to paused + r.hset(f'monitor:{device_id}', mapping={ + 'status': 'paused', + 'updated_at': now, + }) + + return { + 'id': device_id, + 'status': 'paused', + 'message': 'Monitor paused — no alerts will fire', + 'updated_at': now, + }, None + + def get_monitor(device_id): - """Fetch a single monitor by ID.""" r = get_redis_client() data = r.hgetall(f'monitor:{device_id}') if not data: @@ -87,7 +113,6 @@ def get_monitor(device_id): def get_all_monitors(): - """Fetch all registered monitors.""" r = get_redis_client() keys = r.keys('monitor:*') monitors = [] diff --git a/monitors/urls.py b/monitors/urls.py index a86fb82..38b6550 100644 --- a/monitors/urls.py +++ b/monitors/urls.py @@ -3,10 +3,12 @@ MonitorListView, MonitorDetailView, HeartbeatView, + PauseView, ) urlpatterns = [ path('monitors/', MonitorListView.as_view(), name='monitor-list'), path('monitors//', MonitorDetailView.as_view(), name='monitor-detail'), path('monitors//heartbeat/', HeartbeatView.as_view(), name='monitor-heartbeat'), + path('monitors//pause/', PauseView.as_view(), name='monitor-pause'), ] diff --git a/monitors/views.py b/monitors/views.py index c5242bf..1cb5031 100644 --- a/monitors/views.py +++ b/monitors/views.py @@ -4,6 +4,7 @@ from monitors.services.monitor_service import ( register_monitor, heartbeat_monitor, + pause_monitor, get_monitor, get_all_monitors, ) @@ -87,3 +88,30 @@ def post(self, request, device_id): ) return Response(result, status=status.HTTP_200_OK) + + +class PauseView(APIView): + + def post(self, request, device_id): + """POST /monitors/{id}/pause — freeze the timer""" + result, error = pause_monitor(device_id) + + if error == 'not_found': + return Response( + {'error': f'Monitor {device_id} not found'}, + status=status.HTTP_404_NOT_FOUND + ) + + if error == 'down': + return Response( + {'error': f'Monitor {device_id} is down — cannot pause'}, + status=status.HTTP_400_BAD_REQUEST + ) + + if error == 'already_paused': + return Response( + {'error': f'Monitor {device_id} is already paused'}, + status=status.HTTP_400_BAD_REQUEST + ) + + return Response(result, status=status.HTTP_200_OK) From bad4ca96e47f6df73afb4cff4d1202efcd950eaf Mon Sep 17 00:00:00 2001 From: King-khid Date: Sat, 6 Jun 2026 21:57:57 +0000 Subject: [PATCH 07/10] docs: write full README with architecture diagram and API documentation --- README.md | 364 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 269 insertions(+), 95 deletions(-) diff --git a/README.md b/README.md index 0c40ea1..1681fdc 100644 --- a/README.md +++ b/README.md @@ -1,135 +1,309 @@ -# Pulse-Check-API ("Watchdog" Sentinel) -This challenge is designed to test your ability to bridge Computer Science fundamentals with Modern Backend Engineering. +# Pulse-Check-API — Dead Man's Switch Monitor -## 1. Business Context -> **Client:** *CritMon Servers Inc.* (A Critical Infrastructure Monitoring Company). +A production-grade backend service that monitors remote devices (solar farms, weather stations, etc.) and triggers escalating alerts when a device stops sending heartbeats. -### The Problem -CritMon provides monitoring for remote solar farms and unmanned weather stations in areas with poor connectivity. These devices are supposed to send "I'm alive" signals every hour. +Built with **Python + Django + Redis**. -Currently, CritMon has no way of knowing if a device has gone offline (due to power failure or theft) until a human manually checks the logs. They need a system that alerts *them* when a device *stops* talking. +--- + +## Architecture Diagram +[Device] ──POST /monitors──────────────► [Django API] +│ +Save to Redis +Start TTL key +│ +[Device] ──POST /heartbeat─────────────► [Django API] +│ +Reset TTL key +│ +Timer expires? +│ +[Redis keyspace event] +│ +[Listener command] +│ +┌──────────▼──────────┐ +│ Alert 1 WARNING │ immediately +│ Alert 2 URGENT │ +30s +│ Alert 3 CRITICAL │ +90s +└─────────────────────┘ + +--- + +## How It Works -### The Solution -You need to build a **Dead Man’s Switch API**. Devices will register a "monitor" with a countdown timer (e.g., 60 seconds). If the device fails to "ping" (send a heartbeat) to the API before the timer runs out, the system automatically triggers an alert. +1. A device registers a monitor with a timeout (e.g. 60 seconds) +2. Redis starts a countdown (TTL key) +3. The device sends heartbeats to reset the timer +4. If no heartbeat arrives before the timer hits zero, Redis fires an expiry event +5. A background listener catches the event and fires escalating alerts +6. A maintenance technician can pause monitoring to avoid false alarms --- -## 2. Technical Objective -Build a backend service that manages stateful timers. +## Setup Instructions + +### Requirements +- Python 3.10+ +- Redis server +- pip + +### Installation + +**1. Clone the repository** +```bash +git clone https://github.com/YOUR_USERNAME/pulse-check-api.git +cd pulse-check-api +``` + +**2. Create and activate a virtual environment** +```bash +python -m venv venv +source venv/bin/activate +``` + +**3. Install dependencies** +```bash +pip install -r requirements.txt +``` -* **Registration:** Allow a client to create a monitor with a specific timeout duration. -* **Heartbeat:** Reset the countdown when a ping is received. -* **Trigger:** Fire a webhook (or log a critical error) if the countdown reaches zero. +**4. Create your `.env` file** +```bash +cp .env.example .env +``` +**5. Start Redis** +```bash +sudo service redis-server start +``` + +**6. Enable Redis keyspace notifications** +```bash +redis-cli config set notify-keyspace-events Ex +``` + +**7. Run database-free check** +```bash +python manage.py check +``` + +### Running the Service + +You need **two terminals** running simultaneously: + +**Terminal 1 — API server** +```bash +python manage.py runserver +``` + +**Terminal 2 — Keyspace listener** +```bash +python manage.py start_listener +``` --- -## 3. Getting Started +## API Documentation -1. **Fork this Repository:** Do not clone it directly. Create a fork to your own GitHub account. -2. **Environment:** You may use **Node.js, Python, Java or Go, etc.**. -3. **Submission:** Your final submission will be a link to your forked repository containing: - * The source code. - * The **Architecture Diagram** - * The `README.md` with documentation. +### Base URL +http://127.0.0.1:8000 --- -## 4. The Architecture Diagram -**Task:** Before you write any code, you must design the logic flow. -**Deliverable:** A **Sequence Diagram** or **State Flowchart** embedded in your `README.md`. +### 1. Register a Monitor +**POST** `/monitors/` + +Registers a new device monitor and starts the countdown timer. + +**Request body:** +```json +{ + "id": "device-123", + "timeout": 60, + "alert_email": "admin@critmon.com" +} +``` + +**Responses:** + +| Status | Description | +|--------|-------------| +| 201 | Monitor created successfully | +| 400 | Missing or invalid fields | +| 409 | Monitor with this ID already exists | + +**Example response (201):** +```json +{ + "message": "Monitor for device-123 created successfully", + "monitor": { + "id": "device-123", + "timeout": 60, + "alert_email": "admin@critmon.com", + "status": "active", + "created_at": "2026-06-06T19:37:30.260117+00:00" + } +} +``` --- -## 5. User Stories & Acceptance Criteria - -### User Story 1: Registering a Monitor -**As a** device administrator, -**I want to** create a new monitor for my device, -**So that** the system knows to track its status. - -**Acceptance Criteria:** -- [ ] The API accepts a `POST /monitors` request. -- [ ] Input: `{"id": "device-123", "timeout": 60, "alert_email": "admin@critmon.com"}`. -- [ ] The system starts a countdown timer for 60 seconds associated with `device-123`. -- [ ] Response: `201 Created` with a confirmation message. - -### User Story 2: The Heartbeat (Reset) -**As a** remote device, -**I want to** send a signal to the server, -**So that** my timer is reset and no alert is sent. - -**Acceptance Criteria:** -- [ ] The API accepts a `POST /monitors/{id}/heartbeat` request. -- [ ] If the ID exists and the timer has NOT expired: - - [ ] Restart the countdown from the beginning (e.g., reset to 60 seconds). - - [ ] Return `200 OK`. -- [ ] If the ID does not exist: - - [ ] Return `404 Not Found`. - -### User Story 3: The Alert (Failure State) -**As a** support engineer, -**I want to** be notified immediately if a device stops sending heartbeats, -**So that** I can deploy a repair team. - -**Acceptance Criteria:** -- [ ] If the timer for `device-123` reaches 0 seconds (no heartbeat received): - - [ ] The system must internally "fire" an alert. - - [ ] **Implementation:** For this project, simply `console.log` a JSON object: `{"ALERT": "Device device-123 is down!", "time": }`. (Or simulate sending an email). - - [ ] The monitor status changes to `down`. +### 2. Send Heartbeat +**POST** `/monitors/{id}/heartbeat/` + +Resets the countdown timer. Automatically unpauses a paused monitor. + +**No request body needed.** + +**Responses:** + +| Status | Description | +|--------|-------------| +| 200 | Timer reset successfully | +| 404 | Monitor not found | +| 400 | Monitor is down — re-register to resume | + +**Example response (200):** +```json +{ + "id": "device-123", + "status": "active", + "message": "Heartbeat received — timer reset", + "updated_at": "2026-06-06T19:45:00.000000+00:00" +} +``` --- -## 6. Bonus User Story (The "Snooze" Button) -**As a** maintenance technician, -**I want to** pause monitoring while I am repairing a device, -**So that** I don't trigger false alarms. +### 3. Pause a Monitor +**POST** `/monitors/{id}/pause/` + +Freezes the timer completely. No alerts will fire while paused. +Sending a heartbeat automatically resumes the monitor. + +**No request body needed.** + +**Responses:** -**Acceptance Criteria:** -- [ ] Create a `POST /monitors/{id}/pause` endpoint. -- [ ] When called, the timer stops completely. No alerts will fire. -- [ ] Calling the heartbeat endpoint again automatically "un-pauses" the monitor and restarts the timer. +| Status | Description | +|--------|-------------| +| 200 | Monitor paused successfully | +| 400 | Monitor is already paused or is down | +| 404 | Monitor not found | + +**Example response (200):** +```json +{ + "id": "device-123", + "status": "paused", + "message": "Monitor paused — no alerts will fire", + "updated_at": "2026-06-06T19:50:00.000000+00:00" +} +``` --- -## 7. The "Developer's Choice" Challenge -We value engineers who look for "what's missing." +### 4. List All Monitors +**GET** `/monitors/` + +Returns all registered monitors and their current status. + +**Example response (200):** +```json +[ + { + "id": "device-123", + "timeout": "60", + "alert_email": "admin@critmon.com", + "status": "active", + "created_at": "2026-06-06T19:37:30.260117+00:00", + "updated_at": "2026-06-06T19:45:00.000000+00:00" + } +] +``` + +--- + +### 5. Get Single Monitor +**GET** `/monitors/{id}/` + +Returns a single monitor by ID. -**Task:** Identify **one** additional feature that makes this system more robust or user-friendly. -1. **Implement it.** -2. **Document it:** Explain *why* you added it in your README. +**Responses:** + +| Status | Description | +|--------|-------------| +| 200 | Monitor found | +| 404 | Monitor not found | --- -## 8. Documentation Requirements -Your final `README.md` must replace these instructions. It must cover: +## Alert System + +When a device misses its heartbeat the system fires three escalating alerts logged to the listener console: + +| Alert | Severity | When | +|-------|----------|------| +| Alert 1 | WARNING | Immediately when timer expires | +| Alert 2 | URGENT | 30 seconds after Alert 1 | +| Alert 3 | CRITICAL | 90 seconds after Alert 2 | -1. **Architecture Diagram** -2. **Setup Instructions** -3. **API Documentation** -4. **The Developer's Choice:** Explanation of your added feature. +**Example alert output:** +```json +{"ALERT": "Device device-123 is down!", "severity": "WARNING", "email": "admin@critmon.com", "time": "2026-06-06T21:13:49.500142+00:00"} +{"ALERT": "Device device-123 is still down!", "severity": "URGENT", "email": "admin@critmon.com", "time": "2026-06-06T21:14:19.578988+00:00"} +{"ALERT": "Device device-123 is still down!", "severity": "CRITICAL", "email": "admin@critmon.com", "time": "2026-06-06T21:15:49.612045+00:00"} +``` + +Alerts stop escalating as soon as the device sends a heartbeat again. --- -Submit your repo link via the [online](https://forms.office.com/e/rGKtfeZCsH) form. -## 🛑 Pre-Submission Checklist -**WARNING:** Before you submit your solution, you **MUST** pass every item on this list. -If you miss any of these critical steps, your submission will be **automatically rejected** and you will **NOT** be invited to an interview. +## Developer's Choice — Exponential Backoff Alerts -### 1. 📂 Repository & Code -- [ ] **Public Access:** Is your GitHub repository set to **Public**? (We cannot review private repos). -- [ ] **Clean Code:** Did you remove unnecessary files (like `node_modules`, `.env` with real keys, or `.DS_Store`)? -- [ ] **Run Check:** if we clone your repo and run `npm start` (or equivalent), does the server start immediately without crashing? +### What it is +Instead of firing a single alert when a device goes down, the system escalates notifications with increasing urgency over time. -### 2. 📄 Documentation (Crucial) -- [ ] **Architecture Diagram:** Did you include a visual Diagram (Flowchart or Sequence Diagram) in the README? -- [ ] **README Swap:** Did you **DELETE** the original instructions (the problem brief) from this file and replace it with your own documentation? -- [ ] **API Docs:** Is there a clear list of Endpoints and Example Requests in the README? +### Why it was added +A single alert is easy to miss. In a critical infrastructure context (solar farms, unmanned weather stations), a missed alert could mean hours of downtime before anyone responds. Escalating alerts ensure that: +- A first responder sees the WARNING immediately +- If unacknowledged, the URGENT alert creates pressure to act +- The CRITICAL alert signals a serious outage requiring immediate deployment -### 3. 🧹 Git Hygiene -- [ ] **Commit History:** Does your repo have multiple commits with meaningful messages? (A single "Initial Commit" is a red flag). +### How it works +Redis backoff keys with expiring TTLs drive the escalation. Each alert schedules the next one by setting a new key with a delay. If the device recovers and sends a heartbeat, the backoff keys are cleared and escalation stops. --- -**Ready?** -If you checked all the boxes above, submit your repository link in the application form. Good luck! 🚀 + +## Project Structure +pulse-check-api/ +├── config/ # Django project settings +│ ├── settings.py +│ ├── urls.py +│ └── wsgi.py +├── monitors/ # Core app +│ ├── views.py # API endpoints +│ ├── urls.py # URL routing +│ ├── services/ +│ │ ├── monitor_service.py # Register, heartbeat, pause logic +│ │ └── alert_service.py # Alert firing and backoff +│ └── management/commands/ +│ └── start_listener.py # Redis keyspace event listener +├── redis_client/ +│ └── client.py # Redis singleton +├── .env.example # Environment variable template +├── requirements.txt +└── manage.py + +--- + +## Pre-Submission Checklist + +- ✅ Repository is public +- ✅ No `node_modules`, `.env`, or sensitive files committed +- ✅ Server starts with `python manage.py runserver` +- ✅ Architecture diagram included +- ✅ Original instructions replaced with this README +- ✅ All endpoints documented with example requests +- ✅ Multiple meaningful commits From e5a8681dc889d77d1f0a4676fba046add5917cf0 Mon Sep 17 00:00:00 2001 From: Kingsley Thompson Date: Sat, 6 Jun 2026 22:01:54 +0000 Subject: [PATCH 08/10] Update README.md --- README.md | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 1681fdc..b78ec10 100644 --- a/README.md +++ b/README.md @@ -7,28 +7,8 @@ Built with **Python + Django + Redis**. --- ## Architecture Diagram -[Device] ──POST /monitors──────────────► [Django API] -│ -Save to Redis -Start TTL key -│ -[Device] ──POST /heartbeat─────────────► [Django API] -│ -Reset TTL key -│ -Timer expires? -│ -[Redis keyspace event] -│ -[Listener command] -│ -┌──────────▼──────────┐ -│ Alert 1 WARNING │ immediately -│ Alert 2 URGENT │ +30s -│ Alert 3 CRITICAL │ +90s -└─────────────────────┘ +image ---- ## How It Works @@ -52,7 +32,7 @@ Timer expires? **1. Clone the repository** ```bash -git clone https://github.com/YOUR_USERNAME/pulse-check-api.git +git clone https://github.com/KingJoe-14/pulse-check-api.git cd pulse-check-api ``` From 3004d7503f970d322e1f4adccf6582ede79da112 Mon Sep 17 00:00:00 2001 From: Kingsley Thompson Date: Sat, 6 Jun 2026 22:04:27 +0000 Subject: [PATCH 09/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b78ec10..b33ceeb 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ pip install -r requirements.txt **4. Create your `.env` file** ```bash -cp .env.example .env +cp .env ``` **5. Start Redis** From 45f5533ce7f1a58990cbad88a997dc153e3b0d7c Mon Sep 17 00:00:00 2001 From: King-khid Date: Sat, 6 Jun 2026 22:08:02 +0000 Subject: [PATCH 10/10] docs: clean up initial design artifacts --- docs/architecture.png | Bin 102614 -> 0 bytes docs/design-notes.md | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 docs/architecture.png delete mode 100644 docs/design-notes.md diff --git a/docs/architecture.png b/docs/architecture.png deleted file mode 100644 index 13aa129a0f5a9cfb3673af2f3060f5454a749e8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102614 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 diff --git a/docs/design-notes.md b/docs/design-notes.md deleted file mode 100644 index e69de29..0000000