Sensor dan Dasbor
Pendahuluan
Dokumen ini menjelaskan dasbor sensor, daftar sensor, detail sensor, metrik, perintah instalasi, dan alur kerja sensor virtual.
File Utama
| File | Tanggung Jawab |
|---|---|
modules/sensors/pages/SensorDashboardPage.tsx | Halaman pendaratan dasbor dengan jumlah sensor, ringkasan peringatan, aktivitas heartbeat |
modules/sensors/pages/SensorListPage.tsx | Rute daftar sensor, izin, bendera penyegaran data, dan orkestrasi dialog |
modules/sensors/partials/SensorListTable.tsx | Tabel sensor, lencana heartbeat/kesehatan, tindakan metrik, tindakan baris |
modules/sensors/dialogs/CreateSensorDialog.tsx | Dialog pembuatan/registrasi sensor |
modules/sensors/dialogs/EditSensorDialog.tsx | Dialog edit sensor |
modules/sensors/pages/SensorDetailPage.tsx | Halaman detail sensor, perintah instalasi, manajemen antarmuka dan sensor virtual |
modules/sensors/partials/SensorSetupCard.tsx | Kartu sensor virtual dan kontrol aktivasi/deaktivasi/hapus |
modules/sensors/dialogs/AddSetupDialog.tsx | Dialog pembuatan sensor virtual dari dua antarmuka yang tersedia |
modules/sensors/dialogs/SensorMetricsDialog.tsx | Dialog visualisasi metrik sensor |
hooks/useApi.ts | Hook useSensors() dan hook izin |
lib/api.ts | Grup titik akhir sensor, virtualSensor, dan sensorSetup (lama) |
Halaman Dasbor
- Rute:
/dashboard - Komponen:
ChartSensor
Perilaku dasbor:
- Inisialisasi Konteks: Membaca
organizationIddari cookie auth. - Ambil Jumlah (Counts): Memanggil
api.sensor.getCounts(organizationId). - Ambil Analitik: Memanggil
api.opensearch.getDashboardSummary()untuk 24 jam terakhir. - Ambil Heartbeat: Memanggil
api.sensor.getLatestHeartbeats()untuk aktivitas sensor terbaru. - Render Metrik: Menampilkan jumlah aktif/tidak aktif, perkiraan total uptime, statistik peringatan, dan tabel heartbeat.
Komponen ini mendukung bentuk data jumlah sensor baik activeSensors/inactiveSensors/totalSensors maupun active/inactive/total.
Halaman Daftar Sensor
- Rute:
/dashboard/all-sensor - Komponen:
AllSensor
Perilaku daftar sensor:
- Pemuatan Data: Memuat sensor dengan
useSensors([deletionFlag, createFlag, editFlag]). - Pemeriksaan Izin: Memuat izin pengguna saat ini dengan
useUserPermissions(). - Visibilitas Tindakan: Menampilkan tindakan buat, edit, dan hapus berdasarkan slug izin sensor.
- Polling Status: Melakukan polling status heartbeat terbaru setiap 60 detik.
- Polling Kesehatan: Melakukan polling metrik terbaru setiap 60 detik untuk status kesehatan.
- Penanganan Formulir: Membuka dialog buat/edit di dalam komponen
Dialogbersama. - Tampilan Metrik: Membuka metrik sensor dalam
SensorMetricsDialog. - Navigasi: Menavigasi ke detail sensor melalui
/dashboard/sensor/:sensorId.
Logika lencana kesehatan didasarkan pada metrik CPU dan memori terbaru:
| Kondisi | Status |
|---|---|
| Maks CPU/memori >= 90 | Kritis (Critical) |
| Maks CPU/memori >= 70 | Peringatan (Warning) |
| Di bawah 70 | Sehat (Healthy) |
Status online didasarkan pada data heartbeat terbaru. Jika backend tidak menyediakan isOnline, frontend menganggap heartbeat yang lebih baru dari 5 menit sebagai online.
Halaman Detail Sensor
- Rute:
/dashboard/sensor/:sensorId - Komponen:
SensorDetail
Perilaku detail:
- Inisialisasi Konteks: Membaca
sensorIddari parameter rute. - Pemuatan Data: Memanggil
api.sensor.get(sensorId). - Render Detail: Menampilkan status, pendaftaran, host, OS, arsitektur, versi agen, antarmuka, dan informasi sensor virtual.
- Token Instalasi: Membuat token instalasi melalui
api.sensor.createInstallToken(sensorId). - Tindakan Papan Klip: Menyalin
installCommandyang dikembalikan ke papan klip (clipboard). - Penyegaran Data: Memungkinkan penyegaran tanpa meninggalkan halaman.
- Sensor Virtual: Mengelola sensor virtual melalui
AddSetupDialogdanSensorSetupCard.
Halaman menghitung antarmuka yang tersedia dengan memfilter sensor.interfaces di mana:
isEligiblebernilai true.assignedVirtualSensorIdkosong.
Sensor virtual baru hanya dapat dibuat ketika setidaknya dua antarmuka yang layak tersedia.
Alur Kerja Sensor Virtual
Sensor virtual sebelumnya dinamakan "sensor setup" di UI dan lapisan API. Kode tetap mempertahankan kedua grup titik akhir:
api.virtualSensorapi.sensorSetupsebagai alias lama
Jalur backend saat ini menggunakan: /sensors/:sensorId/virtual-sensors
Operasi yang didukung:
| Operasi | Panggilan API |
|---|---|
| Daftar | api.sensorSetup.getAll(sensorId) |
| Buat | api.sensorSetup.create(sensorId, data) |
| Perbarui | api.sensorSetup.update(sensorId, setupId, data) |
| Hapus | api.sensorSetup.delete(sensorId, setupId) |
| Aktivasi | api.sensorSetup.activate(sensorId, setupId) |
| Deaktivasi | api.sensorSetup.deactivate(sensorId, setupId) |
SensorSetupCard melakukan polling setiap 5 detik saat sensor virtual dalam status activating. Polling berhenti ketika backend mengembalikan status active atau failed.
Aturan Formulir Sensor Virtual
AddSetupDialog menegakkan validasi sisi klien:
- Antarmuka 1 wajib diisi.
- Antarmuka 2 wajib diisi.
- Antarmuka 1 dan Antarmuka 2 harus berbeda.
- Nama bersifat opsional.
- CIDR jaringan rumah bersifat opsional.
Backend tetap bertanggung jawab atas validasi akhir dan perilaku penyebaran.
Izin
Tindakan sensor menggunakan slug berikut dari src/lib/constants.ts:
| Tindakan | Slug Izin |
|---|---|
| Buat sensor | create-sensor |
| Edit sensor | update-sensor |
| Hapus sensor | delete-sensor |
| Baca sensor | read-sensor |
Pemeriksaan izin UI menyembunyikan tindakan. Pemeriksaan ini tidak menggantikan otorisasi backend.
Mode Kegagalan
| Skenario | Perilaku Frontend |
|---|---|
| Pemuatan daftar sensor gagal | Hook mencatat kesalahan dan mencatatnya ke konsol |
| Polling heartbeat gagal | Kesalahan dicatat; daftar yang ada tetap dirender |
| Polling metrik gagal untuk satu sensor | Sensor tersebut dilewati secara diam-diam |
| Pemuatan detail sensor gagal | Kesalahan toast dan pemuatan berakhir |
| Pembuatan perintah instalasi gagal | Kesalahan toast |
| Aktivasi sensor virtual gagal | Kartu menunjukkan status gagal saat backend mengembalikan kegagalan |
| Penghapusan sensor virtual gagal | Toast menjelaskan bahwa deaktivasi mungkin diperlukan terlebih dahulu |