qing
2ff7908bc7
feat(db): _view_db -n 改为取最后 N 行
...
按 rowid 倒序取末尾 N 行,外层再正序展示,便于查看最新日志;
-w 条件放入内层子查询,语义为"最后 N 条匹配记录"。
2026-08-04 23:44:59 +08:00
qing
ec3df34b43
feat(db): 新增修复 Notes 表 pid 悬空节点的脚本
2026-08-04 22:19:05 +08:00
qing
a7a78d1424
docs: aggregate project documentation under docs/ with unified index
...
- Move all per-module security audit reports to docs/security/
- Move code review logs to docs/reviews/, analysis reports to docs/reports/
- Add docs/INDEX.md as single entry point for all project documentation
- Add documentation management conventions section to README.md
- Clean up empty per-module docs/ directories
2026-08-03 13:21:48 +08:00
qing
c3c07ab06d
Merge pull request 'Main' ( #17 ) from main into dev_qing
...
Reviewed-on: qing/micro_servers#17
2026-08-02 11:51:31 +08:00
qing
2e210e4729
chore(db): gitignore 忽略 SQLite WAL/SHM 运行时临时文件
2026-08-02 11:49:42 +08:00
qing
8200cbfba7
refix
2026-08-02 01:19:56 +08:00
qing
101aed48be
feat(pymsg): RpcClient 新增 retry_on_refused 阻塞等待模式,解决微服务启动顺序依赖
...
pymsg 客户端:
- MsgClient.call() 新增 retry_on_refused/retry_interval 参数
- retry_on_refused=True 时,ConnectionRefusedError 不抛出,按 retry_interval(默认1s)阻塞重试
- 重试期间每5秒向 stderr 打印等待提示,避免日志刷屏
- 仅对 ConnectionRefusedError 重试;TimeoutError/ConnectionError/RpcError 仍立即抛出
- 默认 retry_on_refused=False,完全向后兼容
- RpcClient 构造函数新增同名关键字参数,call() 支持单次调用覆盖
- 新增 time 模块导入
- 更新 README 文档(新增"启动等待模式"章节和参数表)
各服务(db/dnfs/static):
- _fetch_from_confs() 改用 retry_on_refused=True,移除手动 ConnectionRefusedError 捕获和 sys.exit
- 保留 RpcError(如配置文件不存在)的友好错误处理和 sys.exit(1)
- 启动时不再因 confs 未就绪而退出:pymsg 自动阻塞等待 confs 启动后自动连接成功
- 启动顺序从"刚性要求 confs 先启动"变为"不严格要求启动顺序"
- log_client 保持默认 retry_on_refused=False,后台线程不阻塞(fail-safe 丢弃日志)
- 更新各服务 README 和 confs README 的启动顺序描述
测试验证:
- 基本 call() 正常工作
- retry_on_refused=False 连接拒绝立即抛 ConnectionRefusedError
- retry_on_refused=True 阻塞等待(延迟1.5s启动服务后成功连接,重试日志正常输出)
2026-08-01 12:47:08 +08:00
qing
2cbb93b3b7
refactor(db): 删除 confs 连接失败时使用默认配置的 fail-safe 逻辑
...
- confs 改为 db 启动的强依赖:连接失败直接 sys.exit(1),不再静默使用默认值
- 配置加载从三层(默认值→confs→环境变量)改为两层(confs→环境变量覆盖)
- _db_config 初始值改为空字符串白名单模板,移除内置默认值
- 新增配置完整性校验:confs 返回后检查所有必需 section/key 非空,缺失则报错退出
- 区分错误类型:连接拒绝/RpcError/通用异常分别打印明确的错误信息到 stderr
- confs 连接地址改为引导配置(环境变量优先,默认 127.0.0.1:8010),不再从 db.ini 读取
- 更新 db/README.md 与 confs/README.md,说明启动顺序调整为 confs → db → ...
2026-08-01 12:29:55 +08:00
qing
6ebd544619
feat(db): 迁移 db 配置到 confs 统一配置服务
...
- 新增 confs/configs/db.ini 集中托管 db 服务配置(server/database/logs/confs)
- dbv2.py 采用三层 fail-safe 加载模式:内置默认值 → confs(db.ini,优先)→ 环境变量覆盖(最高优先级,Docker 兼容)
- _merge_ini() 白名单合并,仅覆盖已知 section/key,ConfigParser(interpolation=None) 禁用插值
- db 先于 confs 启动时连接失败静默 fail-safe,启动时打印配置来源
- db_tools.py 运维工具保持独立,直接读 DATABASE_URL 环境变量,不依赖 confs
- 更新 confs/README.md 与 db/README.md 文档
2026-08-01 12:23:21 +08:00
qing
cebef9fe70
docs: 各模块安全审计报告 + 补充 .gitignore 忽略规则
2026-08-01 05:21:23 +08:00
qing
6c587a22d8
docs(db): update README for log_client SDK template and hardening features
...
- Document that example_log_client.py now uses RpcClient (high-level RPC)
instead of legacy MsgClient (low-level TCP frames)
- Add comprehensive client feature list reflecting all hardening fixes:
- Thread exception protection (outer try/except prevents thread death)
- Accurate enqueue-time timestamps
- Queue maxsize with drop-oldest policy
- Safe JSON serialization fallback
- Event-based flush synchronization
- Non-blocking push() guarantee
- Clarify length truncation: server-side _log_internal() truncates
internal logs to 8KB/4KB, external clients should control length
- Add db_tools.py to file table (was previously undocumented)
- Update service description to mention RpcServer
2026-08-01 03:28:40 +08:00
qing
bdbea6ac40
fix(log_client): update example_log_client template to use RpcClient
...
- Replace legacy MsgClient (low-level TCP frames) with RpcClient (high-level
RPC) to match dbv2's RpcServer interface; the old MsgClient-based version
was incompatible with the current RPC routing protocol
- Apply all hardening fixes from the service copies:
- Outer try/except in _flush_loop to prevent any exception from killing
the background thread
- _safe_json() helper for unserializable extra fields (fallback to str/repr)
- Timestamp generated at push() (enqueue time) instead of _send() time
- Event-based flush() synchronization instead of unreliable sleep(0.6)
- Queue maxsize=10000 with drop-oldest policy to prevent unbounded memory
- put_nowait with Full handling ensures push() never blocks business threads
- RpcClient construction wrapped in try/except
- Add explicit service_name parameter example for all 4 services in comments
- This is the template file referenced by db/README.md and copied by new
services; keeping it in sync prevents propagating old bugs
2026-08-01 03:26:19 +08:00
qing
3f97dd92ef
update
2026-07-30 21:57:04 +08:00
qing
32d3a5a19f
重构db
2026-07-30 20:15:02 +08:00
qing
803d176066
docs(db): 修正 log_client 描述并补充 message/extra 截断说明
...
- "纯标准库实现" → "无第三方依赖(仅依赖 pymsg 项目内置库)",更准确
- 新增长度保护说明:message 上限 8KB、extra 上限 4KB,超长自动截断
fix(db): _set.sh Nuitka 注释 main.py → dbv2.py
2026-07-30 12:34:37 +08:00
qing
19d5b65625
fix(db): 新增日期列类型适配层,修复无法经 db 处理 DATETIME 列的问题
...
JSON 无日期类型,而 SQLite DATETIME 只接受 Python datetime 对象,
导致各服务对日期列的写入与 where 比较全部失败。_coerce_value 按反射
列类型把 ISO 8601 字符串转为 datetime/date/time(带时区偏移统一转
UTC),并支持 "$now" 哨兵取服务端当前时间;响应中日期时间改为一律
序列化为 ISO 8601(T 分隔)。黑盒测试补 3 个日期列场景。
2026-07-28 23:16:17 +08:00
qing
6692c9c4ee
refactor(db): 清理遗留死代码并对齐文档与测试
...
删除 dbv2 从未挂载的 log_module.py(Flask /log/* 遗留)与纯 TCP 服务
用不到的 security_middleware.py 副本;db/README.md 按 pymsg 实现重写,
requirements 去掉 flask/waitress;黑盒测试对 pymsg 服务改用 TCP 探测,
修复 check_service HTTP 探测导致的 db 测试整体假 skip。
2026-07-28 22:21:36 +08:00
qing
50f209e84a
fix: X-Frame-Options/frame-ancestors 改为同源以修复条例弹窗空白
2026-07-28 11:53:35 +08:00
qing
a5e581ef24
fix: CSP img-src 放行 blob:,修复验证码图片被拦截
...
登录页验证码用 URL.createObjectURL 生成的 blob: URL 显示,被 img-src 'self' data: 拦截导致图片无法加载;五处 CSP 定义(waf 边缘 + 四个 Flask 中间件副本)同步放宽。
2026-07-28 10:19:47 +08:00
qing
18ac572442
更新dbv2、删除旧的db1、为static添加log
2026-07-27 10:22:16 +08:00
qing
08021015b1
更新msg客户端
2026-07-27 09:21:06 +08:00
qing
6efb792133
C++版本的MsgClient
2026-07-26 21:48:14 +08:00
qing
3d2278f6b7
^-^ rename
2026-07-26 21:27:40 +08:00
qing
4fe0689cf6
修复db客户端无法推日志的问题
2026-07-26 21:26:17 +08:00
qing
8ec42df779
初步开发了新的pymsg,并且应用在了dnfs上面
2026-07-26 17:57:27 +08:00
qing
9349b8248f
fix
2026-07-25 21:08:17 +08:00
qing
013e130a08
logs in db develop
2026-07-25 21:01:46 +08:00
qing
a4479696eb
dos2unix
2026-07-25 20:54:57 +08:00
qing
479d263b88
log service in db
2026-07-25 20:32:56 +08:00
qing
efbe2b36f3
节点所有权
2026-07-25 14:20:08 +08:00
qing
fbccc5d909
网友修改版
2026-07-25 00:21:16 +08:00
shufeng2012
468d420746
解决冲突(这啥呀*2)
2026-07-24 15:00:34 +08:00
shufeng2012
80d20f5015
解决冲突(这啥呀)
2026-07-24 14:46:26 +08:00
shufeng2012
a6ff35260b
使用db服务
2026-07-24 10:02:46 +08:00
shufeng2012
b2aa177ed2
refix
2026-07-24 07:33:34 +08:00
shufeng2012
2ac5e0999a
创建sqlite3数据表的sql文件
2026-07-24 07:11:48 +08:00
shufeng2012
cc08d171c6
refix
2026-07-24 07:05:46 +08:00
shufeng2012
4046ef8dc8
refix
2026-07-24 07:01:43 +08:00
shufeng2012
400f527a88
rename
2026-07-24 06:36:26 +08:00