İçeriğe geç

SMS Delivery Monitoring — Runbook

Detay

scripts/sms-health-alert.ts scripti SmsLog tablosundan son 1 saatlik failure rate hesaplar. Rate %15 esigi asarsa PM2 log’una WARN yazar ve (varsa) Slack/Discord webhook’a bildirim gonderir. Idempotency: /tmp/sms-alert-last.txt dosyasina son alert zamani yazilir; ayni alert 60 dakika icerisinde tekrar tetiklenmez.


Her 15 dakikada bir calistirir:

*/15 * * * *

root veya yigit kullanicisiyla:

Terminal window
crontab -e

Acilan editore asagidaki satiri ekle (proje dizinini ayarla):

*/15 * * * * cd /var/www/vhosts/ecutuningportal.com/httpdocs && /usr/bin/pnpm tsx scripts/sms-health-alert.ts >> /var/log/sms-health-alert.log 2>&1

pnpm yolunu dogrula:

Terminal window
which pnpm
# ornekler: /usr/bin/pnpm veya /home/yigit/.local/share/pnpm/pnpm
Terminal window
touch /var/log/sms-health-alert.log
chmod 664 /var/log/sms-health-alert.log

Herhangi bir zamanda son durumu raporlatmak icin:

Terminal window
cd /var/www/vhosts/ecutuningportal.com/httpdocs
pnpm tsx scripts/sms-health-alert.ts

Beklenen cikti ornekleri:

# Oran iyi ise:
[SMS-ALERT] Last hour OK — failure 4.2% (threshold 15%) · total 48
# Mesaj yoksa:
[SMS-ALERT] Last hour: no messages — skipping
# Esik asildi, ilk tetiklenme:
[SMS-ALERT] Last hour failure rate 18.7% (threshold 15%) — total:32 failed:6 undelivered:0 — top error: 21211 (x6)
# Esik asildi ama dedup aktif:
[SMS-ALERT] SUPPRESSED (dedup window active) — failure 18.7%

  1. https://api.slack.com/apps adresine git
  2. Uygulamani sec (veya yeni olustur) → Incoming WebhooksActivate
  3. Add New Webhook to Workspace → kanal sec → URL kopyala
  4. URL formatı: https://hooks.slack.com/services/T.../B.../...
  1. Discord sunucunda kanal ayarlari → IntegrationsWebhooksNew Webhook
  2. URL kopyala: https://discord.com/api/webhooks/.../...
SMS_ALERT_WEBHOOK_URL=https://hooks.slack.com/services/T.../B.../...

Set edilmezse (veya bos birakılırsa) sadece PM2 log’una yazar, webhook atlanir.


Alert 1 saat boyunca suppress edilir. Mevcut suppress penceresini sifirlamak icin:

Terminal window
rm /tmp/sms-alert-last.txt

Sonsuz susturmak icin (cron devrede kalirken):

Terminal window
date +%s%3N | awk '{print $1 * 1000}' > /tmp/sms-alert-last.txt
# Bu dosyayı her saat guncelleyen once loop:
while true; do date +%s%3N > /tmp/sms-alert-last.txt; sleep 3600; done
  1. crontab -e ile ilgili satiri yoruma al veya sil
  2. Veya SMS_ALERT_WEBHOOK_URL env varini kaldirip ciktiyi yoksay

scripts/sms-health-alert.ts dosyasinda:

const FAILURE_THRESHOLD = 0.15; // %15 → ornektin %25 yapmak icin 0.25

SMS metriklerini gorsel olarak incelemek icin:

https://ecutuningportal.com/admin/sms-health

Sayfada:

  • Son 1 saat / 24 saat / 7 gun delivery rate StatCard
  • Son 24 saatin top error code tablosu
  • Son 10 basarisiz mesaj listesi (alici maskelenmis)

DosyaAcıklama
lib/sms/metrics.tsgetSmsHealth() + getRecentFailures() Prisma aggregate
scripts/sms-health-alert.tsCron scripti — log + webhook
app/[locale]/admin/(panel)/sms-health/page.tsxAdmin dashboard sayfası
/tmp/sms-alert-last.txtDedup dosyası (otomatik olusur)
/var/log/sms-health-alert.logCron stdout/stderr

Script Cannot find module '@/lib/sms/metrics' hatasıyla kapanıyor

tsconfig.json path alias kontrolu:

Terminal window
cd /var/www/vhosts/ecutuningportal.com/httpdocs
npx tsc --noEmit 2>&1 | grep metrics

Dedup dosyasi izin hatasi

Terminal window
ls -la /tmp/sms-alert-last.txt
# Sahip yanlissa:
chown $(whoami) /tmp/sms-alert-last.txt

Cron calismiyor

Terminal window
grep CRON /var/log/syslog | tail -20
crontab -l # mevcut cron listesi