# data-ana 数据分析服务

> 版本：0.1（P4 骨架）
> 端口：3006

## 职责

数据分析限界上下文（Python 实现），消费 core-edu 与 content 的领域事件，
构建 ClickHouse 学情宽表，计算知识点掌握度。
对外提供学情仪表盘查询、班级/年级/学校维度报表、个性化推荐数据支撑。

## 技术栈

- Python 3.12+ / FastAPI 0.115+
- clickhouse-connect（ClickHouse 宽表查询）
- pydantic + pydantic-settings（运行时校验与配置）
- structlog（结构化日志）
- prometheus-client（指标）
- OpenTelemetry（分布式追踪）

## 开发

```bash
uv sync
uv run uvicorn src.data_ana.main:app --host 0.0.0.0 --port 3006 --reload
```

## 配置

| 变量 | 默认值 | 说明 |
|------|--------|------|
| `PORT` | 3006 | 服务端口 |
| `CLICKHOUSE_HOST` | localhost | ClickHouse 主机 |
| `CLICKHOUSE_PORT` | 8123 | ClickHouse HTTP 端口 |
| `CLICKHOUSE_DATABASE` | edu_analytics | ClickHouse 数据库 |
| `OTEL_ENDPOINT` | http://localhost:4318 | OpenTelemetry 端点 |
| `LOG_LEVEL` | info | 日志级别 |

## 模块结构

```
src/data_ana/
├─ __init__.py
├─ main.py              # FastAPI 入口（健康检查 + 分析端点骨架）
├─ config.py            # pydantic-settings 配置
└─ clickhouse_client.py # ClickHouse 客户端单例
```

## 关键端点

- `GET /healthz` 健康检查
- `GET /metrics` Prometheus 指标
- `GET /analytics/class/{class_id}/performance` 班级成绩分析（P4 骨架）
- `GET /analytics/student/{student_id}/weakness` 学生薄弱知识点分析（P4 骨架）

## 对外契约

gRPC 服务 `AnalyticsService` 定义见 `packages/shared-proto/proto/analytics.proto`。
