콘텐츠로 이동

실시간 이벤트 (SignalR)

라이브 업데이트는 **/hub/realtime**의 단일 SignalR 허브를 통해 전달됩니다. 인증은 REST API와 동일한 JWT를 사용하며, ?access_token=<jwt>(또는 Authorization 헤더)로 전달합니다.

고빈도 스트림은 그룹별로 선택 가입(opt-in)하며, 이를 소비하는 화면이 마운트된 동안에만 가입되고 재연결 시 자동으로 재가입됩니다:

그룹전달 내용소비 주체
sensors라이브 센서 판독 배치Realtime Monitor
predictions새 예측 배치대시보드 차트
logs전체 로그 스트림(모든 레벨)LogViewer 페이지 전용
alertsWarning/Error 로그 항목만알림 벨, 앱 전역

alerts 그룹은 전체 logs 소방호스(firehose)를 모든 대시보드로 스트리밍하지 않고도 경고가 어디서나 표면화되도록 하기 위해 존재합니다.

이벤트페이로드 하이라이트
SensorReadingchannelIndex, value, timestamp
NewPredictionpredictions, confidenceScores, modelId, inferenceTimeMs, 윈도우 타임스탬프(아래 참조)
InferenceStateChangedstateidle · ready · running, 활성 데이터소스, 로드된 모델 — 모든 수명 주기 전환마다 방출
InferenceFaultedreason, datasourceId — 차단성 장애 배너도 함께 표시
HealthMetricsUpdateCPU/GPU/메모리, 가동 시간
ModelActivatedmodelId, version, 형상, 파일 크기
ModelUploadProgress업로드/검증 단계, 실패 시 오류 메시지
OutputWriteFailed싱크별로 합쳐짐 — 즉각적인 첫 경고, 이후 30초 윈도우당 하나
LogEntryAdded로그 항목(레벨, 메시지, 로거, 메타데이터)

예측은 입력의 과거 윈도우를 서술합니다. 모든 타임스탬프는 하나의 시계에서 나온 Unix epoch 밀리초입니다 — 백엔드가 판독 시점에 각 샘플을 한 번만 찍고, 그 값이 파이프라인 전체로 반향되며 결코 재생성되지 않습니다:

필드의미
windowStartTimestamp윈도우에서 가장 오래된 입력 샘플
windowEndTimestamp가장 최신 입력 샘플 — 예측이 유효한 “기준 시점”
timestampwindowEndTimestamp를 미러링(호환성)
emittedAt방출 시점의 백엔드 벽시계 — emittedAt − windowEndTimestamp ≈ 엔드투엔드 지연 시간

대시보드에서 예측 트레이스는 실제 파이프라인 지연 시간만큼 센서 트레이스보다 눈에 띄게 뒤따릅니다. 그 간격은 렌더링 결함이 아니라 의도된 운영 신호입니다.

느린 소비자가 추론을 결코 스로틀하지 않습니다: 대시보드 브로드캐스트는 발사 후 망각 방식이며, 따라잡지 못하는 클라이언트로 향하는 이벤트는 드롭되고 카운트됩니다(/api/inference/backpressure). 알림 대상 이벤트는 중복 제거되고 속도 제한되어 벨을 유용하게 유지합니다 — 알림을 참조하세요.