-
Notifications
You must be signed in to change notification settings - Fork 0
dashboard screen design
오래된 Grafana wireframe이 아니라
apps/dashboard-web/src의 실제 구현 화면을 기준으로 정리한다. 현장 Grafana는 별도 운영 화면이며 이 SPA의 route가 아니다.
데스크톱은 좌측 Sidebar와 상단 TopBar, 본문으로 구성한다.
Sidebar:
Fleet
전체 개요
Factories
허용된 factory 목록
System
클라우드 인프라 # can_view_system
사용자 관리 # can_manage_users
Workspace
AI 채팅
일간 보고서
이미지 스냅샷
로그아웃
공장 항목은 risk dot과 score를 표시한다. Cloud Infra 항목은 overall status dot을 표시한다. Sidebar는 접기/펴기가 가능하고 상태를 브라우저에 보존한다.
TopBar는 breadcrumb, WebSocket 상태, refresh interval selector, 수동 refresh, 현재 시각을 화면 기능에 따라 표시한다.
Login은 Aegis-π 식별자, Cognito 인증 안내, 단일 로그인 버튼으로 구성한다. Callback은 인증 처리 spinner를 표시하고 실패 시 오류와 재시도 동작을 제공한다.
0~100 safety score 축을 위험 0~49, 주의 50~84, 안전 85~100 band로
표시한다. 공장 점과 label이 겹치지 않도록 위치를 보정하며, 상단에 전체/위험/
주의/안전 공장 수를 표시한다.
각 카드는 다음 정보를 같은 위치에 둔다.
- 환경 유형과 factory ID
- risk level badge
- safety score와 band marker
- node ready/total
- pipeline badge
- 최근 10분 trend chart
- 상위 원인 3개
카드 전체가 공장 상세 이동 버튼이며 keyboard focus와 접근 가능한 label을 가진다.
최근 10분 risk level 변화 중 악화 event를 표시한다. 전체/공장 selector가 있고, 새 event가 없을 때와 로딩 중을 구분한다.
safety score, risk/pipeline/stale badge, 10분 trend, node ready, 갱신 시각을 상단에서 한 번에 비교한다.
| Tab | 주요 내용 |
|---|---|
| Overview | top causes, 현재 센서/AI, node/workload/device/heartbeat 요약 |
| Environment History | 안전 점수, 온도/습도/기압, AI history chart |
| Infrastructure | node table, 자원 chart, workload와 pipeline 상세 |
| Timeline | risk level/score 변화 event |
History selector는 1H/6H/12H/24H다. Timeline selector는
10M/1H/6H/24H/CUSTOM이며 Custom은 최근 24시간 범위의 날짜/시간 selector를
제공한다.
Chart는 loading, empty, raw snapshot, bucket aggregate를 구분한다. 장기 history는 평균선, 최소/최대 또는 변동 범위, threshold, sample/bucket 정보를 사용한다.
공장 화면과 분리된 System 화면이다.
상단:
- overall status
- fast/slow 수집 age
- fast/slow stale badge
- 수동/자동 refresh
본문:
- 핵심 상태 Health strip
- component matrix
- dependency rail
- 비즈니스 파이프라인
- Dashboard runtime: ECS, ALB
- 데이터 저장소: Redis, RDS
- 공장 최신성
- 관리 플레인: EKS node/pod, ArgoCD
- 스토리지 최신성
- 최근 1시간 상태 흐름
normal, warning, critical, unknown을 각각 정상, 주의, 위험, 미확인으로
표시한다. reasons[]는 상태 근거 chip, errors[]는 수집 실패 정보로 표시한다.
LATEST가 없으면 available:false empty state를 사용한다.
상단 selector 영역:
- 허용된 공장 segmented selector
- System 권한 사용자용 별도
cloud-infraselector - 날짜 picker와 최근 날짜 shortcut
- PDF, Word, refresh action
본문은 Markdown의 제목, 문단, 목록, 표, bold, inline code를 렌더링한다.
PDF는 인쇄 dialog, Word는 실제 .docx 다운로드다. 보고서가 ready 상태일 때만
내보내기 action이 활성화된다.
상태는 로딩, 보고서 없음, API 오류, 공장 미선택, 정상 본문을 구분한다.
하단 composer 중심의 대화형 화면이다. 공장 selector, 응답 모드 selector(자동/빠른 답변/정밀 분석), 추천 질문, Markdown 답변, Evidence 패널을 제공한다.
질문은 POST /chat/query로 보내며 Backend가 intent, 시간 범위, 공장 범위를 해석한다. 데이터 조회 전 RBAC를 강제하고, 답변에는 확인값/추정/데이터 한계를 분리해 표시한다. 이미지 관련 질문은 image_ref의 presigned 이미지 목록을 함께 보여준다.
System 권한 사용자가 AI 이벤트 증빙 이미지를 확인하는 갤러리 화면이다. 공장, 탐지 유형, 시각 범위 기준으로 S3 image_snapshot/ 객체를 조회하고 presigned URL로 이미지를 렌더링한다. 이미지 binary는 IoT Core가 아니라 S3 직접 업로드 경로를 사용한다.
2열 작업 화면이다.
- 왼쪽: active 사용자 table, 역할 filter, 수정/삭제 action
- 오른쪽: 생성/수정 editor
Editor는 이메일, 이름, 역할, 공장 배정, System 권한을 다룬다. 수정 시 이메일은
비활성화된다. super_admin은 전체 공장으로 표시되고, factory_admin은 공장별
checkbox를 사용한다. 삭제는 확인 dialog 후 수행한다.
좁은 화면에서는 table과 editor를 단일 열로 전환하고 table은 가로 스크롤한다.
각 화면이 어떤 API와 read model을 소비하는지 정리한다. 필드 스키마 상세는 데이터 모델, 엔드포인트는 API 명세를 따른다.
| 화면 | API | read model | 화면을 채우는 주요 필드 |
|---|---|---|---|
Fleet /
|
GET /factories |
LATEST (GSI LATEST / RISK# 정렬) |
factory_id, risk.level·risk.score, risk.top_causes[0..2].name 또는 field(name 우선, 없으면 field), infra_state.node_summary.ready/total, pipeline_status.status, updated_at, last_factory_state_at·last_infra_state_at(stale 판단) |
| Factory Overview | GET /factories/{id} |
LATEST (GetItem) |
dashboard.display_status, risk.score/level, risk.top_causes[], factory_state.sensor.*_avg(온/습/기압), factory_state.ai_result.{fire,fall,bend}_score, infra_state.workload_summary, infra_state.device_summary.*_available
|
| Environment History | GET /factories/{id}/history?window= |
1H→HISTORY#STATE(원시, max 500), 6/12/24H→GRAPH#5M(집계) |
timestamp, risk_score·risk_level, sensor *_avg, AI *_score, bucket_seconds(sampling note), top_cause_names[](1H 원시 구간만) |
| Infrastructure |
GET /factories/{id} + history |
LATEST.infra_state + GRAPH#5M/HISTORY#STATE
|
node table·node_summary, workload_summary/workloads status, device_summary, pipeline_status, 자원 차트(history) |
| Timeline | GET /factories/{id}/history?window= |
≤1H→HISTORY#STATE 원시, >1H→GRAPH#5M
|
risk level 변경·score 10점 이상 급락/회복 event, top_cause_names(집계 item은 원인 필드 없어 top_causes 없음) |
Cloud Infra /cloud-infra
|
cloud infra 조회 |
CLOUD#infra/LATEST(fast/slow), HISTORY#FAST/SLOW
|
status(normal/warning/critical/unknown), reasons[](근거 chip), errors[](수집 실패), fast/slow 수집 age, 최근 1시간 흐름(HISTORY) |
Reports /reports
|
GET /reports, GET /reports/{date}/{id}
|
S3 reports/daily/
|
공장·날짜 selector, Markdown 본문, PDF/Word export(ready 상태일 때만) |
AI Chat /chat
|
POST /chat/query |
DynamoDB/S3/RDS read model + Bedrock 설명 | 질문, intent/time/factory 해석, Evidence, image_ref, 답변 mode |
Image Snapshots /image-snapshots
|
GET /image-snapshots* |
S3 image_snapshot/ + LATEST.latest_image_snapshot
|
이미지 metadata, 탐지 유형, presigned GET URL |
핵심 규칙:
window=1h는 원인(top_cause_names)이 있는HISTORY#STATE를, 그보다 긴 구간은 원인 없는GRAPH#5M집계를 조회한다.null·미수신 값은 정상으로 해석하지 않고-/미계산/수집 대기/미확인으로 표시한다.
| 화면 상태 | 시각 처리 |
|---|---|
| loading | spinner |
| empty | 원인에 맞는 빈 상태 문구 |
| error | 위험 tone, 오류 내용, 다시 시도 |
| stale | warning badge와 age |
| unknown | 회색 미확인, 필요 시 collection error |
| background refresh | 기존 데이터를 유지 |
| WebSocket reconnect | 연결 상태 label |
null 또는 미수신 값은 정상 값으로 해석하지 않고 -, 미계산, 수집 대기,
미확인 중 문맥에 맞는 label을 사용한다.
- 800px 이하에서 Sidebar는 overlay drawer다.
- 1, 2, 3, 4열 grid는 viewport에 따라 축소된다.
- table, tab, selector, 보고서 표는 필요한 경우 가로 스크롤한다.
- icon-only button은
aria-label과title을 가진다. - 공장 카드는 실제
button으로 keyboard 실행이 가능하다. - 주요 control에
focus-visibleoutline을 표시한다. - 상태는 색만 쓰지 않고 badge text, dot, label을 함께 사용한다.
-
prefers-reduced-motion에서는 transition과 animation을 줄인다.
factory-a 현장 Grafana의 BME280 time series, AI stat, Node Exporter 1860은 로컬 운영 도구로 유지된다. 본 문서의 Dashboard Web은 Cognito 인증, 멀티 공장 Fleet, 공장 상세 history/Timeline, Cloud Infra, Reports, User Management를 제공하는 별도 SPA다.
관련 문서
- 시스템 아키텍처
- 제어 & 데이터 플레인
- Dashboard VPC 설계
- 하드웨어 배치
- Hub EKS 네임스페이스
- Tailscale Mesh VPN
- 데이터 생명주기
- 데이터 조회 모델
- 실시간 갱신 구조
- IoT 데이터 계약
- Reporting Pipeline
- 로컬 스토리지
- 클라우드 스토리지
- Edge Agent
- Edge AI 탐지
- Factory-A Log Adapter
- Dummy Sensor
- Edge IoT Publisher
- Lambda Data Processor
- Risk Normalizer
- Risk Score Engine
- Pipeline Status Aggregator
- Graph Aggregator 5m
- Cloud Infra Collector
- Daily Report Generator
- Risk Alert Dispatcher
- Image Snapshot Pipeline
- Dashboard Backend
- Dashboard Web
- AI 채팅 어시스턴트