Skip to content

مركز أحداث WebSocket وتوسع القياس عن بعد

يستخدم Cockpit مركز توزيع أحداث في الوقت الفعلي لبث الأحداث التشغيلية وتحديثات القياس عن بعد إلى متصفحات العملاء. تسمح هذه البنية بالمزامنة الفورية لواجهة المستخدم دون الحاجة إلى الاستعلام الدوري (Polling) من جانب العميل.


بنية توجيه الأحداث

يستخدم مركز الأحداث بروتوكول WebSockets لاتصالات العملاء وإشعارات PostgreSQL الاستشارية للاتصال بين العقد:

  • بث WebSocket في الاتجاه العلوي: ينشئ العملاء اتصالات WebSocket مستمرة لنقطة النهاية /api/v1/events. تظل هذه الوصلة مفتوحة، مما يسمح للخادم بدفع الأحداث مباشرة إلى المتصفح.
  • التوجيه بين العقد (pg_notify): في عمليات نشر Cockpit متعددة المثيلات، قد يتصل العملاء بعقد مختلفة. عندما يحدث تغيير في الحالة على مضيف Vapor متصل بالمثيلة Cockpit Instance A، تقوم تلك المثيلة بكتابة الحدث في قاعدة البيانات واستدعاء قناة PostgreSQL pg_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، أو إنشاء القوالب، أو مزامنة المضيف).