FinDataHub
fb76b10033
feat(cross-platform): 收敛路径与进程语义到 paths / process_utils
Windows 迁移 M0。纯新增两个模块 + 4 个脚本接线,**macOS 行为零漂移**。
背景:仓库此前把 /tmp/findatahub-*.pid、~/Library/Logs、
~/Library/Preferences/...plist 直接写死在十来个文件里;采集管线散落着
start_new_session=True、os.kill(pid,0)、signal.SIGHUP 等 POSIX 专属写法。
这些在 Windows 上分别是:路径不存在、ValueError、探测即杀进程、AttributeError。
- paths.py:temp_dir / pid_file / heartbeat_file / log_root / log_dir /
app_support_dir / backups_dir / config_dir / user_defaults_plist / env_file
- process_utils.py:detach_kwargs / is_running / terminate_pid /
available_signals / register_signal_handler / restore_default_and_die /
utf8_subprocess_env
两个必须记住的坑(已写成测试断言):
1. tempfile.gettempdir() 在 macOS 返回 $TMPDIR(/var/folders/.../T),
与现网 PID 文件所在的 /tmp **不是同一目录**。paths.temp_dir() 返回
/tmp 是刻意的,混用会导致新旧进程互相看不见。
2. Windows 上 os.kill(pid, 0) 等价于 TerminateProcess,不是「探测」,
必须用 OpenProcess。
接线:newsflash_collect(PID/心跳/日志/plist)、daily_summary(PID)、
migrate_date_format(备份目录)、install_collector_launchd(plist + 平台守卫)。
同时修 newsflash_collect.write_heartbeat 的静默失败:Swift 端以心跳
300s 未更新判定卡死并重启,而此处原为 except OSError: pass——重启理由
在日志里毫无痕迹。改为状态翻转才记录(心跳 60s 一次,无脑打日志会刷屏)。
验证:现网采集器 status 正常,5 个路径与旧硬编码逐字一致。
回归:test_paths_process_utils.py 32 条 + 心跳可观测性 5 条。
2026-10-26 20:55:31 +08:00
..
2026-09-18 22:37:32 +08:00
2026-09-18 22:37:32 +08:00
2026-09-19 00:27:21 +08:00
2026-09-18 22:37:32 +08:00
2026-09-18 22:37:32 +08:00
2026-09-18 22:37:32 +08:00
2026-09-18 22:37:32 +08:00
2026-09-18 22:37:32 +08:00
2026-10-26 20:55:31 +08:00
2026-09-18 22:37:32 +08:00
2026-10-26 20:55:31 +08:00
2026-09-18 22:37:32 +08:00
2026-09-18 22:37:32 +08:00