feat(Analytics): d3 based visualization
This commit is contained in:
parent
e12ac76851
commit
b6152cd6d0
19 changed files with 2088 additions and 79 deletions
30
docs/analytics.md
Normal file
30
docs/analytics.md
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Analytics
|
||||
|
||||
현재 관리자 Analytics 화면은 표 중심 조회가 아니라 운영 지표를 빠르게 훑을 수 있는 D3 기반 시계열 대시보드로 구성된다.
|
||||
|
||||
## UI
|
||||
|
||||
- 경로: `/dashboard/analytics`
|
||||
- 공통 필터: 기간(`7`, `30`, `90`일), backend 선택
|
||||
- 상단 요약: requests, tokens, 평균 응답 시간, errors
|
||||
- 주요 패널
|
||||
- Daily Volume: 일별 requests + tokens
|
||||
- Backend Reliability: success rate + error count
|
||||
- Backend Response Time: backend별 평균 응답 시간
|
||||
- Model Request Trends: 상위 모델 요청 추이
|
||||
- Response Length Distribution: `completion_tokens` histogram
|
||||
- Daily Response Length Spread: `completion_tokens` box plot
|
||||
|
||||
## API
|
||||
|
||||
- `GET /admin/analytics/daily-totals`
|
||||
- `GET /admin/analytics/backend-quality`
|
||||
- `GET /admin/analytics/model-trends`
|
||||
- `GET /admin/analytics/response-length-histogram`
|
||||
- `GET /admin/analytics/response-length-box-plot`
|
||||
|
||||
## 집계 규칙
|
||||
|
||||
- 모델 추이의 모델 키는 `response_model -> routed_model -> request_model -> unknown` 순서로 결정한다.
|
||||
- response length 계열 시각화는 `completion_tokens` 값이 있는 요청만 집계한다.
|
||||
- 상세 요청 단위의 latency/body 확인은 계속 `DetailLogs` 화면에서 담당한다.
|
||||
|
|
@ -118,9 +118,18 @@
|
|||
| GET | `/admin/analytics/usage` | userId, backendId, days | 사용량 통계 |
|
||||
| GET | `/admin/analytics/requests` | month, date, limit, offset, q, userId, backendId, endpoint, detailLogged | 월별 상세 요청 로그 조회 |
|
||||
| GET | `/admin/analytics/metrics` | backendId, days | 백엔드 성능 메트릭 |
|
||||
| GET | `/admin/analytics/daily-totals` | backendId, days | 일별 전체 request/token 합계 |
|
||||
| GET | `/admin/analytics/backend-quality` | backendId, days | 일별 backend response time / error / success rate 시계열 |
|
||||
| GET | `/admin/analytics/model-trends` | backendId, days, limit | 모델별 일별 요청 추이 |
|
||||
| GET | `/admin/analytics/response-length-histogram` | backendId, days, bins | `completion_tokens` 분포 histogram |
|
||||
| GET | `/admin/analytics/response-length-box-plot` | backendId, days | `completion_tokens` 일별 box plot 요약 |
|
||||
|
||||
상세 로그는 `users.detail_logging=1` 또는 `backends.detail_logging=1`일 때만 request/response header/body가 저장된다.
|
||||
|
||||
- `model-trends` 는 `response_model -> routed_model -> request_model -> unknown` 순서로 모델 키를 결정한다.
|
||||
- response length 계열 endpoint는 `completion_tokens` 가 있는 요청만 집계한다.
|
||||
- 자세한 내용은 [docs/analytics.md](./analytics.md) 참고.
|
||||
|
||||
참고:
|
||||
- 관리자 인증과 세션/토큰 정책은 [docs/admin-auth.md](./admin-auth.md) 참고
|
||||
- OpenID Connect 설정은 [docs/oidc.md](./oidc.md) 참고
|
||||
|
|
|
|||
|
|
@ -15,10 +15,9 @@ client/src/
|
|||
index.ts # TypeScript 타입 정의
|
||||
routes/
|
||||
Dashboard.tsx # 운영 요약, 최근 요청, 관리자 토큰 관리
|
||||
Users.tsx # 사용자 CRUD
|
||||
Users.tsx # 사용자 CRUD / 권한 매핑 관리
|
||||
Backends.tsx # 백엔드 CRUD
|
||||
Models.tsx # 모델 캐시/리라이트 규칙 관리
|
||||
Permissions.tsx # 권한 매핑 관리
|
||||
Analytics.tsx # 분석 화면
|
||||
DetailLogs.tsx # 상세 요청 로그 탐색
|
||||
Scripts.tsx # 스크립트 관리 및 테스트
|
||||
|
|
@ -40,10 +39,9 @@ client/src/
|
|||
| `/dashboard/users` | Users | 사용자 관리 |
|
||||
| `/dashboard/backends` | Backends | 백엔드 관리 |
|
||||
| `/dashboard/models` | Models | 모델 캐시/리라이트 관리 |
|
||||
| `/dashboard/permissions` | Permissions | 권한 관리 |
|
||||
| `/dashboard/analytics` | Analytics | 분석 대시보드 |
|
||||
| `/dashboard/detail-logs` | DetailLogs | 상세 요청 로그 탐색 |
|
||||
| `/dashboard/scripts` | Scripts | 스크립트 관리 |
|
||||
| `/dashboard/detail-logs` | DetailLogs | 상세 요청 로그 탐색 |
|
||||
| `/dashboard/analytics` | Analytics | 분석 대시보드 |
|
||||
|
||||
모든 관리자 라우트는 로그인 게이트 아래에서 렌더링된다.
|
||||
|
||||
|
|
@ -66,6 +64,14 @@ SPA는 `/dashboard`를 라우터 base로 사용하고, 관리자 API는 계속 `
|
|||
- 세션 기반 쓰기 요청에는 `X-CSRF-Token`이 자동 포함된다
|
||||
- 401 응답이 오면 UI는 로그인 상태로 되돌아간다
|
||||
|
||||
## Analytics 메모
|
||||
|
||||
- `Analytics` 화면은 D3 기반 시계열 대시보드로 동작한다.
|
||||
- 공통 필터는 기간(`7`, `30`, `90`일)과 backend 선택이다.
|
||||
- 상단 summary strip 뒤에 일별 volume, reliability, response time, model trends, response length 분포 패널이 배치된다.
|
||||
- 상세 raw request 확인은 계속 `DetailLogs` 화면이 담당한다.
|
||||
- 자세한 내용은 [docs/analytics.md](./analytics.md) 참고.
|
||||
|
||||
## Model Management UI
|
||||
|
||||
- `Backends` 화면은 백엔드별 모델 캐시 상태, 모델 수, 마지막 sync 상태를 표시한다
|
||||
|
|
|
|||
|
|
@ -66,6 +66,15 @@ server/src/
|
|||
참고:
|
||||
- 세부 라우팅 규칙과 캐시 트리거는 [docs/model-routing.md](./model-routing.md) 참고
|
||||
|
||||
## Analytics 메모
|
||||
|
||||
- `/admin/analytics` 는 기존 usage/requests/metrics 외에 chart 전용 집계 endpoint를 함께 제공한다.
|
||||
- 추가 endpoint: `daily-totals`, `backend-quality`, `model-trends`, `response-length-histogram`, `response-length-box-plot`
|
||||
- `AnalyticsService` 는 `analytics.db` 의 일별 집계와 `request_logs_YYYY-MM.db` 의 범위 조회를 함께 사용해 시계열/분포 데이터를 만든다.
|
||||
- 모델 추이 키는 `response_model -> routed_model -> request_model -> unknown` 순서로 결정한다.
|
||||
- response length 계열 집계는 `completion_tokens` 가 있는 요청만 포함한다.
|
||||
- 자세한 화면/API 설명은 [docs/analytics.md](./analytics.md) 참고.
|
||||
|
||||
## Deployment Notes
|
||||
|
||||
- 권장 런타임은 단일 OCI 이미지다
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue