dohertj2 dohertj2
  • Joined on 2026-02-20
dohertj2 merged pull request dohertj2/lmxopcua#36 2026-04-18 16:56:52 -04:00
Phase 3 PR 37 — End-to-end live-stack Galaxy smoke test
dohertj2 created pull request dohertj2/lmxopcua#36 2026-04-18 16:56:49 -04:00
Phase 3 PR 37 — End-to-end live-stack Galaxy smoke test
dohertj2 created branch phase-3-pr37-live-stack-smoke in dohertj2/lmxopcua 2026-04-18 16:51:27 -04:00
dohertj2 pushed to phase-3-pr37-live-stack-smoke at dohertj2/lmxopcua 2026-04-18 16:51:27 -04:00
8adc8f5ab8 Phase 3 PR 37 — End-to-end live-stack Galaxy smoke test. Closes the code side of LMX follow-up #5; once OtOpcUaGalaxyHost is installed + started on the dev box, the suite exercises the full topology GalaxyProxyDriver in-process → named-pipe IPC → running OtOpcUaGalaxyHost Windows service → MxAccessGalaxyBackend → live MXAccess runtime → real deployed Galaxy objects. Never spawns the Host process itself — connects to the already-running service per project_galaxy_host_service.md, which is the only way to exercise the production COM-apartment + service-account + pipe-ACL configuration.
dohertj2 pushed to v2 at dohertj2/lmxopcua 2026-04-18 16:44:43 -04:00
261869d84e Merge pull request 'Phase 3 PR 36 — AVEVA prerequisites test-support library' (#35) from phase-3-pr36-aveva-prerequisites into v2
08c90d19fd Phase 3 PR 36 — AVEVA prerequisites test-support library. New tests/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.TestSupport multi-targeted class library (net10.0 + net48 so both the modern and the MXAccess-COM x86 test projects can consume it) that probes every piece of the AVEVA System Platform + OtOpcUa stack a live-Galaxy test depends on and returns a structured PrerequisiteReport. Closes the gap where live-smoke tests silently returned 'unreachable' without telling operators which specific piece failed.
Compare 2 commits »
dohertj2 merged pull request dohertj2/lmxopcua#35 2026-04-18 16:44:42 -04:00
Phase 3 PR 36 — AVEVA prerequisites test-support library
dohertj2 created pull request dohertj2/lmxopcua#35 2026-04-18 16:44:39 -04:00
Phase 3 PR 36 — AVEVA prerequisites test-support library
dohertj2 created branch phase-3-pr36-aveva-prerequisites in dohertj2/lmxopcua 2026-04-18 16:37:50 -04:00
dohertj2 pushed to phase-3-pr36-aveva-prerequisites at dohertj2/lmxopcua 2026-04-18 16:37:50 -04:00
08c90d19fd Phase 3 PR 36 — AVEVA prerequisites test-support library. New tests/ZB.MOM.WW.OtOpcUa.Driver.Galaxy.TestSupport multi-targeted class library (net10.0 + net48 so both the modern and the MXAccess-COM x86 test projects can consume it) that probes every piece of the AVEVA System Platform + OtOpcUa stack a live-Galaxy test depends on and returns a structured PrerequisiteReport. Closes the gap where live-smoke tests silently returned 'unreachable' without telling operators which specific piece failed.
dohertj2 pushed to v2 at dohertj2/lmxopcua 2026-04-18 16:12:46 -04:00
5cc120d836 Merge pull request 'Phase 3 PR 35 — IHistoryProvider gains ReadAtTime + ReadEvents; Proxy implements both' (#34) from phase-3-pr35-history-readtime-readevents into v2
bf329b05d8 Phase 3 PR 35 — IHistoryProvider gains ReadAtTimeAsync + ReadEventsAsync; GalaxyProxyDriver implements both. Extends Core.Abstractions.IHistoryProvider with two new methods that round out the OPC UA Part 11 HistoryRead surface (HistoryReadAtTime + HistoryReadEvents are the last two modes not covered by the PR 19-era ReadRawAsync + ReadProcessedAsync) and wires GalaxyProxyDriver to call the existing PR-10/PR-11 IPC contracts the Host already implements.
Compare 2 commits »
dohertj2 merged pull request dohertj2/lmxopcua#34 2026-04-18 16:12:45 -04:00
Phase 3 PR 35 — IHistoryProvider gains ReadAtTime + ReadEvents; Proxy implements both
dohertj2 created pull request dohertj2/lmxopcua#34 2026-04-18 16:12:42 -04:00
Phase 3 PR 35 — IHistoryProvider gains ReadAtTime + ReadEvents; Proxy implements both
dohertj2 created branch phase-3-pr35-history-readtime-readevents in dohertj2/lmxopcua 2026-04-18 16:10:05 -04:00
dohertj2 pushed to phase-3-pr35-history-readtime-readevents at dohertj2/lmxopcua 2026-04-18 16:10:05 -04:00
bf329b05d8 Phase 3 PR 35 — IHistoryProvider gains ReadAtTimeAsync + ReadEventsAsync; GalaxyProxyDriver implements both. Extends Core.Abstractions.IHistoryProvider with two new methods that round out the OPC UA Part 11 HistoryRead surface (HistoryReadAtTime + HistoryReadEvents are the last two modes not covered by the PR 19-era ReadRawAsync + ReadProcessedAsync) and wires GalaxyProxyDriver to call the existing PR-10/PR-11 IPC contracts the Host already implements.
dohertj2 merged pull request dohertj2/lmxopcua#33 2026-04-18 16:04:22 -04:00
Phase 3 PR 34 — Host-status publisher (Server) + /hosts drill-down page (Admin)
dohertj2 pushed to v2 at dohertj2/lmxopcua 2026-04-18 16:04:22 -04:00
2584379e75 Merge pull request 'Phase 3 PR 34 — Host-status publisher (Server) + /hosts drill-down page (Admin)' (#33) from phase-3-pr34-host-status-publisher-page into v2
ef2a810b2d Phase 3 PR 34 — Host-status publisher (Server) + /hosts drill-down page (Admin). Closes LMX follow-up #7 by wiring together the data layer from PR 33. Server.HostStatusPublisher is a BackgroundService that walks every driver registered in DriverHost every 10 seconds, skips drivers that don't implement IHostConnectivityProbe, calls GetHostStatuses() on each probe-capable driver, and upserts one DriverHostStatus row per (NodeId, DriverInstanceId, HostName) into the central config DB. Upsert path: SingleOrDefaultAsync on the composite PK; if no row exists, Add a new one; if a row exists, LastSeenUtc advances unconditionally (heartbeat) and State + StateChangedUtc update only on transitions so Admin UI can distinguish 'still reporting, still Running' from 'freshly transitioned to Running'. MapState translates Core.Abstractions.HostState to Configuration.Enums.DriverHostState (intentional duplicate enum — Configuration project stays free of driver-runtime deps per PR 33's choice). If a driver's GetHostStatuses throws, log warning and skip that driver this tick — never take down the Server on a publisher failure. If the DB is unreachable, log warning + retry next heartbeat (no buffering — next tick's current-state snapshot is more useful than replaying stale transitions after a long outage). 2-second startup delay so NodeBootstrap's RegisterAsync calls land before the first publish tick, then tick runs immediately so a freshly-started Server surfaces its host topology in the Admin UI without waiting a full interval.
Compare 2 commits »
dohertj2 created pull request dohertj2/lmxopcua#33 2026-04-18 16:04:19 -04:00
Phase 3 PR 34 — Host-status publisher (Server) + /hosts drill-down page (Admin)
dohertj2 created branch phase-3-pr34-host-status-publisher-page in dohertj2/lmxopcua 2026-04-18 15:53:31 -04:00
dohertj2 pushed to phase-3-pr34-host-status-publisher-page at dohertj2/lmxopcua 2026-04-18 15:53:31 -04:00
ef2a810b2d Phase 3 PR 34 — Host-status publisher (Server) + /hosts drill-down page (Admin). Closes LMX follow-up #7 by wiring together the data layer from PR 33. Server.HostStatusPublisher is a BackgroundService that walks every driver registered in DriverHost every 10 seconds, skips drivers that don't implement IHostConnectivityProbe, calls GetHostStatuses() on each probe-capable driver, and upserts one DriverHostStatus row per (NodeId, DriverInstanceId, HostName) into the central config DB. Upsert path: SingleOrDefaultAsync on the composite PK; if no row exists, Add a new one; if a row exists, LastSeenUtc advances unconditionally (heartbeat) and State + StateChangedUtc update only on transitions so Admin UI can distinguish 'still reporting, still Running' from 'freshly transitioned to Running'. MapState translates Core.Abstractions.HostState to Configuration.Enums.DriverHostState (intentional duplicate enum — Configuration project stays free of driver-runtime deps per PR 33's choice). If a driver's GetHostStatuses throws, log warning and skip that driver this tick — never take down the Server on a publisher failure. If the DB is unreachable, log warning + retry next heartbeat (no buffering — next tick's current-state snapshot is more useful than replaying stale transitions after a long outage). 2-second startup delay so NodeBootstrap's RegisterAsync calls land before the first publish tick, then tick runs immediately so a freshly-started Server surfaces its host topology in the Admin UI without waiting a full interval.
dohertj2 pushed to v2 at dohertj2/lmxopcua 2026-04-18 15:43:39 -04:00
a7764e50f3 Merge pull request 'Phase 3 PR 33 — DriverHostStatus entity + migration (LMX #7 data layer)' (#32) from phase-3-pr33-driverhoststatus-entity into v2
8464e3f376 Phase 3 PR 33 — DriverHostStatus entity + EF migration (data-layer for LMX #7). New DriverHostStatus entity with composite key (NodeId, DriverInstanceId, HostName) persists each server node's per-host connectivity view — one row per (server node, driver instance, probe-reported host), which means a redundant 2-node cluster with one Galaxy driver reporting 3 platforms produces 6 rows because each server node owns its own runtime view of the shared host topology, not 3. Fields: NodeId (64), DriverInstanceId (64), HostName (256 — fits Galaxy FQDNs and Modbus host:port strings), State (DriverHostState enum — Unknown/Running/Stopped/Faulted, persisted as nvarchar(16) via HasConversion<string> so DBAs inspecting the table see readable state names not ordinals), StateChangedUtc + LastSeenUtc (datetime2(3) — StateChangedUtc tracks actual transitions while LastSeenUtc advances on every publisher heartbeat so the Admin UI can flag stale rows from a crashed Server independent of State), Detail (nullable 1024 — exception message from the driver's probe when Faulted, null otherwise).
Compare 2 commits »