From afd99c41f3c22abef188434faa7d503c4e0d81fc Mon Sep 17 00:00:00 2001 From: mamad Date: Thu, 27 Aug 2026 22:22:20 +0330 Subject: [PATCH] feat(dashboard): add Persian descriptions and limit rows to maximum 4 panels --- monitoring/grafana/dashboards/copykar.json | 152 +++++++-------------- 1 file changed, 53 insertions(+), 99 deletions(-) diff --git a/monitoring/grafana/dashboards/copykar.json b/monitoring/grafana/dashboards/copykar.json index 1bf2bd2..07d3e40 100644 --- a/monitoring/grafana/dashboards/copykar.json +++ b/monitoring/grafana/dashboards/copykar.json @@ -13,19 +13,20 @@ "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "id": 100, - "title": "📌 Key Performance Indicators & Real-Time Queues", + "title": "📌 شاخص‌های کلیدی عملکرد و وضعیت صف‌ها (KPIs & Queues)", "type": "row" }, { "collapsed": false, - "gridPos": { "h": 4, "w": 3, "x": 0, "y": 1 }, + "gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 }, "id": 1, - "title": "Total Ingested", + "title": "📥 کل پست‌های دریافتی از مبدا", + "description": "تعداد کل پست‌های خامی که توسط ربات جمع‌آوری‌کننده از کانال‌های مبدا دریافت شده است.", "type": "stat", "targets": [ { "expr": "sum(copykar_posts_collected_total) or vector(0)", - "legendFormat": "Collected", + "legendFormat": "دریافت شده", "refId": "A" } ], @@ -38,14 +39,15 @@ }, { "collapsed": false, - "gridPos": { "h": 4, "w": 3, "x": 3, "y": 1 }, - "id": 15, - "title": "📥 Redis Queue Depth", + "gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 }, + "id": 2, + "title": "⏳ مجموع پست‌های در صف ارسال مقصد", + "description": "تعداد پست‌های تایید شده توسط ادمین که در صف ردیس کانال‌های مقصد منتظر رسیدن نوبت ارسال (فاصله زمانی یا پایان ساعت خواب) هستند.", "type": "stat", "targets": [ { "expr": "copykar_redis_queue_size or vector(0)", - "legendFormat": "Waiting Posts", + "legendFormat": "در صف ارسال", "refId": "A" } ], @@ -65,14 +67,15 @@ }, { "collapsed": false, - "gridPos": { "h": 4, "w": 3, "x": 6, "y": 1 }, + "gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 }, "id": 3, - "title": "Admin Approvals", + "title": "✅ پست‌های تایید شده ادمین", + "description": "تعداد پست‌هایی که ادمین بازنویسی آن‌ها را تایید کرده و به صف انتشار فرستاده است.", "type": "stat", "targets": [ { "expr": "sum(copykar_admin_actions_total{action=\"approved\"}) or vector(0)", - "legendFormat": "Approved", + "legendFormat": "تایید شده", "refId": "A" } ], @@ -84,33 +87,15 @@ }, { "collapsed": false, - "gridPos": { "h": 4, "w": 3, "x": 9, "y": 1 }, + "gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 }, "id": 4, - "title": "Admin Rejections", - "type": "stat", - "targets": [ - { - "expr": "sum(copykar_admin_actions_total{action=\"rejected\"}) or vector(0)", - "legendFormat": "Rejected", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "thresholds": { "mode": "absolute", "steps": [{ "color": "red", "value": null }] } - } - } - }, - { - "collapsed": false, - "gridPos": { "h": 4, "w": 4, "x": 12, "y": 1 }, - "id": 5, - "title": "Target Deliveries", + "title": "🚀 کل پست‌های منتشر شده نهایی", + "description": "تعداد پست‌هایی که با موفقیت در کانال‌های مقصد ارسال و منتشر شده‌اند.", "type": "stat", "targets": [ { "expr": "sum(copykar_target_activity_total) or vector(0)", - "legendFormat": "Published", + "legendFormat": "منتشر شده", "refId": "A" } ], @@ -120,61 +105,24 @@ } } }, - { - "collapsed": false, - "gridPos": { "h": 4, "w": 4, "x": 16, "y": 1 }, - "id": 6, - "title": "AI Target Rewrites Total", - "type": "stat", - "targets": [ - { - "expr": "sum(copykar_ai_requests_total) or vector(0)", - "legendFormat": "AI Calls", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "thresholds": { "mode": "absolute", "steps": [{ "color": "cyan", "value": null }] } - } - } - }, - { - "collapsed": false, - "gridPos": { "h": 4, "w": 4, "x": 20, "y": 1 }, - "id": 16, - "title": "Review Queue Depth", - "type": "stat", - "targets": [ - { - "expr": "copykar_posts_queue_gauge{status=\"pending_review\"} or vector(0)", - "legendFormat": "Pending Review", - "refId": "A" - } - ], - "fieldConfig": { - "defaults": { - "thresholds": { "mode": "absolute", "steps": [{ "color": "yellow", "value": null }] } - } - } - }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 }, "id": 101, - "title": "📡 Source & Target Channel Activity Breakdown", + "title": "📡 فعالیت به تفکیک کانال‌های مبدا و مقصد (Channels Activity Breakdown)", "type": "row" }, { "collapsed": false, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 }, - "id": 7, - "title": "Ingested Posts by Source Channel", + "id": 5, + "title": "📥 پست‌های دریافتی به تفکیک کانال مبدا", + "description": "نمودار زمانی و حجم پست‌های جمع‌آوری شده از هر یک از کانال‌های مبدا تحت مانیتور.", "type": "timeseries", "targets": [ { "expr": "sum by (title) (copykar_source_activity_total)", - "legendFormat": "Source: {{title}}", + "legendFormat": "مبدا: {{title}}", "refId": "A" } ] @@ -182,13 +130,14 @@ { "collapsed": false, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 }, - "id": 8, - "title": "Published Posts by Target Channel", + "id": 6, + "title": "🚀 پست‌های منتشر شده به تفکیک کانال مقصد", + "description": "نمودار زمانی تعداد پست‌های ارسال شده به هر یک از کانال‌های مقصد نهایی.", "type": "timeseries", "targets": [ { "expr": "sum by (title) (copykar_target_activity_total)", - "legendFormat": "Target: {{title}}", + "legendFormat": "مقصد: {{title}}", "refId": "A" } ] @@ -197,14 +146,15 @@ "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 14 }, "id": 102, - "title": "🤖 AI Operations & Deduplication Analytics", + "title": "🤖 عملیات هوش مصنوعی و عملکرد سیستم (AI Operations & Latency)", "type": "row" }, { "collapsed": false, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 15 }, - "id": 10, - "title": "AI Requests by Action & Status", + "id": 7, + "title": "🤖 تعداد و وضعیت درخواست‌های هوش مصنوعی", + "description": "نرخ بازنویسی‌های ارسالی به هوش مصنوعی به تفکیک وضعیت پاسخ و نوع عملیات.", "type": "timeseries", "targets": [ { @@ -217,18 +167,19 @@ { "collapsed": false, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 15 }, - "id": 11, - "title": "AI Latency (p95 & Average Duration in sec)", + "id": 8, + "title": "⏱ مدت زمان پاسخ‌دهی هوش مصنوعی (ثانیه)", + "description": "میانگین زمان و صدک ۹۵ ام برای بازنویسی پست‌ها متناسب با شخصیت هر کانال.", "type": "timeseries", "targets": [ { "expr": "histogram_quantile(0.95, sum(rate(copykar_ai_latency_seconds_bucket[5m])) by (le, action))", - "legendFormat": "p95: {{action}}", + "legendFormat": "صدک ۹۵ام (p95): {{action}}", "refId": "A" }, { "expr": "rate(copykar_ai_latency_seconds_sum[5m]) / rate(copykar_ai_latency_seconds_count[5m])", - "legendFormat": "Avg: {{action}}", + "legendFormat": "میانگین (Avg): {{action}}", "refId": "B" } ] @@ -237,19 +188,20 @@ "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 23 }, "id": 103, - "title": "⚡ Container & System Telemetry", + "title": "⚡ مانیتورینگ منابع سرور و کانتینر (Container Telemetry)", "type": "row" }, { "collapsed": false, "gridPos": { "h": 7, "w": 8, "x": 0, "y": 24 }, - "id": 12, - "title": "Process CPU Usage (%)", + "id": 9, + "title": "⚡ درصد مصرف پردازنده (CPU %)", + "description": "میزان مصرف پردازنده توسط سرویس کپی‌کار.", "type": "timeseries", "targets": [ { "expr": "rate(process_cpu_seconds_total{job=\"copykar\"}[1m]) * 100", - "legendFormat": "CPU Usage %", + "legendFormat": "مصرف CPU %", "refId": "A" } ] @@ -257,13 +209,14 @@ { "collapsed": false, "gridPos": { "h": 7, "w": 8, "x": 8, "y": 24 }, - "id": 13, - "title": "Process RAM Usage (MB)", + "id": 10, + "title": "💾 میزان مصرف حافظه رم (RAM MB)", + "description": "حافظه رم اشغال شده توسط پردازش برنامه به مگابایت.", "type": "timeseries", "targets": [ { "expr": "process_resident_memory_bytes{job=\"copykar\"} / 1024 / 1024", - "legendFormat": "Memory (MB)", + "legendFormat": "حافظه رم (MB)", "refId": "A" } ] @@ -271,18 +224,19 @@ { "collapsed": false, "gridPos": { "h": 7, "w": 8, "x": 16, "y": 24 }, - "id": 14, - "title": "Active Threads & Open FDs", + "id": 11, + "title": "🧵 تعداد تردهای فعال و فایل‌های باز", + "description": "تعداد Thread های فعال و File Descriptor های باز پردازش.", "type": "timeseries", "targets": [ { "expr": "process_threads_total{job=\"copykar\"}", - "legendFormat": "Threads", + "legendFormat": "تعداد تردها", "refId": "A" }, { "expr": "process_open_fds{job=\"copykar\"}", - "legendFormat": "Open FDs", + "legendFormat": "فایل دیسکریپتورها", "refId": "B" } ] @@ -291,14 +245,14 @@ "refresh": "5s", "schemaVersion": 38, "style": "dark", - "tags": ["copykar", "telegram", "ai", "telemetry", "redis"], + "tags": ["copykar", "telegram", "ai", "telemetry", "persian"], "time": { "from": "now-1h", "to": "now" }, "timepicker": {}, "timezone": "browser", - "title": "Copykar Telegram Fleet Executive Dashboard", + "title": "داشبورد مدیریت ناوگان کپی‌کار (Copykar Executive Dashboard)", "uid": "copykar-executive-dashboard", - "version": 4 + "version": 5 }