Skip to content

Phase 2: live ping graphs, session log filter and export, profiles - #5

Merged
cookingwithsimon merged 2 commits into
mainfrom
phase-2
Oct 16, 2026
Merged

cookingwithsimon merged 2 commits into
mainfrom
phase-2

Conversation

@cookingwithsimon

@cookingwithsimon cookingwithsimon commented Oct 16, 2026 •

Copy link
Copy Markdown
Owner

What changes for the user

Before: only the device shown at the top was pinged, and only its latest result was visible. The session log could only be scrolled. The server used a single settings form.

After:

  • Every device with a lease is pinged once a second. Each row in the device list shows a small latency graph and its latest reply time. The selected device shows the last two minutes, with average, min, max and loss, and missed pings drawn as red marks. When a device stops answering, or starts again, the session log records it.

  • The session log can be filtered by level, area and text. Export log… saves what's shown as a text file for a job report, with a header naming the app version, laptop, adapter and driver, profile and start time, or as a CSV for Excel.

  • Profiles replace the settings form. You pick one from the top bar, and the gear button opens the profile editor. It covers subnet, pool, lease time, gateway, DNS, domain (15), NTP (42), vendor-specific (43, hex), TFTP/provisioning (66), Cisco TFTP (150) and any other option as text, addresses or hex.

  • Profiles can be created, duplicated, deleted with a named confirmation, exported and imported.

  • The read-only presets are built from each manufacturer's own documentation, and the editor links to the pages they come from:

    • Default, for gear that asks for DHCP out of the box.
    • 192.168.254.x for Extron.
    • 192.168.0.x for Lightware, Christie, Sharp/NEC and Bose.
    • 192.168.1.x for Kramer, Atlona, ClickShare and AMX.
    • Cisco IP phones (150), Poly phones (66) and a bench test with 2-minute leases.

    Each preset's pool leaves the documented factory addresses free.

  • Settings from Phase 1 that differ from the defaults become a "My settings" profile.

How

  • Core has three new parts, each covered by unit tests:
    • Devices/PingHistory keeps a window of results, works out the stats, and reports down/up transitions after 3 misses.
    • LogExport handles the filter, the TXT and CSV output, RFC 4180 quoting, and a leading apostrophe on cells Excel would read as formulas, since host names come from devices.
    • Profiles/ holds the profile model and validation, the presets with their sources, and the library: JSON save, unique names, import and export, and migration.
  • Windows: the new DeviceMonitor runs one pinger per leased device, up to 64. DeviceProber now only checks the web ports of the selected device.
  • App: a Sparkline control draws the graphs. The settings view model is rewritten as the profile editor, with its dialogs behind ISettingsDialogs. Source links only open https URLs, through Explorer, so the browser doesn't run elevated. The main view model gains the log filter and export.

Testing

  • Core tests pass (160, of which 29 are new; one checks that each brand preset reaches the documented factory addresses without handing them out)
  • Windows CI run is green (integration tests, publish, smoke-test screenshots). There's a new integration test for the pinger against localhost.
  • Hardware checklist added: docs/hardware-test-phase2.md

🤖 Generated with Claude Code

https://claude.ai/code/session_01KZvcgLYKFKnCYgDw2Bxw5e

- Ping every device with a lease once a second; show a latency graph per
  device and the last two minutes for the selected one; log when a device
  stops answering and when it comes back.
- Filter the session log by level, area and text; export what's shown as
  TXT (with a session header) or CSV for Excel.
- Profiles replace the single settings form: presets plus your own,
  with options 15, 42, 43, 66, 150 and custom options; new, duplicate,
  delete, import and export. Phase 1 settings become "My settings".
- Phase 2 hardware checklist.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KZvcgLYKFKnCYgDw2Bxw5e
Presets now group devices by factory subnet (192.168.254.x Extron;
192.168.0.x Lightware, Christie, Sharp/NEC, Bose; 192.168.1.x Kramer,
Atlona, ClickShare, AMX), each citing the manufacturer pages it is
based on, shown as links in the profile editor. Pools keep clear of the
documented factory addresses (checked by a test).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KZvcgLYKFKnCYgDw2Bxw5e
@cookingwithsimon
cookingwithsimon marked this pull request as ready for review October 16, 2026 04:41
@cookingwithsimon
cookingwithsimon merged commit 5dd950b into main Oct 16, 2026
1 check passed
@cookingwithsimon
cookingwithsimon deleted the phase-2 branch October 16, 2026 05:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants