Collect stats on messages received by DF type

This commit is contained in:
Oliver Jowett 2021-02-04 16:33:26 +08:00
parent 11fb727325
commit 6a11387861
4 changed files with 23 additions and 3 deletions

View File

@ -2142,6 +2142,9 @@ void useModesMessage(struct modesMessage *mm) {
struct aircraft *a;
++Modes.stats_current.messages_total;
if (mm->msgtype >= 0 && mm->msgtype < 32) {
++Modes.stats_current.messages_by_df[mm->msgtype];
}
// Track aircraft state
a = trackUpdateFromMessage(mm);

View File

@ -1791,7 +1791,7 @@ static char * appendStatsJson(char *p,
",\"tracks\":{\"all\":%u"
",\"single_message\":%u"
",\"unreliable\":%u}"
",\"messages\":%u}",
",\"messages\":%u",
st->cpr_surface,
st->cpr_airborne,
st->cpr_global_ok,
@ -1813,7 +1813,15 @@ static char * appendStatsJson(char *p,
st->unique_aircraft,
st->single_message_aircraft,
st->unreliable_aircraft,
st->messages_total);
st->messages_total);
for (i = 0; i < 32; ++i) {
if (i == 0)
p = safe_snprintf(p, end, ",\"messages_by_df\":[%u", st->messages_by_df[i]);
else
p = safe_snprintf(p, end, ",%u", st->messages_by_df[i]);
}
p = safe_snprintf(p, end, "]}");
}
return p;

View File

@ -125,9 +125,14 @@ void display_stats(struct stats *st) {
printf(" %8u accepted with %d-bit error repaired\n", st->remote_accepted[j], j);
}
printf("%u total usable messages\n",
printf("%8u total usable messages\n",
st->messages_total);
for (unsigned i = 0; i < 32; ++i) {
if (st->messages_by_df[i])
printf(" %8u DF%u messages\n", st->messages_by_df[i], i);
}
printf("%8u surface position messages received\n"
"%8u airborne position messages received\n"
"%8u global CPR attempts with valid positions\n"
@ -310,6 +315,8 @@ void add_stats(const struct stats *st1, const struct stats *st2, struct stats *t
// total messages:
target->messages_total = st1->messages_total + st2->messages_total;
for (i = 0; i < 32; ++i)
target->messages_by_df[i] = st1->messages_by_df[i] + st2->messages_by_df[i];
// CPR decoding:
target->cpr_surface = st1->cpr_surface + st2->cpr_surface;

View File

@ -94,6 +94,8 @@ struct stats {
// total messages:
uint32_t messages_total;
// .. divided by DF
uint32_t messages_by_df[32];
// CPR decoding:
unsigned int cpr_surface;