sfm-old-042 #6
@@ -35,7 +35,7 @@ data/
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
.claude
|
.claude
|
||||||
sfm.code-workspace
|
terra-view.code-workspace
|
||||||
|
|
||||||
# Tests (optional)
|
# Tests (optional)
|
||||||
tests/
|
tests/
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
All notable changes to Seismo Fleet Manager will be documented in this file.
|
All notable changes to Terra-View will be documented in this file.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
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).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
@@ -54,7 +54,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [0.4.1] - 2026-01-05
|
## [0.4.1] - 2026-01-05
|
||||||
### Added
|
### Added
|
||||||
- **SLM Integration**: Sound Level Meters are now manageable in SFM
|
- **SLM Integration**: Sound Level Meters are now manageable in Terra-View
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Fixed an issue where unit status was loading from a saved cache and not based on when it was actually heard from last. Unit status is now accurate.
|
- Fixed an issue where unit status was loading from a saved cache and not based on when it was actually heard from last. Unit status is now accurate.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Seismo Fleet Manager v0.4.2
|
# Terra-View v0.4.2
|
||||||
Backend API and HTMX-powered web interface for managing a mixed fleet of seismographs and field modems. Track deployments, monitor health in real time, merge roster intent with incoming telemetry, and control your fleet through a unified database and dashboard.
|
Backend API and HTMX-powered web interface for Terra-View - a unified fleet management system. Track deployments, monitor health in real time, merge roster intent with incoming telemetry, and control your fleet through a unified database and dashboard. Terra-View supports seismographs (SFM module), sound level meters, field modems, and other monitoring devices.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ ENVIRONMENT = os.getenv("ENVIRONMENT", "production")
|
|||||||
# Initialize FastAPI app
|
# Initialize FastAPI app
|
||||||
VERSION = "0.4.2"
|
VERSION = "0.4.2"
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title="Seismo Fleet Manager",
|
title="Terra-View",
|
||||||
description="Backend API for managing seismograph fleet status",
|
description="Backend API for Terra-View fleet management system",
|
||||||
version=VERSION
|
version=VERSION
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -516,7 +516,7 @@ async def devices_all_partial(request: Request):
|
|||||||
def health_check():
|
def health_check():
|
||||||
"""Health check endpoint"""
|
"""Health check endpoint"""
|
||||||
return {
|
return {
|
||||||
"message": f"Seismo Fleet Manager v{VERSION}",
|
"message": f"Terra-View v{VERSION}",
|
||||||
"status": "running",
|
"status": "running",
|
||||||
"version": VERSION
|
"version": VERSION
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
SLMM (Sound Level Meter Manager) Proxy Router
|
SLMM (Sound Level Meter Manager) Proxy Router
|
||||||
|
|
||||||
Proxies requests from SFM to the standalone SLMM backend service.
|
Proxies requests from Terra-View to the standalone SLMM backend service.
|
||||||
SLMM runs on port 8100 and handles NL43/NL53 sound level meter communication.
|
SLMM runs on port 8100 and handles NL43/NL53 sound level meter communication.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ async def proxy_websocket_stream(websocket: WebSocket, unit_id: str):
|
|||||||
Proxy WebSocket connections to SLMM's /stream endpoint.
|
Proxy WebSocket connections to SLMM's /stream endpoint.
|
||||||
|
|
||||||
This allows real-time streaming of measurement data from NL43 devices
|
This allows real-time streaming of measurement data from NL43 devices
|
||||||
through the SFM unified interface.
|
through the Terra-View unified interface.
|
||||||
"""
|
"""
|
||||||
await websocket.accept()
|
await websocket.accept()
|
||||||
logger.info(f"WebSocket connection accepted for SLMM unit {unit_id}")
|
logger.info(f"WebSocket connection accepted for SLMM unit {unit_id}")
|
||||||
@@ -237,7 +237,7 @@ async def proxy_to_slmm(path: str, request: Request):
|
|||||||
"""
|
"""
|
||||||
Proxy all requests to the SLMM backend service.
|
Proxy all requests to the SLMM backend service.
|
||||||
|
|
||||||
This allows SFM to act as a unified frontend for all device types,
|
This allows Terra-View to act as a unified frontend for all device types,
|
||||||
while SLMM remains a standalone backend service.
|
while SLMM remains a standalone backend service.
|
||||||
"""
|
"""
|
||||||
# Build target URL
|
# Build target URL
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
/* IndexedDB wrapper for offline data storage in SFM */
|
/* IndexedDB wrapper for offline data storage in Terra-View */
|
||||||
/* Handles unit data, status snapshots, and pending edit queue */
|
/* Handles unit data, status snapshots, and pending edit queue */
|
||||||
|
|
||||||
class OfflineDB {
|
class OfflineDB {
|
||||||
constructor() {
|
constructor() {
|
||||||
this.dbName = 'sfm-offline-db';
|
this.dbName = 'terra-view-offline-db';
|
||||||
this.version = 1;
|
this.version = 1;
|
||||||
this.db = null;
|
this.db = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
/* Service Worker for Seismo Fleet Manager PWA */
|
/* Service Worker for Terra-View PWA */
|
||||||
/* Network-first strategy with cache fallback for real-time data */
|
/* Network-first strategy with cache fallback for real-time data */
|
||||||
|
|
||||||
const CACHE_VERSION = 'v1';
|
const CACHE_VERSION = 'v1';
|
||||||
const STATIC_CACHE = `sfm-static-${CACHE_VERSION}`;
|
const STATIC_CACHE = `terra-view-static-${CACHE_VERSION}`;
|
||||||
const DYNAMIC_CACHE = `sfm-dynamic-${CACHE_VERSION}`;
|
const DYNAMIC_CACHE = `terra-view-dynamic-${CACHE_VERSION}`;
|
||||||
const DATA_CACHE = `sfm-data-${CACHE_VERSION}`;
|
const DATA_CACHE = `terra-view-data-${CACHE_VERSION}`;
|
||||||
|
|
||||||
// Files to precache (critical app shell)
|
// Files to precache (critical app shell)
|
||||||
const STATIC_FILES = [
|
const STATIC_FILES = [
|
||||||
@@ -137,7 +137,7 @@ async function networkFirstStrategy(request, cacheName) {
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>Offline - SFM</title>
|
<title>Offline - Terra-View</title>
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
font-family: system-ui, -apple-system, sans-serif;
|
font-family: system-ui, -apple-system, sans-serif;
|
||||||
@@ -170,7 +170,7 @@ async function networkFirstStrategy(request, cacheName) {
|
|||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>📡 You're Offline</h1>
|
<h1>📡 You're Offline</h1>
|
||||||
<p>SFM requires an internet connection for this page.</p>
|
<p>Terra-View requires an internet connection for this page.</p>
|
||||||
<p>Please check your connection and try again.</p>
|
<p>Please check your connection and try again.</p>
|
||||||
<button onclick="location.reload()">Retry</button>
|
<button onclick="location.reload()">Retry</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -285,7 +285,7 @@ async function syncPendingEdits() {
|
|||||||
// IndexedDB helpers (simplified versions - full implementations in offline-db.js)
|
// IndexedDB helpers (simplified versions - full implementations in offline-db.js)
|
||||||
function openDatabase() {
|
function openDatabase() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const request = indexedDB.open('sfm-offline-db', 1);
|
const request = indexedDB.open('terra-view-offline-db', 1);
|
||||||
|
|
||||||
request.onerror = () => reject(request.error);
|
request.onerror = () => reject(request.error);
|
||||||
request.onsuccess = () => resolve(request.result);
|
request.onsuccess = () => resolve(request.result);
|
||||||
|
|||||||
Reference in New Issue
Block a user