🚀 Django āĻĻāĻŋā§Ÿā§‡ Site Monitoring āĻ“ Mattermost Notification System

mahabub.devs3
Mahabubur Rahman
Published on Sep, 19 2025 2 min read 0 comments
Text Image

āφāϜāϕ⧇āϰ āϟāĻĒāĻŋāĻ• — āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ 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 āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ
0 Comments