# ppp-qi **Repository Path**: pingme/ppp-qi ## Basic Information - **Project Name**: ppp-qi - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-19 - **Last Updated**: 2026-06-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ppprtk-qi-algo-ck PPP-RTK 质量指标(QI)数据管道 —— 从 Kafka 消费算法日志,解析后批量写入 ClickHouse。 ## 架构 ``` Kafka (ppp_ssr / ppp_atmo) │ ▼ ConsumerGroupHandler → MessageChannel (chan, buf=500) │ ▼ Consumer Goroutine ── CalSSR() → resultQI ──┐ ── CalATMO() → resultBQI ─┤ ▼ qiFlushChan (buf=5) → QI Writer → ClickHouse bqiFlushChan (buf=5) → BQI Writer → ClickHouse ▲ ▲ └── 并行写入,互不阻塞 ──┘ ``` ## 项目结构 ``` ├── main.go # 入口:日志初始化、配置加载、信号处理 ├── conf.yaml # 配置文件 ├── go.mod / go.sum # Go 模块 ├── center/ │ ├── center.go # 核心调度 Run():连接、路由、批量写入 │ ├── cal.go # CalSSR/CalATMO 数据解析 │ └── parse.go # 时间解析、类型转换工具 ├── common/ │ ├── type.go # 配置/数据结构定义 │ └── logkey.go # 日志 key 常量 ├── configure/ │ └── conf.go # 配置加载 + 校验 ├── middleware/ │ ├── ck/ │ │ ├── ckconfig.go # ClickHouse 连接 + 批量写入 │ │ └── ddl.go # DDL 生成 + AutoMigrate │ └── kf/ │ ├── consum.go # Kafka 消费组 Handler │ └── kfconfig.go # Kafka 消费启动 ├── deploy/ │ ├── Dockerfile # 多阶段构建 (golang:1.22-alpine → alpine:3.19) │ ├── Jenkinsfile # CI/CD 流水线 │ ├── k8s-deployment.yaml # K8s 部署文件 (Deployment + ConfigMap) │ └── VERSION # 语义版本号 ├── docs/ │ ├── README.md # 本文档 │ └── ci-cd-reference.md # CI/CD 可复用参考手册 └── openspec/ # OpenSpec 规格文档 ``` ## 数据流 | Kafka Topic | Header | 解析函数 | ClickHouse 表 | |-------------|--------|---------|---------------| | `ppp_ssr` | `codebias` / `phasebias` | `CalSSR()` | `ppprtk_qi_test` | | `ppp_ssr` | `clk` | `CalSSR()` (汇总) | `ppprtk_qi_test` | | `ppp_atmo` | `atmo-bnc` + `regionid` | `CalATMO()` (单趟遍历) | `ppprtk_qi_test` / `ppprtk_sla_correction` | ## 配置 ```yaml clickhouse: clusterMode: false # 集群开关 clusterName: default_cluster autoMigrate: false # 首次部署设为 true 建表 table: qi: name: ppprtk_qi_test insert: "insert into {db}.{table} (...) values (?,...,?)" batchOffset: 1000 bqi: name: ppprtk_sla_correction insert: "insert into {db}.{table} (...) values (?,...,?)" batchOffset: 1000 ``` > `{db}` / `{table}` 运行时自动替换为 `clickhouse.db` / `table.name`,消除歧义。 ## 环境变量 | 变量 | 说明 | |------|------| | `PPPRTK_CK_PASSWORD` | ClickHouse 密码 | | `PPPRTK_CONF_PATH` | 配置文件路径(默认 ./conf.yaml) | | `PPPRTK_LOG_LEVEL` | 日志级别(debug/info/warn/error,默认 info) | ## 构建 ```bash # 本地编译 go build -ldflags "-w -s" -o ppprtk-qi-algo-ck . # Docker(Dockerfile 在 deploy/ 目录,构建上下文为项目根) docker build -f deploy/Dockerfile -t ppprtk-qi-algo-ck . ``` ## 运行 ```bash export PPPRTK_CK_PASSWORD=your_password ./ppprtk-qi-algo-ck ``` ## CI/CD - **GitLab**: `http://10.15.100.24/o11y/ppprtk/ppp-qi` - **Jenkins**: `http://10.15.100.24:18080/job/ppprtk-qi-algo-ck/` - **Harbor**: `10.15.110.9/monitor/ppprtk-qi-algo-ck` 流水线: Checkout → Version(vX.Y.Z-GitSHA) → Build & Push → (Deploy 待 kubectl 就绪) ## K8s 部署 ```bash # 详见 deploy/k8s-deployment.yaml 顶部注释 # 1. 创建 Secret kubectl -n o11y create secret generic ppprtk-qi-algo-ck-secret \ --from-literal=ck-password=<密码> # 2. 首次部署(先改 autoMigrate: true 建表,再改回 false) kubectl apply -f deploy/k8s-deployment.yaml # 3. 更新镜像 kubectl -n o11y set image deployment/ppprtk-qi-algo-ck \ ppprtk-qi-algo-ck=10.15.110.9/monitor/ppprtk-qi-algo-ck:latest ``` ## 首次部署 1. 设置 `autoMigrate: true` 并设置 ClickHouse 密码 2. 启动程序,自动建表(`CREATE TABLE IF NOT EXISTS`) 3. 验证表创建后改回 `autoMigrate: false`