Files
thor-watcher/CHANGELOG.md
T

4.1 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.3.0] - 2026-05-19

Added

  • event_forwarder.py — forwards .IDFH (histogram) and .IDFW (waveform) event files plus their TXT/<basename>.txt sidecars to a seismo-relay SFM server's new /db/import/idf_file endpoint
  • Sha256-keyed thor_forwarded.json state file for idempotency across restarts and re-scans (default path: <log_dir>/thor_forwarded.json)
  • "SFM Forward" tab in Settings dialog: enable/URL/Test, forward interval, quiescence, missing-report grace, HTTP timeout, max forwards per pass, max event age, state file picker
  • Forwarder status line in tray menu: SFM OK | N fwd, M err | last 30s ago
  • Tray icon goes amber when the SFM forwarder is failing but the API heartbeat is still healthy
  • Re-pair logic: events forwarded without their TXT are re-forwarded once the sidecar appears so the relay can refresh DB rows with device-authoritative PPV/ZCFreq/peak values
  • event_forwarder.py --seed-state CLI for skipping historical backfill on a first deploy
  • Version badge: Thor Watcher vX.Y.Z shown at the top of the tray menu and in the Settings dialog title bar — operators no longer have to crack open the .exe properties to tell which version is running

Changed

  • Bumped VERSION to 0.3.0
  • Settings dialog tab order: Connection / Paths / Scanning / Logging / SFM Forward / Updates

[0.2.0] - 2026-03-20

Added

  • thor_tray.py — system tray launcher with status icon (green/amber/red/grey), Settings and Open Log Folder menu items
  • thor_settings_dialog.py — Tkinter settings dialog with first-run wizard; tabs for Connection, Paths, Scanning, Logging, Updates
  • Hardened auto-updater: three-layer download validation (100 KB floor, 50% relative size floor, MZ magic bytes), safer swap bat with 5-retry cap and :fail exit, .exe.old backup
  • Configurable update source: update_source (gitea / url / disabled), update_url for custom server
  • Remote push support: update_available flag in API heartbeat response triggers update regardless of update_source setting
  • build.bat — PyInstaller build script; outputs versioned exe for Gitea and plain copy for Inno Setup
  • installer.iss — Inno Setup installer script with startup shortcut
  • _update_log() helper writes timestamped [updater] lines to the watcher log
  • log_tail included in heartbeat payload (last 25 lines) for terra-view display
  • run_watcher(state, stop_event) pattern in series4_ingest.py for background thread use from tray

Changed

  • series4_ingest.py refactored into tray-friendly background thread module; main() retained for standalone use
  • Config key sfm_endpoint renamed to api_url for consistency with series3-watcher
  • Heartbeat payload now uses source_id, source_type, version fields matching terra-view WatcherAgent model
  • AppData folder: ThorWatcher (was not previously defined)

[0.1.1] - 2025-12-08

Changed

  • Moved configuration from hard-coded values to external config.json file
  • Configuration now loads from JSON file with graceful fallback to defaults
  • Config file is loaded relative to script location for portability

Added

  • config.json - External configuration file for all application settings
  • load_config() function with error handling and default value fallback
  • Warning messages when config file is missing or malformed

[0.1.0] - 2025-12-04

Added

  • Initial release of Series 4 Ingest Agent
  • Micromate (Series 4) heartbeat monitoring for Seismo Fleet Manager
  • THORDATA folder scanner for MLG files
  • Automatic detection of newest MLG file per unit by timestamp
  • Age calculation and status classification (OK / LATE / STALE)
  • Console heartbeat display with formatted output
  • Optional HTTP POST to SFM backend endpoint
  • Configurable age thresholds and scan intervals
  • Debug logging capability
  • Graceful error handling for filesystem and network operations