This commit is contained in:
Jonas Bengtsson
2026-10-08 07:26:04 +02:00
parent a1af8d68c9
commit 406fdc61ac
13 changed files with 1750 additions and 89 deletions
+20
View File
@@ -6,6 +6,26 @@ bump per [SemVer](https://semver.org/). Dates are YYYY-MM-DD.
## [Unreleased]
### Added — Phase 1 core engine (the continuous monitoring loop)
- `run` verb: the foreground monitoring loop — coordinator + dedicated COM
worker thread (the client is born on the worker; COM is per-thread),
1-second default polling of configured tags **and** device indicators,
heartbeat (D15) every `heartbeat_s`, clean Ctrl+C stop.
- Detection engine, all pure and fake-client tested: latency spike / sustained
streak / rolling p95 (D4–D6), per-tag quality transitions, persistence and
flapping (D8–D11), stale timestamp & frozen value (D12–D13), mass-quality
degradation with latch (D14), device-link indicators (D16, edge-level
DOWN/UP against configurable `ok_values`).
- Hang watchdog (spec §10.4): polls exceeding `timeout_ms` raise the D7
soft-hang event and keep the thread; silence beyond `hard_hang_s` abandons
the stuck COM thread (never joined — dead RPC channel) and rebuilds.
- Connection state machine with exponential backoff (1 s → 60 s, reset on
success) and reconnect accounting (D1/D2 with outage duration, D3 flapping).
- Fake-client scenario engine: scripted polls and whole-call failures power
the entire poller/detector test suite without COM.
- Clear-text status rendering (`status_text`): `BAD / COMM FAILURE (0x18)`
everywhere events are shown.
### Added — server discovery & browsing
- `list-servers` verb: enumerates OPC DA servers locally or on a DCOM host via
the Automation Wrapper (`GetOPCServers`), with a no-COM registry-scan fallback