Browse Source

create a struct for stats collection

git.mgm/mediaproxy-ng/2.2
Richard Fuchs 13 years ago
parent
commit
267252542b
1 changed files with 15 additions and 13 deletions
  1. +15
    -13
      daemon/call.c

+ 15
- 13
daemon/call.c View File

@ -80,6 +80,11 @@ struct callmaster {
struct callmaster_config conf;
};
struct call_stats {
time_t newest;
struct stats totals[4]; /* rtp in, rtcp in, rtp out, rtcp out */
};
static char *rtp_codecs[] = {
[0] = "G711u",
[1] = "1016",
@ -1950,12 +1955,12 @@ str *call_delete_udp(char **out, struct callmaster *m) {
}
#define SSUM(x) \
totals[0].x += p->rtps[0].stats.x; \
totals[1].x += p->rtps[1].stats.x; \
totals[2].x += px->rtps[0].stats.x; \
totals[3].x += px->rtps[1].stats.x
stats->totals[0].x += p->rtps[0].stats.x; \
stats->totals[1].x += p->rtps[1].stats.x; \
stats->totals[2].x += px->rtps[0].stats.x; \
stats->totals[3].x += px->rtps[1].stats.x
/* call must be locked */
static void stats_query(struct call *call, str *fromtag, str *totag, struct stats *totals,
static void stats_query(struct call *call, str *fromtag, str *totag, struct call_stats *stats,
void (*cb)(struct peer *, struct peer *, void *), void *arg)
{
GList *l;
@ -1963,10 +1968,7 @@ static void stats_query(struct call *call, str *fromtag, str *totag, struct stat
int i;
struct peer *p, *px;
ZERO(totals[0]); /* rtp in */
ZERO(totals[1]); /* rtcp in */
ZERO(totals[2]); /* rtp out */
ZERO(totals[3]); /* rtcp out */
ZERO(*stats);
for (l = call->callstreams->head; l; l = l->next) {
cs = l->data;
@ -2455,7 +2457,7 @@ const char *call_query_ng(bencode_item_t *input, struct callmaster *m, bencode_i
str callid, fromtag, totag;
struct call *call;
bencode_item_t *streams, *dict;
struct stats totals[4];
struct call_stats stats;
if (!bencode_dictionary_get_str(input, "call-id", &callid))
return "No call-id in message";
@ -2469,13 +2471,13 @@ const char *call_query_ng(bencode_item_t *input, struct callmaster *m, bencode_i
bencode_dictionary_add_integer(output, "created", call->created);
streams = bencode_dictionary_add_list(output, "streams");
stats_query(call, &fromtag, &totag, totals, ng_stats_cb, streams);
stats_query(call, &fromtag, &totag, &stats, ng_stats_cb, streams);
mutex_unlock(&call->lock);
dict = bencode_dictionary_add_dictionary(output, "totals");
bencode_dictionary_add(dict, "input", rtp_rtcp_stats(output->buffer, &totals[0], &totals[1]));
bencode_dictionary_add(dict, "output", rtp_rtcp_stats(output->buffer, &totals[2], &totals[3]));
bencode_dictionary_add(dict, "input", rtp_rtcp_stats(output->buffer, &stats.totals[0], &stats.totals[1]));
bencode_dictionary_add(dict, "output", rtp_rtcp_stats(output->buffer, &stats.totals[2], &stats.totals[3]));
return NULL;
}

Loading…
Cancel
Save