Compare commits
No commits in common. "ec676f678affd49f5fbdbc87de734dfdffedffc8" and "0db12a1ddc6dd1ff6e9c17cd30fc99a5629537b9" have entirely different histories.
ec676f678a
...
0db12a1ddc
8 changed files with 74 additions and 125 deletions
|
|
@ -53,7 +53,6 @@
|
||||||
<!-- Summary stats -->
|
<!-- Summary stats -->
|
||||||
<div class="stats-summary">
|
<div class="stats-summary">
|
||||||
<span id="aircraft-count">0 aircraft</span>
|
<span id="aircraft-count">0 aircraft</span>
|
||||||
<span id="position-summary">0 positioned</span>
|
|
||||||
<span id="sources-count">0 sources</span>
|
<span id="sources-count">0 sources</span>
|
||||||
<span id="active-clients">1 viewer</span>
|
<span id="active-clients">1 viewer</span>
|
||||||
<span id="connection-status" class="connection-status disconnected">Connecting...</span>
|
<span id="connection-status" class="connection-status disconnected">Connecting...</span>
|
||||||
|
|
@ -209,14 +208,6 @@
|
||||||
<h3>Max Range</h3>
|
<h3>Max Range</h3>
|
||||||
<div class="stat-value" id="max-range">0 km</div>
|
<div class="stat-value" id="max-range">0 km</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card">
|
|
||||||
<h3>Aircraft with Position</h3>
|
|
||||||
<div class="stat-value" id="aircraft-with-position">0</div>
|
|
||||||
</div>
|
|
||||||
<div class="stat-card">
|
|
||||||
<h3>Aircraft without Position</h3>
|
|
||||||
<div class="stat-value" id="aircraft-without-position">0</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Charts -->
|
<!-- Charts -->
|
||||||
|
|
|
||||||
|
|
@ -244,8 +244,6 @@ export class UIManager {
|
||||||
const activeViewersEl = document.getElementById('active-viewers');
|
const activeViewersEl = document.getElementById('active-viewers');
|
||||||
const maxRangeEl = document.getElementById('max-range');
|
const maxRangeEl = document.getElementById('max-range');
|
||||||
const messagesSecEl = document.getElementById('messages-sec');
|
const messagesSecEl = document.getElementById('messages-sec');
|
||||||
const aircraftWithPositionEl = document.getElementById('aircraft-with-position');
|
|
||||||
const aircraftWithoutPositionEl = document.getElementById('aircraft-without-position');
|
|
||||||
|
|
||||||
if (totalAircraftEl) totalAircraftEl.textContent = this.aircraftData.size;
|
if (totalAircraftEl) totalAircraftEl.textContent = this.aircraftData.size;
|
||||||
if (activeSourcesEl) {
|
if (activeSourcesEl) {
|
||||||
|
|
@ -255,14 +253,6 @@ export class UIManager {
|
||||||
activeViewersEl.textContent = this.stats.active_clients || 1;
|
activeViewersEl.textContent = this.stats.active_clients || 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update position tracking statistics from backend
|
|
||||||
if (aircraftWithPositionEl) {
|
|
||||||
aircraftWithPositionEl.textContent = this.stats.aircraft_with_position || 0;
|
|
||||||
}
|
|
||||||
if (aircraftWithoutPositionEl) {
|
|
||||||
aircraftWithoutPositionEl.textContent = this.stats.aircraft_without_position || 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate max range
|
// Calculate max range
|
||||||
let maxDistance = 0;
|
let maxDistance = 0;
|
||||||
for (const aircraft of this.aircraftData.values()) {
|
for (const aircraft of this.aircraftData.values()) {
|
||||||
|
|
@ -280,18 +270,10 @@ export class UIManager {
|
||||||
|
|
||||||
updateHeaderInfo() {
|
updateHeaderInfo() {
|
||||||
const aircraftCountEl = document.getElementById('aircraft-count');
|
const aircraftCountEl = document.getElementById('aircraft-count');
|
||||||
const positionSummaryEl = document.getElementById('position-summary');
|
|
||||||
const sourcesCountEl = document.getElementById('sources-count');
|
const sourcesCountEl = document.getElementById('sources-count');
|
||||||
const activeClientsEl = document.getElementById('active-clients');
|
const activeClientsEl = document.getElementById('active-clients');
|
||||||
|
|
||||||
if (aircraftCountEl) aircraftCountEl.textContent = `${this.aircraftData.size} aircraft`;
|
if (aircraftCountEl) aircraftCountEl.textContent = `${this.aircraftData.size} aircraft`;
|
||||||
|
|
||||||
// Update position summary in header
|
|
||||||
if (positionSummaryEl) {
|
|
||||||
const positioned = this.stats.aircraft_with_position || 0;
|
|
||||||
positionSummaryEl.textContent = `${positioned} positioned`;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sourcesCountEl) sourcesCountEl.textContent = `${this.sourcesData.size} sources`;
|
if (sourcesCountEl) sourcesCountEl.textContent = `${this.sourcesData.size} sources`;
|
||||||
|
|
||||||
// Update active clients count
|
// Update active clients count
|
||||||
|
|
|
||||||
11
debian/DEBIAN/prerm
vendored
11
debian/DEBIAN/prerm
vendored
|
|
@ -2,8 +2,8 @@
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
remove|deconfigure)
|
remove|upgrade|deconfigure)
|
||||||
# Stop and disable the service on removal
|
# Stop and disable the service
|
||||||
if systemctl is-active --quiet skyview-adsb.service; then
|
if systemctl is-active --quiet skyview-adsb.service; then
|
||||||
systemctl stop skyview-adsb.service
|
systemctl stop skyview-adsb.service
|
||||||
fi
|
fi
|
||||||
|
|
@ -12,13 +12,6 @@ case "$1" in
|
||||||
systemctl disable skyview-adsb.service
|
systemctl disable skyview-adsb.service
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
upgrade)
|
|
||||||
# Only stop service during upgrade, preserve enabled state
|
|
||||||
if systemctl is-active --quiet skyview-adsb.service; then
|
|
||||||
systemctl stop skyview-adsb.service
|
|
||||||
fi
|
|
||||||
# Don't disable - postinst will restart if service was enabled
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
@ -795,13 +795,10 @@ func (m *Merger) GetSources() []*Source {
|
||||||
//
|
//
|
||||||
// The statistics include:
|
// The statistics include:
|
||||||
// - total_aircraft: Current number of tracked aircraft
|
// - total_aircraft: Current number of tracked aircraft
|
||||||
// - aircraft_with_position: Number of aircraft with valid position data
|
|
||||||
// - aircraft_without_position: Number of aircraft without position data
|
|
||||||
// - total_messages: Sum of all messages processed
|
// - total_messages: Sum of all messages processed
|
||||||
// - active_sources: Number of currently connected sources
|
// - active_sources: Number of currently connected sources
|
||||||
// - aircraft_by_sources: Distribution of aircraft by number of tracking sources
|
// - aircraft_by_sources: Distribution of aircraft by number of tracking sources
|
||||||
//
|
//
|
||||||
// The position statistics help assess data quality and tracking effectiveness.
|
|
||||||
// The aircraft_by_sources map shows data quality - aircraft tracked by
|
// The aircraft_by_sources map shows data quality - aircraft tracked by
|
||||||
// multiple sources generally have better position accuracy and reliability.
|
// multiple sources generally have better position accuracy and reliability.
|
||||||
//
|
//
|
||||||
|
|
@ -813,22 +810,11 @@ func (m *Merger) GetStatistics() map[string]interface{} {
|
||||||
totalMessages := int64(0)
|
totalMessages := int64(0)
|
||||||
activeSources := 0
|
activeSources := 0
|
||||||
aircraftBySources := make(map[int]int) // Count by number of sources
|
aircraftBySources := make(map[int]int) // Count by number of sources
|
||||||
aircraftWithPosition := 0
|
|
||||||
aircraftWithoutPosition := 0
|
|
||||||
|
|
||||||
for _, state := range m.aircraft {
|
for _, state := range m.aircraft {
|
||||||
totalMessages += state.TotalMessages
|
totalMessages += state.TotalMessages
|
||||||
numSources := len(state.Sources)
|
numSources := len(state.Sources)
|
||||||
aircraftBySources[numSources]++
|
aircraftBySources[numSources]++
|
||||||
|
|
||||||
// Check if aircraft has valid position data
|
|
||||||
if state.Aircraft.PositionValid &&
|
|
||||||
state.Aircraft.Latitude != 0.0 &&
|
|
||||||
state.Aircraft.Longitude != 0.0 {
|
|
||||||
aircraftWithPosition++
|
|
||||||
} else {
|
|
||||||
aircraftWithoutPosition++
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, src := range m.sources {
|
for _, src := range m.sources {
|
||||||
|
|
@ -839,8 +825,6 @@ func (m *Merger) GetStatistics() map[string]interface{} {
|
||||||
|
|
||||||
return map[string]interface{}{
|
return map[string]interface{}{
|
||||||
"total_aircraft": len(m.aircraft),
|
"total_aircraft": len(m.aircraft),
|
||||||
"aircraft_with_position": aircraftWithPosition,
|
|
||||||
"aircraft_without_position": aircraftWithoutPosition,
|
|
||||||
"total_messages": totalMessages,
|
"total_messages": totalMessages,
|
||||||
"active_sources": activeSources,
|
"active_sources": activeSources,
|
||||||
"aircraft_by_sources": aircraftBySources,
|
"aircraft_by_sources": aircraftBySources,
|
||||||
|
|
|
||||||
|
|
@ -614,7 +614,6 @@ func (d *Decoder) decodeCPRPosition(aircraft *Aircraft) {
|
||||||
}
|
}
|
||||||
|
|
||||||
aircraft.Longitude = lon
|
aircraft.Longitude = lon
|
||||||
aircraft.PositionValid = true
|
|
||||||
|
|
||||||
// CPR decoding completed successfully
|
// CPR decoding completed successfully
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue