# 日志分表与分析设计（草案）

## 目标与范围
- 对采集日志实现按月分区写入，提升写入吞吐和查询历史的性能。
- 提供可查询的分析摘要字段，便于后台看板展示本次采集及对比分析。
- 不引入新的依赖，不改变现有接口接口风格，确保向后兼容。

## 设计原则
- 高并发写入：分区写入尽量避免锁争用，分区表应有合理的索引覆盖查询条件。
- 易维护：分区边界需要可扩展，提供脚本自动创建未来分区的能力。
- 可观测：数据结构中包括分析摘要字段，便于 API 与前端直接展示。
- 兼容性：尽量复用现有字段名与数据类型，避免大规模重构。

## 目标表设计（草案）
- 新增分区表 logs_partitioned，字段如下：
  - id BIGINT 自增主键
  - machine_id INT：机床唯一标识
  - program_name VARCHAR(128)：加工程序名
  - log_time DATETIME：日志时间点
  - log_level VARCHAR(16)：日志等级，默认 INFO
  - raw_payload JSON：原始日志数据
  - analysis_summary TEXT：本次采集的分析摘要（可追溯、可回放）
  - analysis_version VARCHAR(64)：分析逻辑版本
  - 索引：idx_machine_time(machine_id, log_time)、idx_program_time(program_name, log_time)
- 分区：PARTITION BY RANGE (TO_DAYS(log_time))
- 示例分区：p202401, p202402, ..., p202501（按月份边界）

## 分区键与分区策略
- 使用 LOG_TIME 的日期维度进行分区：TO_DAYS(log_time) 作为分区区间值。
- 分区命名建议：按 yyyyMM 命名，如 p202401、p202402，以便直观查看。
- 初始覆盖期：从系统落地起，覆盖过去 24 个月及未来 12 个月的分区。
- 未来分区维护：提供周期性脚本（ monthly_partition_maintenance.sql ）来创建新月份分区。

## 分区维护脚本（草案）
- 提供简单的迁移脚本 skeleton，示例位于 database/sqls/partitioned_logs.sql 的分区创建段。
- 未来可将分区维护封装成 SQL store 程序或外部脚本（bash/python），自动按月扩容。
- 维护内容包括：创建新的分区、对旧分区归档/归档策略，及对相关日志表的清理策略。

## 数据分析字段与 API 将暴露的摘要
- analysis_summary 字段存放本次采集的要点、差异、以及可能的异常记录。
- 通过 API 提供最新采集日志及其分析摘要，便于前端看板展示与对比。
- 日志写入路径保持向后兼容：原有原始日志字段保留，新增分析字段仅供访问。

## API/前端对接要点
- 后端应提供查询接口：
  - 根据 machine_id、时间范围筛选日志
  - 返回最新采集日志及分析摘要
- 前端看板要显示：
  - 最新日志时间、机器、程序、分析摘要要点
  - 与历史时间点对比的分析摘要对比信息

## 验证与测试计划（草案）
- 基础验证：分区表创建是否成功、是否能够写入数据、是否能查询到分区信息。
- 功能验证：
  - 日志写入时附带 analysis_summary 字段
  - API 能返回最新采集日志及分析摘要
- 性能/压力测试：在高并发写入情况下分区表的锁争用情况、查询历史时的响应时间。
- 回归测试：现有日志写入路径不受影响，现有看板字段仍可访问

## 后续工作与风险
- 风险：分区设计对现有 ORM/DAO 层的影响，旧查询路径需兼容。
- 后续：与前端看板字段对齐、以及归档/清理策略的落地实现。

### 草案作者：CI 项目组
### 审核日期：2026-05

## 看板草案设计摘要（日志看板）
- 目标：展示最近采集日志、分析摘要，以及提供筛选入口，便于运维与分析人员快速定位问题。
- 数据字段：日志时间戳、机床ID、加工程序名、日志等级、日志摘要。以及可选的分析摘要文本。
- 后端端点草案：GET /api/logs/dashboard，返回数据结构包含最近日志、等级分布、总条数和可展示的分析摘要。
- 前端展示要点：顶部筛选区、摘要统计、最近日志表格、日志摘要截断预览。
- 验证要点：前端路由可打开，后端接口能返回结构化数据，字段与前端模板对齐。
