# dap **Repository Path**: renslcdc/dap ## Basic Information - **Project Name**: dap - **Description**: 行为画像与风险研判 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-22 - **Last Updated**: 2026-11-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dap · 行为画像与风险研判 一个分层清晰的"行为画像与风险研判"系统:先用历史数据为网络交互建立正常行为基线, 再用它判断在线记录是否异常,给出风险等级与归因。 ## 分层 | 目录 | 产物 | 职责 | |---|---|---| | `dap/` | `libdap.a / libdap.so` | 纯 C99 算法内核:进程级单例、零文件 IO | | `dap_app/` | `libdap_app.a / libdap_app.so` | C++11 集成门面:ID 映射、参考池、基线、在线窗、自动学习、快照 | | `dap_server/` | `libdap_server.a / libdap_server.so` + `dap_server` | 本地 JSONL 服务库与薄壳程序:持续学习、周期维护、冷对淘汰、重启恢复;支持按关系匹配多套算法/生命周期配置 | | `dap_sim/` | `dap_sim` | 模拟/回放客户端,不链接 dap_app | | `dap_gui/` | `dap_gui` + `libdap_gui` | Qt 只读快照视图(四页签:时段热力/参考统计/风险分布/在线监测),不链接 dap_app | | `dap_client/` | `libdap_client.a / libdap_client.so` | 公共客户端库:JSONL 协议、同步/异步传输、记录契约与文件加载;被 dap_sim/dap_gui 与测试引用 | | `examples/scenarios/` | `gen_flows.py` | 模拟数据生成器:日期区间、每日窗口、权重、多画像 | ## 快速开始 ```bash ./build.sh ./dist/bin/dap_server --data-dir ./dap_data --port 19090 ./dist/examples/dap_sim --demo --port 19090 DAP_SNAPSHOT=./dap_data/snapshot.json ./dist/bin/dap_gui ``` 需要“固定日期 + 工作日时段”的数据时,用生成器产文件再喂入: ```bash python3 examples/scenarios/gen_flows.py --emit both \ --start-date 2026-10-05 --end-date 2026-10-10 --weekdays mon-fri \ --windows "09:00-18:00" --records-per-day 60 --count 200 \ --pairs "tenant-a:api.example.com,tenant-b:db.internal" --seed 42 --out-dir /tmp/dap-demo ./dist/examples/dap_sim --reference /tmp/dap-demo/reference.tsv --learn ./dist/examples/dap_sim --replay /tmp/dap-demo/online.jsonl --interval-ms 10 ``` 一个服务按多套参数学习时,在配置文件根级放默认值,用 `configs` 按主体/对端 精确或前缀匹配覆盖: ```json { "data_dir": "./dap_data", "algorithm": { "window_ms": 3600000, "n_trees": 100 }, "lifecycle": { "ref_min_records": 20, "ref_min_windows": 20 }, "configs": [ { "name": "office", "match": { "subject_prefix": "office-" }, "algorithm": { "window_ms": 1800000, "n_trees": 128 }, "lifecycle": { "ref_min_records": 40, "ref_min_windows": 40 } }, { "name": "transfer", "match": { "subject_prefix": "db-", "peer_prefix": "backup." }, "algorithm": { "window_ms": 900000, "ref_days": 14, "pct_high": 99.5 } } ] } ``` 完整字段、匹配优先级和 5 套调参示例见 [05 · 配置项详解](docs/integration/05-配置项详解.md)。 ## 构建方式 `build.sh` 与直接 qmake `dap-application.pro` 共用同一套路径规则: - 中间产物只写入隐藏目录 `.build//`; - 最终交付物发布到 `PREFIX`,默认是仓库根的 `dist/`; - release、debug、coverage 的对象文件和最终目录互相隔离。 - 默认保留中间对象并增量编译;只有显式 `clean` 才删除 `.build//`。 默认交付结构: ``` dist/ ├── bin/ dap_server、dap_gui ├── lib/ 各库的 .a 与 .so;动态库按组件版本生成 .so.,并保留 SONAME .so. 与开发链接名 .so;静态库生成 lib-.a 与稳定入口软链 ├── tests/ 全部单元测试、冒烟测试与截图工具 ├── examples/ dap_sim、deploy_example(gen_flows.py 在源码 examples/scenarios) └── include/ C/C++ 公共头文件(根 `dap.h`;`dap_app/`、`dap_client/`、`dap_common/`、`dap_server/` 子目录) ``` ### 方式一:build.sh 脚本构建(Linux 服务部署首选) ```bash ./build.sh ./build.sh debug ./build.sh coverage ./build.sh --prefix /opt/dap ./build.sh debug --prefix /tmp/dap-debug ``` 未指定 `--prefix` 时,release 发布到 `dist/`,debug 发布到 `dist-debug/`, coverage 发布到 `dist-coverage/`。发布目录中的库/可执行均带组件版本号; `version.pri` 是产品与组件版本的唯一来源,`version.json` 是构建产物的版本清单。 生成可分发压缩包(命名包含产品、版本、OS、CPU 与 Qt 代际): ```bash ./scripts/release.sh dist # dist/.release/dap-1.3.1-linux-x86_64-qt4.tar.gz ``` 清理同模式产物: ```bash ./build.sh clean ./build.sh debug clean ./build.sh --prefix /opt/dap clean ``` ### 方式二:QtCreator shadow 构建(开发调试首选) 用 QtCreator 直接打开根工程 `dap-application.pro`,一键编译全部子工程。命令行 在同一隐藏构建目录中执行,产物路径与 `build.sh` 完全一致: ```bash mkdir -p .build/release && cd .build/release qmake ../../dap-application.pro make -j4 # 自定义交付目录:qmake ../../dap-application.pro PREFIX=/opt/dap ``` 所有可执行程序默认显式链接暂存目录中的静态 `.a`;动态库只用于发布和运行时加载。 同一目录中的动态库使用 `$ORIGIN` rpath,不需要设置 `LD_LIBRARY_PATH`。 ### 测试 - 测试文件和目标统一命名为 `test_<类型>_<模块>`,类型包括 `unit`、 `integration`、`gui`、`scenario`、`quality`、`tool` 与 `suite`。 - 算法层:`test_unit_dap_algorithm` 与 `test_integration_dap_dynamic_load`。 - 应用/协议/模拟/GUI 测试: - `test_unit_dap_c_api`:libdap 公共 C API 分支、错误路径与关键评分语义。 - `test_unit_dap_client`:公共客户端 JSONL 协议、同步/异步传输与文件加载。 - `test_integration_dap_app`:dap_app 门面全链路。 - `test_unit_dap_app_lifecycle`:关系生命周期状态机裁决。 - `test_unit_dap_server_session`:dap_server 会话处理器白盒测试。 - `test_unit_dap_server_config`:dap_server 配置合并。 - `test_unit_dap_server_snapshot_publisher`:快照发布策略。 - `test_integration_dap_server`:dap_server JSONL 协议与落盘集成。 - `test_integration_dap_sim`:dap_sim 参数、参考导入与回放集成。 - `test_gui_dap`:dap_gui 离屏渲染、快照与 TSV/CSV 解析。 - 场景与质量测试:`test_scenario_dap_data` 与 `test_quality_dap_stress`。 - 测试辅助工具:`test_tool_dap_gui_screenshot`。 #### 统一运行入口 上述算法、应用、协议、模拟、GUI、场景数据与完整算法压测已收拢为一条命令 `./tests/run_tests.sh`,共 14 项,无需再手动逐个调用 (自动为 GUI 准备 Qt 运行环境;Qt4 环境使用 Xvfb 离屏): ```bash ./tests/run_tests.sh # 运行全部 14 项测试(缺产物时先 ./build.sh) ./tests/run_tests.sh --prefix /opt/dap # 从自定义交付目录运行 ./tests/run_tests.sh --debug # 使用 dist-debug ./tests/run_tests.sh --list # 列出全部测试 ./tests/run_tests.sh --only test_integration_dap_server # 只跑指定测试 ./tests/run_tests.sh --only test_quality_dap_stress # 只跑 500 对 / 20000 条完整压测 ./tests/run_tests.sh --no-gui # 跳过 test_gui_dap ./tests/run_tests.sh --build # 先 ./build.sh 再运行 ./tests/run_tests.sh --coverage # 构建 gcov 插桩版并运行,末尾打印代码覆盖率 ``` `--coverage` 需要 qmake(默认 `qmake`,可用 `QMAKE=/path/to/qmake` 指定,同 build.sh); 它会独立构建 gcov 插桩产物,运行全部测试后逐文件打印行覆盖率与 TOTAL 汇总。 `test_quality_dap_stress` 固定使用 seed `20260828` 和原始验收门槛:新增关系 `100%`、 其余异常类型检出率 `≥70%`、正常误报率 `≤10%`。任一项未达标都会使统一入口失败。 统一返回码:全部通过为 `0`,任一失败为非 `0`,可直接用于 CI / 脚本链式调用。 ## 文档 **完整文档已统一整理到 [`docs/`](docs/README.md),分为两类:** - **技术文档**(系统怎么实现):[`docs/technical/`](docs/README.md) - **开发集成文档**(怎么用、怎么接入):[`docs/integration/`](docs/README.md) 请从 [`docs/README.md`](docs/README.md) 开始阅读。 ## 说明 - 面向 Linux(使用 POSIX 接口);仅 GUI 需要 Qt,其余组件不依赖 Qt。 - 实验阶段不保留旧 API、旧 manifest 兼容;升级时清空数据目录重建基线。