Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/docs/NOTIFICATION_MODERATION_WORKER_DEPLOYMENT.md

10 KiB
Executable file

🚀 راه‌اندازی Notification Moderation Worker


📋 مقدمه

این Worker به صورت خودکار قالب‌های نوتیفیکیشن را بررسی و تایید می‌کند.

قابلیت‌ها:

  • ✅ بررسی خودکار با AI (از طریق AIService سیستم)
  • ✅ قابل مدیریت از پنل مدیر سیستم
  • ✅ قابل مشاهده در بخش Monitoring
  • ✅ لاگ‌گیری از طریق journalctl

مرتبط: راهنمای اندپوینت‌های لاگ/ری‌استارت سرویس، Docker و ژورنال میزبان: SERVICE_LOGS_ADMIN_API.md


🛠️ راه‌اندازی با Systemd

مرحله 1: کپی فایل سرویس

# کپی فایل service به systemd
sudo cp /var/www/ark/hesabixAPI/deployment/systemd/hesabix-notification-moderation.service \
    /etc/systemd/system/

# تنظیم مجوزها
sudo chmod 644 /etc/systemd/system/hesabix-notification-moderation.service

مرحله 2: Reload و فعال‌سازی

# Reload daemon
sudo systemctl daemon-reload

# فعال‌سازی سرویس (اجرا خودکار در startup)
sudo systemctl enable hesabix-notification-moderation

# شروع سرویس
sudo systemctl start hesabix-notification-moderation

مرحله 3: بررسی وضعیت

# بررسی وضعیت
sudo systemctl status hesabix-notification-moderation

# مشاهده لاگ‌های زنده
sudo journalctl -u hesabix-notification-moderation -f

# مشاهده 100 خط آخر لاگ
sudo journalctl -u hesabix-notification-moderation -n 100

خروجی مورد انتظار:

● hesabix-notification-moderation.service - Hesabix Notification Moderation Worker
   Loaded: loaded (/etc/systemd/system/hesabix-notification-moderation.service; enabled)
   Active: active (running) since ...

🎛️ مدیریت از پنل Admin

دسترسی به بخش Monitoring

مسیر: /user/profile/system-settings/monitoring

قابلیت‌های پنل

┌──────────────────────────────────────────┐
│  📊 سرویس‌های سیستم                      │
├──────────────────────────────────────────┤
│                                          │
│  🟢 API Server           [فعال]         │
│  🟢 Database            [فعال]         │
│  🟢 Redis               [فعال]         │
│  🟢 RQ Workers          [فعال]         │
│  🟢 Notification Moderation [فعال]     │
│     • صف در انتظار: 3                  │
│     • بررسی شده امروز: 45              │
│     • آخرین فعالیت: 2 دقیقه پیش        │
│     [Restart] [Logs] [Details]         │
│                                          │
└──────────────────────────────────────────┘

🔧 دستورات مدیریت

Start/Stop/Restart

# شروع
sudo systemctl start hesabix-notification-moderation

# توقف
sudo systemctl stop hesabix-notification-moderation

# Restart
sudo systemctl restart hesabix-notification-moderation

# بررسی وضعیت
sudo systemctl is-active hesabix-notification-moderation

Enable/Disable

# فعال‌سازی (اجرا خودکار در startup)
sudo systemctl enable hesabix-notification-moderation

# غیرفعال‌سازی
sudo systemctl disable hesabix-notification-moderation

مشاهده لاگ‌ها

# لاگ‌های زنده
sudo journalctl -u hesabix-notification-moderation -f

# لاگ‌های امروز
sudo journalctl -u hesabix-notification-moderation --since today

# لاگ‌های یک ساعت اخیر
sudo journalctl -u hesabix-notification-moderation --since "1 hour ago"

# جستجو در لاگ‌ها
sudo journalctl -u hesabix-notification-moderation | grep "ERROR"

📡 API های مدیریت

دریافت وضعیت همه سرویس‌ها

GET /api/v1/admin/monitoring/services/status
Authorization: Bearer {token}

Response:

{
  "data": {
    "api_server": {"status": "online", ...},
    "database": {"status": "online", ...},
    "redis": {"status": "online", ...},
    "workers": {"status": "online", ...},
    "notification_moderation": {
      "status": "online",
      "is_active": true,
      "queue": {
        "pending": 3,
        "reviewed_today": 45
      },
      "last_activity": "2025-01-06T10:30:00Z"
    }
  }
}

دریافت وضعیت Worker

GET /api/v1/admin/monitoring/services/notification_moderation/status
Authorization: Bearer {token}

Restart کردن Worker

POST /api/v1/admin/system-services/restart?service_name=hesabix-notification-moderation
Authorization: Bearer {token}

Response:

{
  "data": {
    "service": "hesabix-notification-moderation",
    "status": "restarted",
    "is_active": true,
    "message": "سرویس hesabix-notification-moderation با موفقیت restart شد"
  }
}

دریافت لاگ‌ها

GET /api/v1/admin/system-services/logs?service_name=hesabix-notification-moderation&lines=100
Authorization: Bearer {token}

اگر این درخواست‌ها در محیط شما ۵۰۳ می‌دهند (مثلاً API داخل کانتینر بدون دسترسی به journald میزبان)، جزئیات استقرار در SERVICE_LOGS_ADMIN_API.md آمده است.


🔍 Troubleshooting

Worker اجرا نمی‌شود

# بررسی خطا
sudo systemctl status hesabix-notification-moderation
sudo journalctl -u hesabix-notification-moderation -n 50

# مشکلات رایج:
# 1. مسیر اشتباه
# 2. دسترسی‌های فایل
# 3. مشکل در اتصال به دیتابیس

Database connection error

# بررسی دیتابیس فعال است
sudo systemctl status mysql

# بررسی environment variables
sudo systemctl cat hesabix-notification-moderation

Worker متوقف می‌شود

# افزایش memory limit
sudo systemctl edit hesabix-notification-moderation

# اضافه کردن:
[Service]
MemoryLimit=1G

📊 Monitoring Metrics

آمار Worker

-- صف در انتظار
SELECT COUNT(*) as pending
FROM notification_moderation_queue
WHERE status IN ('pending', 'ai_reviewing');

-- بررسی شده امروز
SELECT COUNT(*) as reviewed_today
FROM notification_moderation_queue
WHERE DATE(completed_at) = CURDATE()
  AND status = 'completed';

-- میانگین زمان بررسی
SELECT AVG(TIMESTAMPDIFF(SECOND, created_at, completed_at)) as avg_seconds
FROM notification_moderation_queue
WHERE completed_at IS NOT NULL
  AND DATE(completed_at) = CURDATE();

لاگ‌های Worker

# تعداد بررسی‌های موفق
sudo journalctl -u hesabix-notification-moderation --since today | grep "✅ بررسی قالب" | wc -l

# تعداد خطاها
sudo journalctl -u hesabix-notification-moderation --since today | grep "ERROR" | wc -l

⚙️ تنظیمات پیشرفته

تغییر Interval بررسی

فایل: app/workers/notification_moderation_worker.py

# خط 167
async def run_worker_loop(interval_seconds: int = 60):  # پیش‌فرض: 60 ثانیه

برای تغییر، باید Worker را با argument اجرا کرد:

# در فایل service:
ExecStart=/usr/bin/python3 -c "import asyncio; from app.workers.notification_moderation_worker import run_worker_loop; asyncio.run(run_worker_loop(interval_seconds=30))"

محدودیت منابع

# ویرایش سرویس
sudo systemctl edit hesabix-notification-moderation

# اضافه کردن محدودیت‌ها:
[Service]
MemoryLimit=512M
CPUQuota=50%
TasksMax=10

📈 بهینه‌سازی Performance

کاهش Load دیتابیس

# در worker، افزایش interval:
await asyncio.sleep(120)  # هر 2 دقیقه یک بار

Batch Processing

# افزایش تعداد آیتم‌های پردازش شده:
pending_items = self.queue_repo.get_pending(status='pending', limit=20)

✅ Checklist راه‌اندازی

  • کپی فایل .service به /etc/systemd/system/
  • systemctl daemon-reload
  • systemctl enable hesabix-notification-moderation
  • systemctl start hesabix-notification-moderation
  • بررسی وضعیت: systemctl status ...
  • مشاهده لاگ: journalctl -u ... -f
  • تست از پنل Admin
  • بررسی Monitoring در /user/profile/system-settings/monitoring

🎯 یکپارچگی با Monitoring

دسترسی از پنل

1. ورود به پنل مدیر
2. Profile → System Settings → Monitoring
3. مشاهده "Notification Moderation Worker"
4. قابلیت‌ها:
   ✅ مشاهده وضعیت (online/offline)
   ✅ مشاهده آمار صف
   ✅ Restart کردن
   ✅ مشاهده لاگ‌ها
   ✅ فعال/غیرفعال کردن

API های در دسترس

Endpoint Method عملیات
/admin/monitoring/services/status GET وضعیت همه سرویس‌ها
/admin/monitoring/services/notification_moderation/status GET وضعیت Worker
/admin/system-services/restart?service_name=hesabix-notification-moderation POST Restart
/admin/system-services/logs?service_name=hesabix-notification-moderation GET لاگ‌ها
/admin/system-services/status/all GET وضعیت تمام سرویس‌ها

🎉 نتیجه

Worker نوتیفیکیشن حالا:

  • ✅ به عنوان یک سرویس systemd اجرا می‌شود
  • ✅ در پنل Monitoring قابل مشاهده است
  • ✅ از طریق API قابل مدیریت است
  • ✅ لاگ‌های آن در journalctl ذخیره می‌شود
  • ✅ می‌توان آن را restart/stop/start کرد
  • ✅ آمار real-time از صف نمایش داده می‌شود

همه چیز یکپارچه است! 🎊