Display message rate (30 sec average) on the webmap.
(cherry picked from commit 848af78be685c6e2a26d0b30e9f385696201a2c4)
This commit is contained in:
parent
41d8a79041
commit
72bfc31458
|
@ -604,8 +604,8 @@ static void display_stats(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("%d total usable messages\n",
|
printf("%d total usable messages\n",
|
||||||
Modes.stat_demod.goodcrc + Modes.stat_demod_phasecorrected.goodcrc +
|
Modes.stat_messages_total);
|
||||||
Modes.stat_demod.fixed + Modes.stat_demod_phasecorrected.fixed);
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
Modes.stat_cputime.tv_sec = 0;
|
Modes.stat_cputime.tv_sec = 0;
|
||||||
|
@ -622,6 +622,8 @@ static void display_stats(void) {
|
||||||
Modes.stat_DF_Type_Corrected =
|
Modes.stat_DF_Type_Corrected =
|
||||||
Modes.stat_out_of_phase = 0;
|
Modes.stat_out_of_phase = 0;
|
||||||
|
|
||||||
|
Modes.stat_messages_total = 0;
|
||||||
|
|
||||||
for (j = 0; j < MODES_MAX_PHASE_STATS; j++) {
|
for (j = 0; j < MODES_MAX_PHASE_STATS; j++) {
|
||||||
Modes.stat_preamble_phase[j] = 0;
|
Modes.stat_preamble_phase[j] = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -394,6 +394,9 @@ struct { // Internal state
|
||||||
unsigned int stat_blocks_dropped;
|
unsigned int stat_blocks_dropped;
|
||||||
|
|
||||||
struct timespec stat_cputime;
|
struct timespec stat_cputime;
|
||||||
|
|
||||||
|
// total messages:
|
||||||
|
unsigned int stat_messages_total;
|
||||||
} Modes;
|
} Modes;
|
||||||
|
|
||||||
// The struct we use to store information about a decoded message.
|
// The struct we use to store information about a decoded message.
|
||||||
|
|
2
mode_s.c
2
mode_s.c
|
@ -2381,6 +2381,8 @@ void detectModeS_oversample(uint16_t *m, uint32_t mlen) {
|
||||||
//
|
//
|
||||||
void useModesMessage(struct modesMessage *mm) {
|
void useModesMessage(struct modesMessage *mm) {
|
||||||
if ((Modes.check_crc == 0) || (mm->crcok) || (mm->correctedbits)) { // not checking, ok or fixed
|
if ((Modes.check_crc == 0) || (mm->crcok) || (mm->correctedbits)) { // not checking, ok or fixed
|
||||||
|
++Modes.stat_messages_total;
|
||||||
|
|
||||||
// If we are decoding, track aircraft
|
// If we are decoding, track aircraft
|
||||||
interactiveReceiveData(mm);
|
interactiveReceiveData(mm);
|
||||||
|
|
||||||
|
|
3
net_io.c
3
net_io.c
|
@ -676,8 +676,9 @@ char *generateAircraftJson(int *len) {
|
||||||
|
|
||||||
p += snprintf(p, end-p,
|
p += snprintf(p, end-p,
|
||||||
"{ \"now\" : %d,\n"
|
"{ \"now\" : %d,\n"
|
||||||
|
" \"messages\" : %u,\n"
|
||||||
" \"aircraft\" : [",
|
" \"aircraft\" : [",
|
||||||
(int)now);
|
(int)now, Modes.stat_messages_total);
|
||||||
|
|
||||||
while(a) {
|
while(a) {
|
||||||
if (a->modeACflags & MODEAC_MSG_FLAG) { // skip any fudged ICAO records Mode A/C
|
if (a->modeACflags & MODEAC_MSG_FLAG) { // skip any fudged ICAO records Mode A/C
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
|
|
||||||
<tr class="infoblock_body">
|
<tr class="infoblock_body">
|
||||||
<td>Aircraft (total): <span id="dump1090_total_ac">n/a</span></td>
|
<td>Aircraft (total): <span id="dump1090_total_ac">n/a</span></td>
|
||||||
<td> </td>
|
<td>Messages: <span id="dump1090_message_rate">n/a</span>/sec</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr class="infoblock_body">
|
<tr class="infoblock_body">
|
||||||
|
|
|
@ -36,6 +36,8 @@ var LastReceiverTimestamp = null;
|
||||||
var StaleReceiverCount = 0;
|
var StaleReceiverCount = 0;
|
||||||
var FetchPending = null;
|
var FetchPending = null;
|
||||||
|
|
||||||
|
var MessageCountHistory = [];
|
||||||
|
|
||||||
var NBSP='\u00a0';
|
var NBSP='\u00a0';
|
||||||
var DEGREES='\u00b0'
|
var DEGREES='\u00b0'
|
||||||
|
|
||||||
|
@ -53,6 +55,19 @@ function fetchData() {
|
||||||
// Loop through all the planes in the data packet
|
// Loop through all the planes in the data packet
|
||||||
var now = data.now;
|
var now = data.now;
|
||||||
var acs = data.aircraft;
|
var acs = data.aircraft;
|
||||||
|
|
||||||
|
// Detect stats reset
|
||||||
|
if (MessageCountHistory.length > 0 && MessageCountHistory[MessageCountHistory.length-1].messages > data.messages) {
|
||||||
|
MessageCountHistory = [{'time' : MessageCountHistory[MessageCountHistory.length-1].time,
|
||||||
|
'messages' : 0}];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note the message count in the history
|
||||||
|
MessageCountHistory.push({ 'time' : now, 'messages' : data.messages});
|
||||||
|
// .. and clean up any old values
|
||||||
|
if ((now - MessageCountHistory[0].time) > 30)
|
||||||
|
MessageCountHistory.shift();
|
||||||
|
|
||||||
for (var j=0; j < acs.length; j++) {
|
for (var j=0; j < acs.length; j++) {
|
||||||
var ac = acs[j];
|
var ac = acs[j];
|
||||||
var hex = ac.hex;
|
var hex = ac.hex;
|
||||||
|
@ -460,6 +475,20 @@ function refreshSelected() {
|
||||||
$('#dump1090_total_ac').text(TrackedAircraft);
|
$('#dump1090_total_ac').text(TrackedAircraft);
|
||||||
$('#dump1090_total_ac_positions').text(TrackedAircraftPositions);
|
$('#dump1090_total_ac_positions').text(TrackedAircraftPositions);
|
||||||
$('#dump1090_total_history').text(TrackedHistorySize);
|
$('#dump1090_total_history').text(TrackedHistorySize);
|
||||||
|
|
||||||
|
var message_rate = null;
|
||||||
|
if (MessageCountHistory.length > 1) {
|
||||||
|
var message_time_delta = MessageCountHistory[MessageCountHistory.length-1].time - MessageCountHistory[0].time;
|
||||||
|
var message_count_delta = MessageCountHistory[MessageCountHistory.length-1].messages - MessageCountHistory[0].messages;
|
||||||
|
if (message_time_delta > 0)
|
||||||
|
message_rate = message_count_delta / message_time_delta;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message_rate !== null)
|
||||||
|
$('#dump1090_message_rate').text(message_rate.toFixed(1));
|
||||||
|
else
|
||||||
|
$('#dump1090_message_rate').text("n/a");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue