159 lines
8.8 KiB
Markdown
159 lines
8.8 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to Seismo Fleet Manager will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [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)
|
|
|
|
[0.3.0]: https://github.com/serversdwn/seismo-fleet-manager/compare/v0.2.1...v0.3.0
|
|
[0.2.1]: https://github.com/serversdwn/seismo-fleet-manager/compare/v0.2.0...v0.2.1
|
|
[0.2.0]: https://github.com/serversdwn/seismo-fleet-manager/compare/v0.1.1...v0.2.0
|
|
[0.1.1]: https://github.com/serversdwn/seismo-fleet-manager/compare/v0.1.0...v0.1.1
|
|
[0.1.0]: https://github.com/serversdwn/seismo-fleet-manager/releases/tag/v0.1.0
|