mirror of
https://github.com/smittix/intercept.git
synced 2026-06-02 19:23:36 -07:00
Add ADS-B history persistence and reporting UI
This commit is contained in:
@@ -74,9 +74,12 @@
|
||||
<button type="button" class="strip-btn" onclick="lookupSelectedFlight()" title="Lookup selected aircraft on FlightAware" id="flightLookupBtn" disabled>
|
||||
🔗 Lookup
|
||||
</button>
|
||||
<button type="button" class="strip-btn primary" onclick="generateReport()" title="Generate Session Report">
|
||||
📊 Report
|
||||
</button>
|
||||
<button type="button" class="strip-btn primary" onclick="generateReport()" title="Generate Session Report">
|
||||
📊 Report
|
||||
</button>
|
||||
<a class="strip-btn" href="/adsb/history" title="Open History Reporting">
|
||||
📚 History
|
||||
</a>
|
||||
<div class="strip-divider"></div>
|
||||
<div class="strip-status">
|
||||
<div class="status-dot inactive" id="trackingDot"></div>
|
||||
@@ -1959,11 +1962,14 @@ ACARS: ${r.statistics.acarsMessages} messages`;
|
||||
setInterval(cleanupOldAircraft, 10000);
|
||||
checkAdsbTools();
|
||||
checkAircraftDatabase();
|
||||
checkDvbDriverConflict();
|
||||
|
||||
// Auto-connect to gpsd if available
|
||||
autoConnectGps();
|
||||
});
|
||||
checkDvbDriverConflict();
|
||||
|
||||
// Auto-connect to gpsd if available
|
||||
autoConnectGps();
|
||||
|
||||
// Sync tracking state if ADS-B already running
|
||||
syncTrackingStatus();
|
||||
});
|
||||
|
||||
// Track which device is being used for ADS-B tracking
|
||||
let adsbActiveDevice = null;
|
||||
@@ -2362,8 +2368,8 @@ sudo make install</code>
|
||||
return { host, port };
|
||||
}
|
||||
|
||||
async function toggleTracking() {
|
||||
const btn = document.getElementById('startBtn');
|
||||
async function toggleTracking() {
|
||||
const btn = document.getElementById('startBtn');
|
||||
|
||||
if (!isTracking) {
|
||||
// Check for remote dump1090 config
|
||||
@@ -2428,12 +2434,52 @@ sudo make install</code>
|
||||
document.getElementById('trackingDot').classList.add('inactive');
|
||||
document.getElementById('trackingStatus').textContent = 'STANDBY';
|
||||
// Re-enable ADS-B device selector
|
||||
document.getElementById('adsbDeviceSelect').disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
function startEventStream() {
|
||||
if (eventSource) eventSource.close();
|
||||
document.getElementById('adsbDeviceSelect').disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
async function syncTrackingStatus() {
|
||||
try {
|
||||
const response = await fetch('/adsb/session');
|
||||
if (!response.ok) {
|
||||
return;
|
||||
}
|
||||
const data = await response.json();
|
||||
if (!data.tracking_active) {
|
||||
return;
|
||||
}
|
||||
isTracking = true;
|
||||
startEventStream();
|
||||
drawRangeRings();
|
||||
const startBtn = document.getElementById('startBtn');
|
||||
startBtn.textContent = 'STOP';
|
||||
startBtn.classList.add('active');
|
||||
document.getElementById('trackingDot').classList.remove('inactive');
|
||||
document.getElementById('trackingStatus').textContent = 'TRACKING';
|
||||
document.getElementById('adsbDeviceSelect').disabled = true;
|
||||
|
||||
const session = data.session || {};
|
||||
const startTime = session.started_at ? Date.parse(session.started_at) : null;
|
||||
if (startTime) {
|
||||
stats.sessionStart = startTime;
|
||||
}
|
||||
startSessionTimer();
|
||||
|
||||
const sessionDevice = session.device_index;
|
||||
if (sessionDevice !== null && sessionDevice !== undefined) {
|
||||
adsbActiveDevice = sessionDevice;
|
||||
const adsbSelect = document.getElementById('adsbDeviceSelect');
|
||||
if (adsbSelect) {
|
||||
adsbSelect.value = sessionDevice;
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.warn('Failed to sync ADS-B tracking status', err);
|
||||
}
|
||||
}
|
||||
|
||||
function startEventStream() {
|
||||
if (eventSource) eventSource.close();
|
||||
|
||||
console.log('Starting ADS-B event stream...');
|
||||
eventSource = new EventSource('/adsb/stream');
|
||||
|
||||
Reference in New Issue
Block a user