مركز أحداث WebSocket وتوسع القياس عن بعد
يستخدم Cockpit مركز توزيع أحداث في الوقت الفعلي لبث الأحداث التشغيلية وتحديثات القياس عن بعد إلى متصفحات العملاء. تسمح هذه البنية بالمزامنة الفورية لواجهة المستخدم دون الحاجة إلى الاستعلام الدوري (Polling) من جانب العميل.
بنية توجيه الأحداث
يستخدم مركز الأحداث بروتوكول WebSockets لاتصالات العملاء وإشعارات PostgreSQL الاستشارية للاتصال بين العقد:
- بث WebSocket في الاتجاه العلوي: ينشئ العملاء اتصالات WebSocket مستمرة لنقطة النهاية
/api/v1/events. تظل هذه الوصلة مفتوحة، مما يسمح للخادم بدفع الأحداث مباشرة إلى المتصفح. - التوجيه بين العقد (
pg_notify): في عمليات نشر Cockpit متعددة المثيلات، قد يتصل العملاء بعقد مختلفة. عندما يحدث تغيير في الحالة على مضيف Vapor متصل بالمثيلة Cockpit Instance A، تقوم تلك المثيلة بكتابة الحدث في قاعدة البيانات واستدعاء قناة PostgreSQLpg_notify. تستلم المثيلة Cockpit Instance B، والتي تستمع إلى القناة نفسها، الإشعار وتدفعه إلى عملاء WebSocket المتصلين بها محليًا.
┌──────────────┐ WebSocket ┌──────────────┐ pg_notify ┌──────────────┐ WebSocket ┌──────────┐
│ Vapor Host │───────────────►│ Cockpit #1 │───────────────►│ Cockpit #2 │───────────────►│ Browser │
│ (Physical │ │ (Active Node)│ │ (Active Node)│ │ Client │
│ Server) │ └──────────────┘ └──────────────┘ └──────────┘
└──────────────┘هيكل إطار الرسالة (Message Frame Structure)
تتم صياغة جميع الأحداث المتبادلة عبر واجهة WebSocket باستخدام مخطط JSON قياسي:
json
{
"type": "<message_type>",
"payload": {
"kind": "<channel_name>",
"data": { ... }
}
}أنواع طلبات العميل (Client Request Types)
auth: ينقل بيانات اعتماد رمز JSON Web Token (JWT) لمصادقة الجلسة.subscribe: يسجل جلسة العميل لتلقي التحديثات من قناة أحداث محددة.unsubscribe: يلغي تسجيل جلسة العميل من قناة الأحداث.
أنواع استجابات الخادم (Server Response Types)
auth: يؤكد حالة المصادقة.event: يسلم الحمولة المرتبطة بقناة الأحداث المشترك فيها.error: يشير إلى خطأ في الطلب (مثل انتهاء صلاحية الرمز أو إخفاق الأذونات).
قنوات الأحداث المدعومة
لتلقي المقاييس أو تحديثات الأحداث، تشترك متصفحات العملاء في قنوات محددة:
| اسم القناة | الوصف |
|---|---|
host-metrics:<host_id> | يبث مقاييس المعالج والذاكرة وإدخال/إخراج القرص المباشرة على مستوى المضيف. |
vm-events:<host_id> | يبث تحديثات دورة حياة الجهاز الافتراضي (مثل تشغيل VM، أو إيقاف التشغيل، أو أحداث التعطل) لمضيف معين. |
vm-metrics:<host_id> | يبث مخططات الأداء المجمعة لجميع الأجهزة الافتراضية التي تعمل على المضيف المحدد. |
vm-volume-migration-events:<uuid>:<disk> | يبث مؤشرات التقدم (من 0% إلى 100%) لعمليات ترحيل التخزين النشطة. |
task-events | يبث تحديثات الحالة للعمليات الخلفية للنظام (مثل إنشاء النسخ الاحتياطي لـ VM، أو إنشاء القوالب، أو مزامنة المضيف). |