|
|
@ -2351,6 +2351,26 @@ static void ng_stats_endpoint(bencode_item_t *dict, const endpoint_t *ep) { |
|
|
bencode_dictionary_add_integer(dict, "port", ep->port); |
|
|
bencode_dictionary_add_integer(dict, "port", ep->port); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void ng_stats_stream_ssrc(bencode_item_t *dict, struct ssrc_ctx *const ssrcs[RTPE_NUM_SSRC_TRACKING], |
|
|
|
|
|
const char *label) |
|
|
|
|
|
{ |
|
|
|
|
|
bencode_item_t *list = bencode_dictionary_add_list(dict, label); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < RTPE_NUM_SSRC_TRACKING; i++) { |
|
|
|
|
|
struct ssrc_ctx *c = ssrcs[i]; |
|
|
|
|
|
if (!c) |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
bencode_item_t *ssrc = bencode_list_add_dictionary(list); |
|
|
|
|
|
|
|
|
|
|
|
bencode_dictionary_add_integer(ssrc, "SSRC", ssrcs[i]->parent->h.ssrc); |
|
|
|
|
|
bencode_dictionary_add_integer(ssrc, "bytes", atomic64_get_na(&c->octets)); |
|
|
|
|
|
bencode_dictionary_add_integer(ssrc, "packets", atomic64_get_na(&c->packets)); |
|
|
|
|
|
bencode_dictionary_add_integer(ssrc, "last RTP timestamp", atomic64_get_na(&c->last_ts)); |
|
|
|
|
|
bencode_dictionary_add_integer(ssrc, "last RTP seq", atomic64_get_na(&c->last_seq)); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
#define BF_PS(k, f) if (PS_ISSET(ps, f)) bencode_list_add_string(flags, k) |
|
|
#define BF_PS(k, f) if (PS_ISSET(ps, f)) bencode_list_add_string(flags, k) |
|
|
|
|
|
|
|
|
static void ng_stats_stream(bencode_item_t *list, const struct packet_stream *ps, |
|
|
static void ng_stats_stream(bencode_item_t *list, const struct packet_stream *ps, |
|
|
@ -2392,9 +2412,8 @@ static void ng_stats_stream(bencode_item_t *list, const struct packet_stream *ps |
|
|
BF_PS("media handover", MEDIA_HANDOVER); |
|
|
BF_PS("media handover", MEDIA_HANDOVER); |
|
|
BF_PS("ICE", ICE); |
|
|
BF_PS("ICE", ICE); |
|
|
|
|
|
|
|
|
// XXX convert to list output? |
|
|
|
|
|
if (ps->ssrc_in[0]) |
|
|
|
|
|
bencode_dictionary_add_integer(dict, "SSRC", ps->ssrc_in[0]->parent->h.ssrc); |
|
|
|
|
|
|
|
|
ng_stats_stream_ssrc(dict, ps->ssrc_in, "ingress SSRCs"); |
|
|
|
|
|
ng_stats_stream_ssrc(dict, ps->ssrc_out, "egress SSRCs"); |
|
|
|
|
|
|
|
|
stats: |
|
|
stats: |
|
|
if (totals->last_packet < atomic64_get(&ps->last_packet)) |
|
|
if (totals->last_packet < atomic64_get(&ps->last_packet)) |
|
|
|