- SPRINT-006: 버그 수정 3건 + JWT 인증 시스템 (초대 코드 가입) - SPRINT-007: Gitea 연동 + 활동 로그 실시간화 - SPRINT-008: 실시간 전환 + 설정 구현 + 자매 강화 + 스켈레톤 UI
3.8 KiB
3.8 KiB
SPRINT-008: 실시간 전환 + 설정 + 자매 강화
목표
모든 하드코딩 데이터를 실시간 전환 + 설정 페이지 구현 + 자매 프로필 강화
태스크
TASK-028: 자매 실시간 데이터 (Uptime/시스템 정보)
- SistersService 확장:
- SSH로 실제 uptime 조회:
cat /proc/uptime - CPU 사용률:
top -bn1 | grep Cpu - 메모리:
free -m - 디스크:
df -h /
- SSH로 실제 uptime 조회:
- 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 필수