🚧 WIP
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user