speed up history loading
the reaper removes any aircraft and their tracks when they haven't been seen for reapTimeout (was 5 min, now 8 min) thus parse the history starting from the present and build a list of aircraft that the reaper won't remove in the present ignore aircraft not on that list when parsing the history
This commit is contained in:
@@ -135,6 +135,7 @@ let lastRequestBox = '';
|
||||
let nextQuerySelected = 0;
|
||||
let enableDynamicCachebusting = false;
|
||||
let lastRefreshInt = 1000;
|
||||
let reapTimeout = globeIndex ? 240 : 480;
|
||||
|
||||
|
||||
let baroCorrectQNH = 1013.25;
|
||||
@@ -187,12 +188,15 @@ let badDotMlat;
|
||||
let showingReplayBar = false;
|
||||
|
||||
function processAircraft(ac, init, uat) {
|
||||
let isArray = Array.isArray(ac);
|
||||
let hex = isArray ? ac[0] : ac.hex;
|
||||
let hex = Array.isArray(ac) ? ac[0] : ac.hex;
|
||||
|
||||
if (icaoFilter && !icaoFilter.includes(hex))
|
||||
return;
|
||||
|
||||
if (g.historyKeep && !g.historyKeep[hex]) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (uat && uatNoTISB && ac.type && ac.type.substring(0,4) == "tisb") {
|
||||
// drop non ADS-B planes from UAT (TIS-B)
|
||||
return;
|
||||
@@ -1816,11 +1820,37 @@ function parseHistory() {
|
||||
console.log(localTime(new Date()) + " Sorting history: " + PositionHistoryBuffer.length);
|
||||
PositionHistoryBuffer.sort(function(x,y) { return (y.now - x.now); });
|
||||
|
||||
let currentTime = new Date().getTime()/1000;
|
||||
|
||||
if (!pTracks) {
|
||||
// get all planes within the reapTimeout
|
||||
g.historyKeep = {};
|
||||
for (let i = 0; i < PositionHistoryBuffer.length; i++) {
|
||||
let data = PositionHistoryBuffer[i];
|
||||
if (currentTime - data.now > reapTimeout) {
|
||||
break;
|
||||
}
|
||||
for (let j=0; j < data.aircraft.length; j++) {
|
||||
const ac = data.aircraft[j];
|
||||
const isArray = Array.isArray(ac);
|
||||
const hex = isArray ? ac[0] : ac.hex;
|
||||
const seen = isArray ? ac[6] : ac.seen;
|
||||
if (currentTime - (data.now - seen) < reapTimeout) {
|
||||
g.historyKeep[hex] = 1;
|
||||
}
|
||||
}
|
||||
//console.log("hist: " + localTime(new Date(data.now * 1000)));
|
||||
}
|
||||
for (let i in g.planesOrdered) {
|
||||
let hex = g.planesOrdered[i].icao;
|
||||
g.historyKeep[hex] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Process history
|
||||
let data;
|
||||
let h = 0;
|
||||
let pruneInt = 100;
|
||||
let currentTime = new Date().getTime()/1000;
|
||||
let lastTimestamp = 0;
|
||||
let counter = 0;
|
||||
|
||||
@@ -1857,14 +1887,14 @@ function parseHistory() {
|
||||
if (h == 1 || h % pruneInt == 0 || PositionHistoryBuffer.length == 0) {
|
||||
console.log("Apply History " + String(counter).padStart(4) + " from: "
|
||||
+ localTime(new Date(data.now * 1000)));
|
||||
|
||||
}
|
||||
if (h % pruneInt == 0) {
|
||||
// prune aircraft list
|
||||
reaper();
|
||||
}
|
||||
}
|
||||
|
||||
// only restrict aircraft process to this list while parsing history
|
||||
g.historyKeep = null;
|
||||
|
||||
reaper();
|
||||
|
||||
// Final pass to update all planes to their latest state
|
||||
//console.log("Final history cleanup pass");
|
||||
for (let i in g.planesOrdered) {
|
||||
@@ -2923,7 +2953,7 @@ function reaper(all) {
|
||||
continue;
|
||||
plane.seen = now - plane.last_message_time;
|
||||
if ( all || ((!plane.selected)
|
||||
&& plane.seen > 300
|
||||
&& plane.seen > reapTimeout
|
||||
&& (plane.dataSource != 'adsc' || plane.seen > jaeroTimeout))
|
||||
) {
|
||||
// Reap it.
|
||||
|
||||
Reference in New Issue
Block a user