Files
terra-view/CHANGELOG.md
2025-12-09 06:18:30 +00:00

8.8 KiB

Changelog

All notable changes to Seismo Fleet Manager will be documented in this file.

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

0.3.0 - 2025-12-09

Added

  • Series 4 (Micromate) Support: New /api/series4/heartbeat endpoint for receiving telemetry from Series 4 Micromate units
    • Auto-detection of Series 4 units via UM##### ID pattern
    • Stores project hints from emitter payload in unit notes
    • Automatic unit type classification across both Series 3 and Series 4 endpoints
  • Development Environment Labels: Visual indicators to distinguish dev from production deployments
    • Yellow "DEV" badge in sidebar navigation
    • "[DEV]" prefix in browser title
    • Yellow banner on dashboard when running in development mode
    • Environment variable support in docker-compose.yml (ENVIRONMENT=production|development)
  • Quality of Life Improvements:
    • Human-readable relative timestamps (e.g., "2h 15m ago", "3d ago") with full date in tooltips
    • "Last Updated" timestamp indicator on dashboard
    • Status icons for colorblind accessibility (checkmark for OK, clock for Pending, X for Missing)
    • Breadcrumb navigation on unit detail pages
    • Copy-to-clipboard buttons for unit IDs
    • Search/filter functionality for fleet roster table
    • Improved empty state messages with icons
  • Timezone Support: Comprehensive timezone handling across the application
    • Timezone selector in Settings (defaults to America/New_York EST)
    • Human-readable timestamp format (e.g., "9/10/2020 8:00 AM EST")
    • Timezone-aware display for all timestamps site-wide
    • Settings stored in localStorage for immediate effect
  • Settings Page Redesign: Complete overhaul with tabbed interface and persistent preferences
    • General Tab: Display preferences (timezone, theme, auto-refresh interval)
    • Data Management Tab: Safe operations (CSV export, merge import, roster table)
    • Advanced Tab: Power user settings (replace mode import, calibration defaults, status thresholds)
    • Danger Zone Tab: Destructive operations isolated with enhanced warnings
    • Backend preferences storage via new UserPreferences model
    • Tab state persistence in localStorage
    • Smooth animations and consistent styling with existing pages
  • User Preferences API: New backend endpoints for persistent settings storage
    • GET /api/settings/preferences - Retrieve all user preferences
    • PUT /api/settings/preferences - Update preferences (supports partial updates)
    • Database-backed storage for cross-device preference sync
    • Migration script: backend/migrate_add_user_preferences.py

Changed

  • Timestamps now display in user-selected timezone with human-readable format throughout the application
  • Settings page reorganized from 644-line flat layout to clean 4-tab interface
  • CSV Replace Mode moved from Data Management to Advanced tab with additional warnings
  • Import operations separated: safe merge in Data Management tab, destructive replace in Advanced tab
  • Page title changed from "Roster Manager" to "Settings" for better clarity
  • All preferences now persist to backend database instead of relying solely on localStorage

Fixed

  • Unit type classification now consistent across Series 3 and Series 4 heartbeat endpoints
  • Auto-correction of misclassified unit types when they report to wrong endpoint

Technical Details

  • New detect_unit_type() helper function for pattern-based unit classification
  • UserPreferences model with single-row table pattern (id=1) for global settings
  • Series 4 units identified by UM prefix followed by digits (e.g., UM11719)
  • JavaScript Intl API used for client-side timezone conversion
  • Pydantic schema for partial preference updates (PreferencesUpdate model)
  • Environment context injection via custom FastAPI template response wrapper

0.2.1 - 2025-12-03

Added

  • /settings roster manager page with CSV export/import, live stats, and danger-zone reset controls.
  • /api/settings router that exposes export-csv, stats, roster-units, import-csv-replace, and the clear-* endpoints backing the UI.
  • Dedicated HTMX partials/tabs for deployed, benched, retired, and ignored units plus new ignored-table UI to unignore or delete entries.

Changed

  • Roster and unit detail templates now display device-type specific metadata (calibration windows, modem pairings, IP/phone fields) alongside inline actions.
  • Base navigation highlights the new settings workflow and routes retired/ignored buckets through dedicated endpoints + partials.

Fixed

  • Snapshot summary counts only consider deployed units, preventing dashboard alerts from including benched hardware.
  • Snapshot payloads now include address/coordinate metadata so map widgets and CSV exports stay accurate.

0.2.0 - 2025-12-03

Added

  • Device-type aware roster schema (seismographs vs modems) with new metadata columns plus backend/migrate_add_device_types.py for upgrading existing SQLite files.
  • create_test_db.py helper that generates a ready-to-use demo database with sample seismographs, modems, and emitter rows.
  • Ignore list persistence/API so noisy legacy emitters can be quarantined via /api/roster/ignore and surfaced in the UI.
  • Roster page enhancements: Add Unit modal, CSV import modal, and HTMX-powered table fed by /partials/roster-table.
  • Unit detail view rewritten to fetch data via API, expose deployment status, and allow edits to all metadata.

Changed

  • Snapshot service now merges roster + emitter data into active/benched/retired/unknown buckets and includes device-specific metadata in each record.
  • Roster edit endpoints parse date fields, manage modem/seismograph specific attributes, and guarantee records exist when toggling deployed/retired states.
  • Dashboard partial endpoints are grouped under /dashboard/* so HTMX tabs stay in sync with the consolidated snapshot payload.

Fixed

  • Toggling deployed/retired flags no longer fails when a unit does not exist because the router now auto-creates placeholder roster rows.
  • CSV import applies address/coordinate updates instead of silently dropping unknown columns.

0.1.1 - 2025-12-02

Added

  • Roster Editing API: Full CRUD operations for roster management
    • POST /api/roster/add - Add new units to roster
    • POST /api/roster/set-deployed/{unit_id} - Toggle deployment status
    • POST /api/roster/set-retired/{unit_id} - Toggle retired status
    • POST /api/roster/set-note/{unit_id} - Update unit notes
  • CSV Import: Bulk roster import functionality
    • POST /api/roster/import-csv - Import units from CSV file
    • Support for all roster fields: unit_id, unit_type, deployed, retired, note, project_id, location
    • Optional update_existing parameter to control duplicate handling
    • Detailed import summary with added/updated/skipped/error counts
  • Enhanced Database Models:
    • Added project_id field to RosterUnit model
    • Added location field to RosterUnit model
    • Added last_updated timestamp tracking
  • Dashboard Enhancements:
    • Separate views for Active, Benched, and Retired units
    • New endpoints: /dashboard/active and /dashboard/benched

Fixed

  • Database session management bug in emit_status_snapshot()
    • Added get_db_session() helper function for direct session access
    • Implemented proper session cleanup with try/finally blocks
  • Database schema synchronization issues
    • Database now properly recreates when model changes are detected

Changed

  • Updated RosterUnit model to include additional metadata fields
  • Improved error handling in CSV import with row-level error reporting
  • Enhanced snapshot service to properly manage database connections

Technical Details

  • All roster editing endpoints use Form data for better HTML form compatibility
  • CSV import uses multipart/form-data for file uploads
  • Boolean fields in CSV accept: 'true', '1', 'yes' (case-insensitive)
  • Database sessions now properly closed to prevent connection leaks

0.1.0 - 2024-11-20

Added

  • Initial release of Seismo Fleet Manager
  • FastAPI-based REST API for fleet management
  • SQLite database with SQLAlchemy ORM
  • Emitter reporting endpoints
  • Basic fleet status monitoring
  • Docker and Docker Compose support
  • Web-based dashboard with HTMX
  • Dark/light mode toggle
  • Interactive maps with Leaflet
  • Photo management per unit
  • Automated status categorization (OK/Pending/Missing)