Files
hanarang-dashboard/.plans/sprints/SPRINT-008.md
harang-ai b469a1337a 📋 Sprint 006~008 계획 추가
- SPRINT-006: 버그 수정 3건 + JWT 인증 시스템 (초대 코드 가입)
- SPRINT-007: Gitea 연동 + 활동 로그 실시간화
- SPRINT-008: 실시간 전환 + 설정 구현 + 자매 강화 + 스켈레톤 UI
2026-04-04 14:53:42 +09:00

3.8 KiB

SPRINT-008: 실시간 전환 + 설정 + 자매 강화

목표

모든 하드코딩 데이터를 실시간 전환 + 설정 페이지 구현 + 자매 프로필 강화

태스크

TASK-028: 자매 실시간 데이터 (Uptime/시스템 정보)

  • SistersService 확장:
    • SSH로 실제 uptime 조회: cat /proc/uptime
    • CPU 사용률: top -bn1 | grep Cpu
    • 메모리: free -m
    • 디스크: df -h /
  • API 응답에 시스템 정보 추가:
    {
      "uptime": "342:12:05",
      "cpu": 23.4,
      "memory": { "used": 1024, "total": 4096 },
      "disk": { "used": "12G", "total": "50G" }
    }
    
  • 자매 페이지(/sisters): 실제 Uptime 표시 (하드코딩 제거)
  • 자매 카드: Capacity → 실제 CPU/메모리 기반
  • WebSocket: 30초마다 자매 상태 업데이트에 시스템 정보 포함

TASK-029: 자매 프로필 사진 API

  • API: GET /api/sisters/:name/avatar
  • SSH로 각 자매 서버에서 프로필 사진 가져오기:
    • 경로: ~/.openclaw/avatar.png 또는 ~/.openclaw/avatar.jpg
    • SCP/SSH cat으로 바이너리 전송
    • 캐싱: 메모리 캐시 (5분 TTL) — 매번 SSH 호출 방지
  • 대체(fallback): 프로필 사진 없으면 이름 이니셜 아바타 생성
  • FE: 자매 카드/상세 페이지에서 아바타 이미지 교체

TASK-030: 설정 페이지 BE + FE

  • SystemSettings 테이블 (Prisma):
    model SystemSettings {
      id    Int    @id @default(autoincrement())
      key   String @unique
      value String @db.Text
      updatedAt DateTime @updatedAt
    }
    
  • API:
    • GET /api/admin/settings — 전체 설정 조회
    • PUT /api/admin/settings — 설정 일괄 저장
  • 설정 항목 (settings-design.md 기반):
    • 강제 2FA (boolean)
    • 세션 유효 시간 (number, 분)
    • IP 화이트리스트 (boolean)
    • 자동 백업 (boolean)
    • 백업 주기 (string, HH:mm)
    • 보관 주기 (number, 일)
    • 대기열 경고 임계값 (number)
    • 자동 스케일링 (boolean)
    • CPU 임계값 (number, %)
    • 레이턴시 경보 (number, ms)
    • 노드 오프라인 알림 (boolean)
  • FE /settings 페이지:
    • 마운트 시 설정 로드 (API fetch)
    • 토글/인풋 변경 → 로컬 state
    • "설정 저장" → PUT API → 성공 토스트
    • "초기화" → 기본값 복원

TASK-031: 하드코딩 제거 + 스켈레톤 UI

대상 목록:

페이지 하드코딩 항목 전환 방식
/ (대시보드) 상태 카드 값 ([ON]/[84]/[--]/[12]) → /api/sisters 실시간
/ (대시보드) ONGOING PROJECTS 목록 → /api/projects 실시간
/ (대시보드) ACTIVITY FEED → /api/activities 실시간
/sisters Uptime, Load Index, Sync Log → TASK-028 API
/org 조직도 데이터 → /api/org (이미 연동, 확인만)
/settings 토글/인풋 값 → TASK-030 API
/activities 전체 로그 테이블 → /api/activities (TASK-027에서 연동)
  • 모든 API 호출에 스켈레톤 UI 추가:
    • 카드 스켈레톤: 회색 박스 펄스 애니메이션
    • 테이블 스켈레톤: 행 placeholder
    • 타임라인 스켈레톤: 도트 + 라인 placeholder
  • 에러 상태: "데이터를 불러올 수 없습니다" fallback UI

의존성

  • Sprint 007 완료 필요 (Gitea 데이터 + 활동 로그가 있어야 실시간 전환 가능)
  • TASK-028, TASK-029는 독립적 (병렬 가능)
  • TASK-030은 독립적
  • TASK-031은 TASK-028 + TASK-030 완료 후 최종 정리

검증 기준

  • 자매 페이지에서 실제 Uptime/CPU/메모리 표시
  • 프로필 사진 정상 렌더링 (없으면 이니셜 fallback)
  • 설정 저장/로드/초기화 정상 동작 + 토스트
  • 모든 페이지에서 하드코딩 0건 (curl/검색으로 확인)
  • 스켈레톤 UI 동작 (느린 네트워크에서 확인)
  • npm run build 성공 + 테스트 통과
  • 외부 URL QA 필수