Bỏ qua để đến nội dung

Sự kiện thời gian thực (SignalR)

Các cập nhật trực tiếp đi qua một hub SignalR tại /hub/realtime. Xác thực dùng cùng JWT như REST API, truyền dưới dạng ?access_token=<jwt> (hoặc một header Authorization).

Các luồng tần số cao là opt-in theo từng nhóm, chỉ tham gia khi một màn hình tiêu thụ được mount và tự động tham gia lại khi kết nối lại:

NhómMangĐược tiêu thụ bởi
sensorsCác lô đọc cảm biến trực tiếpRealtime Monitor
predictionsCác lô dự đoán mớiBiểu đồ bảng điều khiển
logsToàn bộ luồng log (mọi mức)Chỉ trang LogViewer
alertsChỉ các mục log Warning/ErrorChuông thông báo, toàn ứng dụng

Nhóm alerts tồn tại để các cảnh báo nổi lên khắp nơi mà không phải stream toàn bộ “vòi rồng” logs tới mọi bảng điều khiển.

Sự kiệnĐiểm nổi bật của payload
SensorReadingchannelIndex, value, timestamp
NewPredictionpredictions, confidenceScores, modelId, inferenceTimeMs, các timestamp cửa sổ (bên dưới)
InferenceStateChangedstateidle · ready · running, datasource đang hoạt động, mô hình đã nạp — phát ra ở mọi chuyển tiếp vòng đời
InferenceFaultedreason, datasourceId — đồng thời hiện banner lỗi chặn
HealthMetricsUpdateCPU/GPU/bộ nhớ, uptime
ModelActivatedmodelId, version, các shape, kích thước file
ModelUploadProgressCác pha upload/xác thực, thông báo lỗi nếu thất bại
OutputWriteFailedGộp theo từng sink — cảnh báo đầu tiên tức thì, sau đó một lần mỗi cửa sổ 30 giây
LogEntryAddedMục log (mức, thông báo, logger, metadata)

Một dự đoán mô tả một cửa sổ đầu vào trong quá khứ. Mọi timestamp đều là Unix epoch mili-giây từ một đồng hồ — backend đóng dấu mỗi mẫu một lần tại thời điểm đọc, và giá trị đó được truyền qua pipeline, không bao giờ được sinh lại:

TrườngÝ nghĩa
windowStartTimestampMẫu đầu vào cũ nhất trong cửa sổ
windowEndTimestampMẫu đầu vào mới nhất — thời điểm “tính đến” mà dự đoán có hiệu lực
timestampPhản chiếu windowEndTimestamp (tương thích)
emittedAtThời gian đồng hồ backend lúc phát — emittedAt − windowEndTimestamp ≈ độ trễ end-to-end

Trên bảng điều khiển, vệt dự đoán trễ hơn vệt cảm biến một cách rõ ràng đúng bằng độ trễ pipeline thực. Khoảng cách đó là một tín hiệu vận hành có chủ đích, không phải lỗi render.

Consumer chậm không bao giờ làm chậm suy luận: các broadcast tới bảng điều khiển là fire-and-forget, và các sự kiện tới một client không theo kịp sẽ bị bỏ và đếm (/api/inference/backpressure). Các sự kiện đáng thông báo được khử trùng lặp và giới hạn tốc độ để chuông vẫn hữu ích — xem Thông báo.