# 대시보드 개선: 갱신 주기 동기화 + 시스템 뷰 추가

## 작업 개요
1. CPU/RAM과 Task 상태 갱신 주기 동기화
2. "시스템 뷰" 탭 신규 추가 — 모든 주기적 스케줄링 작업을 한눈에 확인

## 배경
- 제이회장님 지적: CPU/RAM 업데이트 주기와 작업중/대기 체크 주기가 따로 놀고 있음
- 제이회장님 요청: 주기적으로 체크하는 스케줄링 작업을 시스템뷰에서 확인 가능하게

---

## Task 1: 갱신 주기 동기화

### 현재 상태
- CPU/RAM: SSE `server-stats` 이벤트로 0.5초마다 독립 스트리밍 (server.py L1032~1041)
- Task 상태: SSE `refresh` 이벤트로 task-timers.json 파일 변경 감지 시에만 갱신 (server.py L1024~1027)
- 결과: CPU/RAM은 계속 갱신되는데, Task 상태는 파일이 안 바뀌면 멈춤

### 수정 방안
SSE 루프에서 server-stats를 보낼 때(0.5초마다) task-timers.json도 같이 체크하도록 통합.
또는 server-stats 이벤트에 task 상태 요약(running 개수, 최근 완료 등)을 함께 포함.

**핵심**: CPU/RAM 갱신과 Task 상태 갱신이 같은 타이밍에 발생해야 함.

### 수정 파일
- `/home/jay/workspace/dashboard/server.py` — SSE handle_stream 함수 (L977~1051)
- `/home/jay/workspace/dashboard/index.html` — server-stats 이벤트 핸들러 (L1071 부근)

---

## Task 2: 시스템 뷰 탭 추가

### 목적
제이회장님이 현재 시스템에서 주기적으로 돌고 있는 모든 스케줄링 작업을 한눈에 파악할 수 있게.

### 표시할 데이터 소스 (4가지)

#### 2-1. crontab (사용자)
```bash
crontab -l 2>/dev/null
```
- 각 항목: 스케줄(cron식), 명령어, 설명(주석)
- 예: `auto_merge.py` 매 1분, `Supabase keep-alive` 매일 06:00

#### 2-2. systemd User Timers
```bash
systemctl --user list-timers --no-pager --output=json 2>/dev/null
```
- 각 항목: 타이머명, 주기, 마지막 실행, 다음 실행
- 예: `done-watcher.timer` 30초

#### 2-3. cokacdir 스케줄
```bash
cokacdir --cron-list --chat 6937032012 --key $COKACDIR_KEY_ANU
```
- 각 항목: ID, 프롬프트(요약), 스케줄, 생성일, 타입(절대/반복)
- 예: BD78A87F - Threads 콘텐츠 전략 리뷰 (3/26)

#### 2-4. 백그라운드 프로세스
```bash
ps aux | grep -E "(dashboard|group_chat)" | grep -v grep
```
- 대시보드 서버, 단톡 데몬 등 장기 실행 프로세스

### API 설계

**새 엔드포인트**: `GET /api/system-schedules`

응답 구조:
```json
{
  "crontab": [
    {"schedule": "* * * * *", "command": "auto_merge.py", "description": "워크트리 자동 머지"},
    {"schedule": "0 6 * * *", "command": "curl ...", "description": "InsuRo Supabase keep-alive"}
  ],
  "systemd_timers": [
    {"name": "done-watcher", "interval": "30s", "last_run": "...", "next_run": "...", "active": true}
  ],
  "cokacdir_schedules": [
    {"id": "BD78A87F", "prompt_summary": "Threads 콘텐츠 전략 2주 리뷰", "schedule": "2026-03-26 09:00:00", "type": "absolute"}
  ],
  "background_processes": [
    {"name": "dashboard server", "pid": 1087, "uptime": "...", "cpu": "0.3%", "mem": "54MB"}
  ]
}
```

### UI 설계

대시보드 좌측 사이드바에 "시스템" 탭 추가.

구성:
1. **Cron Jobs** 섹션 — 카드/리스트로 각 crontab 항목 표시
   - 아이콘: 시계
   - 표시: 주기(사람이 읽기 쉬운 한국어, 예: "매 1분"), 설명, 명령어
2. **Systemd Timers** 섹션
   - 아이콘: 타이머
   - 표시: 이름, 주기, 마지막/다음 실행, 상태(active/inactive)
3. **예약 작업 (cokacdir)** 섹션
   - 아이콘: 캘린더
   - 표시: 프롬프트 요약(앞 50자), 스케줄, 타입(일회성/반복)
4. **백그라운드 프로세스** 섹션
   - 아이콘: 서버
   - 표시: 프로세스명, PID, 가동시간, CPU/메모리 사용

### 갱신 주기
- 시스템 뷰 데이터는 30초마다 갱신 (실시간 불필요)
- SSE가 아닌 폴링으로 충분

### 기존 대시보드 디자인 톤 유지
- 현재 대시보드와 동일한 다크 테마, 카드 스타일
- React 기반 index.html에 새 탭으로 추가

### 수정 파일
- `/home/jay/workspace/dashboard/server.py` — `/api/system-schedules` 엔드포인트 추가
- `/home/jay/workspace/dashboard/index.html` — 시스템 뷰 탭 UI 추가

---

## 주의사항
- cokacdir --cron-list 호출 시 키는 환경변수에서 로드 (하드코딩 금지)
- crontab -l 파싱 시 주석(#)을 description으로 활용
- systemctl 명령 실패(권한 등) 시 graceful fallback
- 기존 대시보드 기능에 리그레션 없도록 주의
