āĻāĻāĻā§āϰ āĻāĻĒāĻŋāĻ â āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ Django āĻĒā§āϰāĻā§āĻā§āĻā§āϰ āĻā§āϤāϰā§āĻ āϏāĻžāĻāĻ āĻŽāύāĻŋāĻāϰāĻŋāĻ āϏā§āĻāĻāĻĒ āĻāϰ⧠Mattermost āĻā§āϝāĻžāύā§āϞ⧠āĻ āĻā§āĻŽā§āĻāĻŋāĻ āύā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāύ āĻĒāĻžāĻ āĻžāύ⧠āϝāĻžā§āĨ¤
āĻāĻŽāϰāĻž āĻ āύā§āĻ āϏāĻŽā§ āĻĻā§āĻāĻŋ āĻā§āĻ āĻāĻŋāĻŽāĻā§āϞ⧠āϏāĻžāĻāĻ āĻāĻĒ/āĻĄāĻžāĻāύ āĻā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāϞāĻžāĻĻāĻž āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻāĻŋāύā§āϤ⧠Django + Python āĻĻāĻŋā§ā§āĻ āĻāĻžāĻāϞ⧠āϏāĻšāĻā§ āĻāĻžāϏā§āĻāĻŽ āϏāϞāĻŋāĻāĻļāύ āĻŦāĻžāύāĻžāύ⧠āϏāĻŽā§āĻāĻŦāĨ¤
⨠āĻā§āύ Django āĻĻāĻŋā§ā§āĻ āĻāϰāĻŦā§āύ?
- Zero-cost āϏāϞāĻŋāĻāĻļāύ: n8n āĻŦāĻž external āĻā§āϞ āĻāĻžā§āĻžāĻ āĻāĻžāĻ āĻšāĻŦā§
- Customizable: āĻļā§āϧ⧠Mattermost āύā§, āĻāĻžāĻāϞ⧠Slack/Discord/Telegram āϏāĻŦ āĻāĻžā§āĻāĻžā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžāĻŦā§
- Integration Friendly: āĻāĻĒāύāĻžāϰ Django āĻĒā§āϰāĻā§āĻā§āĻā§āϰ āϏāĻžāĻĨā§āĻ āĻŽāĻŋāĻļā§ āϝāĻžāĻŦā§
đ ī¸ Step 1: Settings āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰā§āύ
settings.py āĻĢāĻžāĻāϞ⧠āϏāĻžāĻāĻ āϞāĻŋāϏā§āĻ āĻāϰ Mattermost webhook URL āϝā§āĻ āĻāϰā§āύāĨ¤
# settings.py
MONITORED_SITES = [
"https://devs3.pro",
"https://your-other-site.com",
]
MATTERMOST_WEBHOOK_URL = "https://mattermost.yourdomain/hooks/xxxxxxx" đ ī¸ Step 2: Management Command āϤā§āϰāĻŋ āĻāϰā§āύ
Django-āϤ⧠āĻāĻžāϏā§āĻāĻŽ command āĻŦāĻžāύāĻŋā§ā§ āύāĻŋāύ āϝā§āĻāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻžāĻāĻāĻā§āϞ⧠āĻā§āĻ āĻāϰāĻŦā§āĨ¤
# apps/monitor/management/commands/check_sites.py import requests
from django.core.management.base import BaseCommand
from django.conf import settings
class Command(BaseCommand):
help = "Check monitored sites and send alert if down"
def handle(self, *args, **kwargs):
sites = getattr(settings, "MONITORED_SITES", [])
for site in sites:
try:
response = requests.get(site, timeout=10)
if response.status_code == 200:
self.send_mattermost_alert(site, "â
Site is UP")
else:
self.send_mattermost_alert(site, f"â ī¸ Site returned {response.status_code}")
except requests.RequestException:
self.send_mattermost_alert(site, "â Site DOWN")
def send_mattermost_alert(self, site, message):
import requests
webhook_url = getattr(settings, "MATTERMOST_WEBHOOK_URL", None)
payload = {"text": f"{message}: {site}"}
requests.post(webhook_url, json=payload)
đ ī¸ Step 3: Command āϰāĻžāύ āĻāϰā§āύ
āĻŽā§āϝāĻžāύā§ā§āĻžāϞāĻŋ āĻāĻžāϞāĻžāϤ⧠āĻĒāĻžāϰā§āύ:
python manage.py check_sites
đ ī¸ Step 4: Cronjob āĻĻāĻŋā§ā§ Automation
Linux āϏāĻžāϰā§āĻāĻžāϰ⧠cron āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĒā§āϰāϤāĻŋ ā§Ģ āĻŽāĻŋāύāĻŋāĻā§ āϏāĻžāĻāĻ āĻā§āĻ āĻāϰāĻžāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
*/5 * * * * /path/to/venv/bin/python /path/to/project/manage.py check_sites
āĻāĻāύ āĻĨā§āĻā§ āĻĒā§āϰāϤāĻŋ ā§Ģ āĻŽāĻŋāύāĻŋāĻā§ āϏāĻžāĻāĻ āĻā§āĻ āĻšāĻŦā§ āĻāϰ āĻāĻĒāĻĄā§āĻ āϝāĻžāĻŦā§ Mattermost āĻā§āϝāĻžāύā§āϞā§āĨ¤
đ Output Example
Mattermost āĻ āĻāϰāĻāĻŽ āĻŽā§āϏā§āĻ āĻĒāĻžāĻŦā§āύ:
â
Site is UP: https://devs3.pro
â Site DOWN: https://your-other-site.com đ¯ āĻāĻĒāϏāĻāĻšāĻžāϰ
āĻāĻāύ āĻāϰ āĻāϞāĻžāĻĻāĻž āĻā§āϞ āϞāĻžāĻāĻŦā§ āύāĻž, āύāĻŋāĻā§āϰ Django āĻĒā§āϰāĻā§āĻā§āĻā§āϰ āĻā§āϤāϰā§āĻ āĻāĻāĻāĻŋ āϞāĻžāĻāĻāĻā§ā§āĻ Site Monitoring + Mattermost Alert System āϤā§āϰāĻŋ āĻšā§ā§ āĻā§āϞāĨ¤
- āĻā§āĻ āĻāĻŋāĻŽā§āϰ āĻāύā§āϝ āĻāĻā§āĻŦāĻžāϰ⧠perfect
- āĻāĻžāĻāϞ⧠future-āĻ Celery āĻĻāĻŋā§ā§ scalable periodic task āĻŦāĻžāύāĻžāϤ⧠āĻĒāĻžāϰāĻŦā§āύ
- Slack/Discord/Telegram āĻāĻ āĻāĻāĻāĻāĻžāĻŦā§ extend āĻāϰāĻž āϏāĻŽā§āĻāĻŦ