feat(dashboard): add Persian descriptions and limit rows to maximum 4 panels

This commit is contained in:
mamad
2026-08-27 22:22:20 +03:30
parent 7e5e679917
commit afd99c41f3
+53 -99
View File
@@ -13,19 +13,20 @@
"collapsed": false, "collapsed": false,
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 },
"id": 100, "id": 100,
"title": "📌 Key Performance Indicators & Real-Time Queues", "title": "📌 شاخص‌های کلیدی عملکرد و وضعیت صف‌ها (KPIs & Queues)",
"type": "row" "type": "row"
}, },
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 4, "w": 3, "x": 0, "y": 1 }, "gridPos": { "h": 4, "w": 6, "x": 0, "y": 1 },
"id": 1, "id": 1,
"title": "Total Ingested", "title": "📥 کل پست‌های دریافتی از مبدا",
"description": "تعداد کل پست‌های خامی که توسط ربات جمع‌آوری‌کننده از کانال‌های مبدا دریافت شده است.",
"type": "stat", "type": "stat",
"targets": [ "targets": [
{ {
"expr": "sum(copykar_posts_collected_total) or vector(0)", "expr": "sum(copykar_posts_collected_total) or vector(0)",
"legendFormat": "Collected", "legendFormat": "دریافت شده",
"refId": "A" "refId": "A"
} }
], ],
@@ -38,14 +39,15 @@
}, },
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 4, "w": 3, "x": 3, "y": 1 }, "gridPos": { "h": 4, "w": 6, "x": 6, "y": 1 },
"id": 15, "id": 2,
"title": "📥 Redis Queue Depth", "title": "⏳ مجموع پست‌های در صف ارسال مقصد",
"description": "تعداد پست‌های تایید شده توسط ادمین که در صف ردیس کانال‌های مقصد منتظر رسیدن نوبت ارسال (فاصله زمانی یا پایان ساعت خواب) هستند.",
"type": "stat", "type": "stat",
"targets": [ "targets": [
{ {
"expr": "copykar_redis_queue_size or vector(0)", "expr": "copykar_redis_queue_size or vector(0)",
"legendFormat": "Waiting Posts", "legendFormat": "در صف ارسال",
"refId": "A" "refId": "A"
} }
], ],
@@ -65,14 +67,15 @@
}, },
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 4, "w": 3, "x": 6, "y": 1 }, "gridPos": { "h": 4, "w": 6, "x": 12, "y": 1 },
"id": 3, "id": 3,
"title": "Admin Approvals", "title": "✅ پست‌های تایید شده ادمین",
"description": "تعداد پست‌هایی که ادمین بازنویسی آن‌ها را تایید کرده و به صف انتشار فرستاده است.",
"type": "stat", "type": "stat",
"targets": [ "targets": [
{ {
"expr": "sum(copykar_admin_actions_total{action=\"approved\"}) or vector(0)", "expr": "sum(copykar_admin_actions_total{action=\"approved\"}) or vector(0)",
"legendFormat": "Approved", "legendFormat": "تایید شده",
"refId": "A" "refId": "A"
} }
], ],
@@ -84,33 +87,15 @@
}, },
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 4, "w": 3, "x": 9, "y": 1 }, "gridPos": { "h": 4, "w": 6, "x": 18, "y": 1 },
"id": 4, "id": 4,
"title": "Admin Rejections", "title": "🚀 کل پست‌های منتشر شده نهایی",
"type": "stat", "description": "تعداد پست‌هایی که با موفقیت در کانال‌های مقصد ارسال و منتشر شده‌اند.",
"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",
"type": "stat", "type": "stat",
"targets": [ "targets": [
{ {
"expr": "sum(copykar_target_activity_total) or vector(0)", "expr": "sum(copykar_target_activity_total) or vector(0)",
"legendFormat": "Published", "legendFormat": "منتشر شده",
"refId": "A" "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, "collapsed": false,
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 },
"id": 101, "id": 101,
"title": "📡 Source & Target Channel Activity Breakdown", "title": "📡 فعالیت به تفکیک کانال‌های مبدا و مقصد (Channels Activity Breakdown)",
"type": "row" "type": "row"
}, },
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 6 },
"id": 7, "id": 5,
"title": "Ingested Posts by Source Channel", "title": "📥 پست‌های دریافتی به تفکیک کانال مبدا",
"description": "نمودار زمانی و حجم پست‌های جمع‌آوری شده از هر یک از کانال‌های مبدا تحت مانیتور.",
"type": "timeseries", "type": "timeseries",
"targets": [ "targets": [
{ {
"expr": "sum by (title) (copykar_source_activity_total)", "expr": "sum by (title) (copykar_source_activity_total)",
"legendFormat": "Source: {{title}}", "legendFormat": "مبدا: {{title}}",
"refId": "A" "refId": "A"
} }
] ]
@@ -182,13 +130,14 @@
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 6 },
"id": 8, "id": 6,
"title": "Published Posts by Target Channel", "title": "🚀 پست‌های منتشر شده به تفکیک کانال مقصد",
"description": "نمودار زمانی تعداد پست‌های ارسال شده به هر یک از کانال‌های مقصد نهایی.",
"type": "timeseries", "type": "timeseries",
"targets": [ "targets": [
{ {
"expr": "sum by (title) (copykar_target_activity_total)", "expr": "sum by (title) (copykar_target_activity_total)",
"legendFormat": "Target: {{title}}", "legendFormat": "مقصد: {{title}}",
"refId": "A" "refId": "A"
} }
] ]
@@ -197,14 +146,15 @@
"collapsed": false, "collapsed": false,
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 14 }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 14 },
"id": 102, "id": 102,
"title": "🤖 AI Operations & Deduplication Analytics", "title": "🤖 عملیات هوش مصنوعی و عملکرد سیستم (AI Operations & Latency)",
"type": "row" "type": "row"
}, },
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 8, "w": 12, "x": 0, "y": 15 }, "gridPos": { "h": 8, "w": 12, "x": 0, "y": 15 },
"id": 10, "id": 7,
"title": "AI Requests by Action & Status", "title": "🤖 تعداد و وضعیت درخواست‌های هوش مصنوعی",
"description": "نرخ بازنویسی‌های ارسالی به هوش مصنوعی به تفکیک وضعیت پاسخ و نوع عملیات.",
"type": "timeseries", "type": "timeseries",
"targets": [ "targets": [
{ {
@@ -217,18 +167,19 @@
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 8, "w": 12, "x": 12, "y": 15 }, "gridPos": { "h": 8, "w": 12, "x": 12, "y": 15 },
"id": 11, "id": 8,
"title": "AI Latency (p95 & Average Duration in sec)", "title": "⏱ مدت زمان پاسخ‌دهی هوش مصنوعی (ثانیه)",
"description": "میانگین زمان و صدک ۹۵ ام برای بازنویسی پست‌ها متناسب با شخصیت هر کانال.",
"type": "timeseries", "type": "timeseries",
"targets": [ "targets": [
{ {
"expr": "histogram_quantile(0.95, sum(rate(copykar_ai_latency_seconds_bucket[5m])) by (le, action))", "expr": "histogram_quantile(0.95, sum(rate(copykar_ai_latency_seconds_bucket[5m])) by (le, action))",
"legendFormat": "p95: {{action}}", "legendFormat": "صدک ۹۵ام (p95): {{action}}",
"refId": "A" "refId": "A"
}, },
{ {
"expr": "rate(copykar_ai_latency_seconds_sum[5m]) / rate(copykar_ai_latency_seconds_count[5m])", "expr": "rate(copykar_ai_latency_seconds_sum[5m]) / rate(copykar_ai_latency_seconds_count[5m])",
"legendFormat": "Avg: {{action}}", "legendFormat": "میانگین (Avg): {{action}}",
"refId": "B" "refId": "B"
} }
] ]
@@ -237,19 +188,20 @@
"collapsed": false, "collapsed": false,
"gridPos": { "h": 1, "w": 24, "x": 0, "y": 23 }, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 23 },
"id": 103, "id": 103,
"title": "⚡ Container & System Telemetry", "title": "⚡ مانیتورینگ منابع سرور و کانتینر (Container Telemetry)",
"type": "row" "type": "row"
}, },
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 7, "w": 8, "x": 0, "y": 24 }, "gridPos": { "h": 7, "w": 8, "x": 0, "y": 24 },
"id": 12, "id": 9,
"title": "Process CPU Usage (%)", "title": "⚡ درصد مصرف پردازنده (CPU %)",
"description": "میزان مصرف پردازنده توسط سرویس کپی‌کار.",
"type": "timeseries", "type": "timeseries",
"targets": [ "targets": [
{ {
"expr": "rate(process_cpu_seconds_total{job=\"copykar\"}[1m]) * 100", "expr": "rate(process_cpu_seconds_total{job=\"copykar\"}[1m]) * 100",
"legendFormat": "CPU Usage %", "legendFormat": "مصرف CPU %",
"refId": "A" "refId": "A"
} }
] ]
@@ -257,13 +209,14 @@
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 7, "w": 8, "x": 8, "y": 24 }, "gridPos": { "h": 7, "w": 8, "x": 8, "y": 24 },
"id": 13, "id": 10,
"title": "Process RAM Usage (MB)", "title": "💾 میزان مصرف حافظه رم (RAM MB)",
"description": "حافظه رم اشغال شده توسط پردازش برنامه به مگابایت.",
"type": "timeseries", "type": "timeseries",
"targets": [ "targets": [
{ {
"expr": "process_resident_memory_bytes{job=\"copykar\"} / 1024 / 1024", "expr": "process_resident_memory_bytes{job=\"copykar\"} / 1024 / 1024",
"legendFormat": "Memory (MB)", "legendFormat": "حافظه رم (MB)",
"refId": "A" "refId": "A"
} }
] ]
@@ -271,18 +224,19 @@
{ {
"collapsed": false, "collapsed": false,
"gridPos": { "h": 7, "w": 8, "x": 16, "y": 24 }, "gridPos": { "h": 7, "w": 8, "x": 16, "y": 24 },
"id": 14, "id": 11,
"title": "Active Threads & Open FDs", "title": "🧵 تعداد تردهای فعال و فایل‌های باز",
"description": "تعداد Thread های فعال و File Descriptor های باز پردازش.",
"type": "timeseries", "type": "timeseries",
"targets": [ "targets": [
{ {
"expr": "process_threads_total{job=\"copykar\"}", "expr": "process_threads_total{job=\"copykar\"}",
"legendFormat": "Threads", "legendFormat": "تعداد تردها",
"refId": "A" "refId": "A"
}, },
{ {
"expr": "process_open_fds{job=\"copykar\"}", "expr": "process_open_fds{job=\"copykar\"}",
"legendFormat": "Open FDs", "legendFormat": "فایل دیسکریپتورها",
"refId": "B" "refId": "B"
} }
] ]
@@ -291,14 +245,14 @@
"refresh": "5s", "refresh": "5s",
"schemaVersion": 38, "schemaVersion": 38,
"style": "dark", "style": "dark",
"tags": ["copykar", "telegram", "ai", "telemetry", "redis"], "tags": ["copykar", "telegram", "ai", "telemetry", "persian"],
"time": { "time": {
"from": "now-1h", "from": "now-1h",
"to": "now" "to": "now"
}, },
"timepicker": {}, "timepicker": {},
"timezone": "browser", "timezone": "browser",
"title": "Copykar Telegram Fleet Executive Dashboard", "title": "داشبورد مدیریت ناوگان کپی‌کار (Copykar Executive Dashboard)",
"uid": "copykar-executive-dashboard", "uid": "copykar-executive-dashboard",
"version": 4 "version": 5
} }