# 📊 Monitoring & Alerts System - Implementation Report **Date**: 2025-11-30 **Status**: ✅ Skeleton Implemented **Completion**: 30% (Structure ready, integrations pending) --- ## 🎯 Overview اسکلت سیستم **Monitoring & Alerts** برای پروژه CMS پیاده‌سازی شد. این سیستم به دو بخش اصلی تقسیم می‌شود: 1. **Alert System**: برای ارسال اعلان‌های مدیریتی (Critical Errors, Warnings, Success) 2. **User Notification System**: برای ارسال پیام به کاربران (کمیسیون، پرداخت، فعال‌سازی باشگاه) --- ## 📦 Files Created/Modified ### ✨ New Files: 1. **`IAlertService.cs`** (Interface) - `SendCriticalAlertAsync()` - برای خطاهای Critical - `SendWarningAlertAsync()` - برای Warning ها - `SendSuccessNotificationAsync()` - برای موفقیت‌ها 2. **`IUserNotificationService.cs`** (Interface) - `SendCommissionReceivedNotificationAsync()` - اعلان دریافت کمیسیون - `SendClubActivationNotificationAsync()` - اعلان فعال‌سازی باشگاه - `SendPayoutErrorNotificationAsync()` - اعلان خطا در پرداخت 3. **`AlertService.cs`** (Implementation - Skeleton) - ✅ Logging به Console - ⏳ TODO: Sentry Integration - ⏳ TODO: Slack Integration - ⏳ TODO: Email Integration 4. **`UserNotificationService.cs`** (Implementation - Skeleton) - ✅ Logging به Console - ⏳ TODO: SMS Gateway Integration - ⏳ TODO: Email Service Integration - ⏳ TODO: Push Notification Integration 5. **`MonitoringSettings.cs`** (Configuration Model) - تنظیمات Sentry, Slack, Email, SMS - قابل تنظیم از طریق `appsettings.json` --- ### ✏️ Modified Files: 1. **`ConfigureServices.cs`** ```csharp services.AddScoped(); services.AddScoped(); ``` 2. **`WeeklyNetworkCommissionWorker.cs`** - ✅ Integration با `IAlertService` - ✅ ارسال Critical Alert در صورت خطا - ✅ ارسال Success Notification پس از اتمام موفق 3. **`appsettings.json`** - اضافه شدن بخش `Monitoring` با تنظیمات پیش‌فرض --- ## 🔧 Current Implementation ### Alert System Usage: ```csharp // در Worker یا هر Handler دیگر: try { // عملیات خطرناک } catch (Exception ex) { await _alertService.SendCriticalAlertAsync( "Operation Failed", "Description of what went wrong", ex); } ``` ### Current Output: ``` 🚨 CRITICAL ALERT: Weekly Commission Worker Failed - Worker execution abc-123 failed for week 2025-W48 ``` --- ## ⏳ Pending Integrations (TODO) ### 1. Sentry Integration ```csharp // در AlertService.SendCriticalAlertAsync(): if (_settings.SentryEnabled) { SentrySdk.CaptureException(exception); } ``` **Steps**: - Install NuGet: `Sentry.AspNetCore` - Configure DSN in `appsettings.json` - Add to `Program.cs`: `builder.WebHost.UseSentry()` --- ### 2. Slack Integration ```csharp // در AlertService: if (_settings.SlackEnabled) { var payload = new { text = $"🚨 {title}", attachments = new[] { new { text = message, color = "danger" } } }; await _httpClient.PostAsJsonAsync(_settings.SlackWebhookUrl, payload); } ``` **Steps**: - Create Slack Incoming Webhook - Add URL to `appsettings.json` - Install NuGet: `System.Net.Http.Json` --- ### 3. Email Alerts (برای Admin) ```csharp // در AlertService: if (_settings.EmailAlertsEnabled) { foreach (var email in _settings.AdminEmails) { await _emailService.SendAsync( to: email, subject: $"[ALERT] {title}", body: message); } } ``` **Steps**: - Configure SMTP settings - Install NuGet: `MailKit` or use existing email service - Add admin emails to config --- ### 4. SMS Notifications (برای کاربران) ```csharp // در UserNotificationService.SendCommissionReceivedNotificationAsync(): var user = await _context.Users.FindAsync(userId); if (user.SmsNotifications && _settings.SmsNotificationsEnabled) { var message = $"کمیسیون شما: {amount:N0} ریال برای هفته {weekNumber} واریز شد."; await _smsGateway.SendAsync(user.Mobile, message); } ``` **Steps**: - Choose SMS provider (Kavenegar, Ghasedak, etc.) - Get API Key - Implement `ISmsGatewayService` --- ### 5. Retry Logic با Exponential Backoff ```csharp // در Worker: private async Task RetryWithExponentialBackoff( Func> operation, int maxRetries = 3) { for (int i = 0; i < maxRetries; i++) { try { return await operation(); } catch (Exception ex) when (i < maxRetries - 1) { var delay = TimeSpan.FromSeconds(Math.Pow(2, i)); // 2^i seconds _logger.LogWarning("Retry {Attempt}/{Max} after {Delay}s", i + 1, maxRetries, delay.TotalSeconds); await Task.Delay(delay); } } } ``` --- ## 📋 Configuration Example در `appsettings.Production.json`: ```json { "Monitoring": { "SentryEnabled": true, "SentryDsn": "https://xxxxx@sentry.io/12345", "SlackEnabled": true, "SlackWebhookUrl": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXX", "EmailAlertsEnabled": true, "AdminEmails": [ "admin@foursat.ir", "devops@foursat.ir" ], "SmsNotificationsEnabled": true, "SmsApiKey": "your-kavenegar-api-key", "SmsGatewayUrl": "https://api.kavenegar.com/v1/{apikey}/sms/send.json" } } ``` --- ## 🧪 Testing ### Test 1: Alert Service ```csharp var alertService = serviceProvider.GetRequiredService(); await alertService.SendCriticalAlertAsync( "Test Alert", "This is a test critical alert"); ``` **Expected**: Log در Console + (در Production) Sentry + Slack --- ### Test 2: User Notification ```csharp var notificationService = serviceProvider.GetRequiredService(); await notificationService.SendCommissionReceivedNotificationAsync( userId: 123, amount: 500_000, weekNumber: 48); ``` **Expected**: Log در Console + (در Production) SMS + Email --- ## 📊 Integration Priority | Priority | Integration | Effort | Impact | |----------|------------|--------|--------| | 🔴 High | Sentry | 1 hour | Critical error tracking | | 🟡 Medium | Slack | 2 hours | Real-time admin alerts | | 🟡 Medium | SMS (Kavenegar) | 3 hours | User notifications | | 🟢 Low | Email Alerts | 2 hours | Backup notification channel | | 🟢 Low | Retry Logic | 1 hour | Reliability improvement | --- ## ✅ Current Status Summary ### Completed (30%): - ✅ Interface definitions - ✅ Skeleton implementations with Logging - ✅ DI registration - ✅ Worker integration - ✅ Configuration model - ✅ appsettings structure ### Pending (70%): - ⏳ Sentry integration (5%) - ⏳ Slack webhook (10%) - ⏳ Email service (10%) - ⏳ SMS gateway (15%) - ⏳ Push notifications (10%) - ⏳ Retry logic (5%) - ⏳ Testing (10%) - ⏳ Documentation (5%) --- ## 🚀 Next Steps 1. **Immediate** (در صورت نیاز): - Enable Sentry for error tracking - Setup Slack webhook for critical alerts 2. **Short-term** (هفته آینده): - Integrate SMS gateway (Kavenegar) - Test User notifications 3. **Long-term** (ماه آینده): - Add Email service - Implement Retry logic - Push notification service --- ## 📝 Notes - تمام TODO ها در کد با comment مشخص شده‌اند - فعلاً فقط Logging فعال است - برای Production باید حتماً یکی از Integration ها (Sentry/Slack) فعال شود - SMS Gateway باید بر اساس پروژه انتخاب شود (Kavenegar, Ghasedak, etc.) --- ## 🔗 Related Files - **Interfaces**: `CMSMicroservice.Application/Common/Interfaces/IAlertService.cs` - **Implementations**: `CMSMicroservice.Infrastructure/Services/Monitoring/` - **Worker**: `CMSMicroservice.Infrastructure/BackgroundJobs/WeeklyNetworkCommissionWorker.cs` - **Config**: `CMSMicroservice.WebApi/appsettings.json` --- **Report generated**: 2025-11-30 **Build Status**: ✅ Success **Ready for**: Development continuation / Integration implementation