Add stats for total aircraft tracks and tracks that have only a single message.

This commit is contained in:
Oliver Jowett 2015-02-08 18:47:39 +00:00
parent f1201a0069
commit a49b5b8830
5 changed files with 30 additions and 0 deletions

View file

@ -109,4 +109,9 @@ Each period has the following subkeys:
* local_ok: local (relative) positions successfully found * local_ok: local (relative) positions successfully found
* local_skipped: local (relative) positions not used because we did not have the right data (e.g. position was ambiguous given the receiver range) * local_skipped: local (relative) positions not used because we did not have the right data (e.g. position was ambiguous given the receiver range)
* filtered: number of CPR messages ignored because they matched one of the heuristics for faulty transponder output * filtered: number of CPR messages ignored because they matched one of the heuristics for faulty transponder output
* tracks: statistics on aircraft tracks. Each track represents a unique aircraft and persists for up to 5 minutes after the last message
from the aircraft is heard. If messages from the same aircraft are subsequently heard after the 5 minute period, this will be counted
as a new track.
* all: total tracks created
* single_message: tracks consisting of only a single message. These are usually due to message decoding errors that produce a bad aircraft address.
* messages: total number of messages accepted by dump1090 from any source * messages: total number of messages accepted by dump1090 from any source

View file

@ -887,6 +887,8 @@ static char * appendStatsJson(char *p,
",\"local_skipped\":%u" ",\"local_skipped\":%u"
",\"filtered\":%u}" ",\"filtered\":%u}"
",\"cpu\":{\"demod\":%llu,\"reader\":%llu,\"background\":%llu}" ",\"cpu\":{\"demod\":%llu,\"reader\":%llu,\"background\":%llu}"
",\"tracks\":{\"all\":%u"
",\"single_message\":%u}"
",\"messages\":%u}", ",\"messages\":%u}",
st->cpr_global_ok, st->cpr_global_ok,
st->cpr_global_bad, st->cpr_global_bad,
@ -897,6 +899,8 @@ static char * appendStatsJson(char *p,
(unsigned long long)demod_cpu_millis, (unsigned long long)demod_cpu_millis,
(unsigned long long)reader_cpu_millis, (unsigned long long)reader_cpu_millis,
(unsigned long long)background_cpu_millis, (unsigned long long)background_cpu_millis,
st->unique_aircraft,
st->single_message_aircraft,
st->messages_total); st->messages_total);
} }

View file

@ -132,6 +132,9 @@ void display_stats(struct stats *st) {
st->cpr_local_skipped, st->cpr_local_skipped,
st->cpr_filtered); st->cpr_filtered);
printf("%u unique aircraft tracks\n", st->unique_aircraft);
printf("%u aircraft tracks where only one message was seen\n", st->single_message_aircraft);
if (Modes.net && Modes.net_http_port) if (Modes.net && Modes.net_http_port)
printf("%d HTTP requests\n", st->http_requests); printf("%d HTTP requests\n", st->http_requests);
@ -150,6 +153,7 @@ void display_stats(struct stats *st) {
(unsigned long long) background_cpu_millis); (unsigned long long) background_cpu_millis);
} }
fflush(stdout); fflush(stdout);
} }
@ -224,5 +228,9 @@ void add_stats(const struct stats *st1, const struct stats *st2, struct stats *t
target->cpr_local_ok = st1->cpr_local_ok + st2->cpr_local_ok; target->cpr_local_ok = st1->cpr_local_ok + st2->cpr_local_ok;
target->cpr_local_skipped = st1->cpr_local_skipped + st2->cpr_local_skipped; target->cpr_local_skipped = st1->cpr_local_skipped + st2->cpr_local_skipped;
target->cpr_filtered = st1->cpr_filtered + st2->cpr_filtered; target->cpr_filtered = st1->cpr_filtered + st2->cpr_filtered;
// aircraft
target->unique_aircraft = st1->unique_aircraft + st2->unique_aircraft;
target->single_message_aircraft = st1->single_message_aircraft + st2->single_message_aircraft;
} }

View file

@ -105,6 +105,12 @@ struct stats {
unsigned int cpr_local_ok; unsigned int cpr_local_ok;
unsigned int cpr_local_skipped; unsigned int cpr_local_skipped;
unsigned int cpr_filtered; unsigned int cpr_filtered;
// aircraft:
// total "new" aircraft (i.e. not seen in the last 30 or 300s)
unsigned int unique_aircraft;
// we saw only a single message
unsigned int single_message_aircraft;
}; };
void add_stats(const struct stats *st1, const struct stats *st2, struct stats *target); void add_stats(const struct stats *st1, const struct stats *st2, struct stats *target);

View file

@ -84,6 +84,8 @@ struct aircraft *trackCreateAircraft(struct modesMessage *mm) {
// Copy the first message so we can emit it later when a second message arrives. // Copy the first message so we can emit it later when a second message arrives.
a->first_message = *mm; a->first_message = *mm;
Modes.stats_current.unique_aircraft++;
return (a); return (a);
} }
@ -490,6 +492,11 @@ static void trackRemoveStaleAircraft(time_t now)
while(a) { while(a) {
if ((now - a->seen) > TRACK_AIRCRAFT_TTL || if ((now - a->seen) > TRACK_AIRCRAFT_TTL ||
(a->messages == 1 && (now - a->seen) > TRACK_AIRCRAFT_ONEHIT_TTL)) { (a->messages == 1 && (now - a->seen) > TRACK_AIRCRAFT_ONEHIT_TTL)) {
// Count aircraft where we saw only one message before reaping them.
// These are likely to be due to messages with bad addresses.
if (a->messages == 1)
Modes.stats_current.single_message_aircraft++;
// Remove the element from the linked list, with care // Remove the element from the linked list, with care
// if we are removing the first element // if we are removing the first element
if (!prev) { if (!prev) {