Browse Source

move stats and statsps into global scope

Change-Id: I02d16e31f8980bd0ef3ff3a190b23dc61c087018
pull/432/merge
Richard Fuchs 8 years ago
parent
commit
c969ea1e57
7 changed files with 27 additions and 26 deletions
  1. +10
    -7
      daemon/call.c
  2. +3
    -3
      daemon/call.h
  3. +2
    -2
      daemon/call_interfaces.c
  4. +2
    -2
      daemon/cli.c
  5. +1
    -1
      daemon/graphite.c
  6. +5
    -7
      daemon/media_socket.c
  7. +4
    -4
      daemon/statistics.c

+ 10
- 7
daemon/call.c View File

@ -116,6 +116,9 @@ const struct transport_protocol transport_protocols[] = {
}; };
const int num_transport_protocols = G_N_ELEMENTS(transport_protocols); const int num_transport_protocols = G_N_ELEMENTS(transport_protocols);
/* XXX rework these */
struct stats rtpe_statsps;
struct stats rtpe_stats;
rwlock_t rtpe_callhash_lock; rwlock_t rtpe_callhash_lock;
GHashTable *rtpe_callhash; GHashTable *rtpe_callhash;
@ -463,7 +466,7 @@ destroy:
else \ else \
d = ke->stats.x - ks_val; \ d = ke->stats.x - ks_val; \
atomic64_add(&ps->stats.x, d); \ atomic64_add(&ps->stats.x, d); \
atomic64_add(&m->statsps.x, d); \
atomic64_add(&rtpe_statsps.x, d); \
} while (0) } while (0)
static void callmaster_timer(void *ptr) { static void callmaster_timer(void *ptr) {
struct callmaster *m = ptr; struct callmaster *m = ptr;
@ -495,13 +498,13 @@ static void callmaster_timer(void *ptr) {
g_list_foreach(calls, call_timer_iterator, &hlp); g_list_foreach(calls, call_timer_iterator, &hlp);
g_list_free_full(calls, call_obj_put); g_list_free_full(calls, call_obj_put);
} }
atomic64_local_copy_zero_struct(&tmpstats, &m->statsps, bytes);
atomic64_local_copy_zero_struct(&tmpstats, &m->statsps, packets);
atomic64_local_copy_zero_struct(&tmpstats, &m->statsps, errors);
atomic64_local_copy_zero_struct(&tmpstats, &rtpe_statsps, bytes);
atomic64_local_copy_zero_struct(&tmpstats, &rtpe_statsps, packets);
atomic64_local_copy_zero_struct(&tmpstats, &rtpe_statsps, errors);
atomic64_set(&m->stats.bytes, atomic64_get_na(&tmpstats.bytes));
atomic64_set(&m->stats.packets, atomic64_get_na(&tmpstats.packets));
atomic64_set(&m->stats.errors, atomic64_get_na(&tmpstats.errors));
atomic64_set(&rtpe_stats.bytes, atomic64_get_na(&tmpstats.bytes));
atomic64_set(&rtpe_stats.packets, atomic64_get_na(&tmpstats.packets));
atomic64_set(&rtpe_stats.errors, atomic64_get_na(&tmpstats.errors));
i = kernel_list(); i = kernel_list();
while (i) { while (i) {


+ 3
- 3
daemon/call.h View File

@ -416,9 +416,6 @@ struct callmaster_config {
struct callmaster { struct callmaster {
struct obj obj; struct obj obj;
/* XXX rework these */
struct stats statsps; /* per second stats, running timer */
struct stats stats; /* copied from statsps once a second */
struct totalstats totalstats; struct totalstats totalstats;
struct totalstats totalstats_interval; struct totalstats totalstats_interval;
mutex_t totalstats_lastinterval_lock; mutex_t totalstats_lastinterval_lock;
@ -432,6 +429,9 @@ struct callmaster {
extern rwlock_t rtpe_callhash_lock; extern rwlock_t rtpe_callhash_lock;
extern GHashTable *rtpe_callhash; extern GHashTable *rtpe_callhash;
extern struct stats rtpe_statsps; /* per second stats, running timer */
extern struct stats rtpe_stats; /* copied from statsps once a second */
struct callmaster *callmaster_new(void); struct callmaster *callmaster_new(void);
void callmaster_get_all_calls(struct callmaster *m, GQueue *q); void callmaster_get_all_calls(struct callmaster *m, GQueue *q);


+ 2
- 2
daemon/call_interfaces.c View File

@ -452,7 +452,7 @@ void calls_status_tcp(struct callmaster *m, struct streambuf_stream *s) {
streambuf_printf(s->outbuf, "proxy %u "UINT64F"/%i/%i\n", streambuf_printf(s->outbuf, "proxy %u "UINT64F"/%i/%i\n",
g_queue_get_length(&q), g_queue_get_length(&q),
atomic64_get(&m->stats.bytes), 0, 0);
atomic64_get(&rtpe_stats.bytes), 0, 0);
while (q.head) { while (q.head) {
c = g_queue_pop_head(&q); c = g_queue_pop_head(&q);
@ -818,7 +818,7 @@ const char *call_offer_ng(bencode_item_t *input, struct callmaster *m, bencode_i
if (m->conf.max_sessions>=0) { if (m->conf.max_sessions>=0) {
rwlock_lock_r(&rtpe_callhash_lock); rwlock_lock_r(&rtpe_callhash_lock);
if (g_hash_table_size(rtpe_callhash) - if (g_hash_table_size(rtpe_callhash) -
atomic64_get(&m->stats.foreign_sessions) >= m->conf.max_sessions) {
atomic64_get(&rtpe_stats.foreign_sessions) >= m->conf.max_sessions) {
rwlock_unlock_r(&rtpe_callhash_lock); rwlock_unlock_r(&rtpe_callhash_lock);
/* foreign calls can't get rejected /* foreign calls can't get rejected
* total_rejected_sess applies only to "own" sessions */ * total_rejected_sess applies only to "own" sessions */


+ 2
- 2
daemon/cli.c View File

@ -254,8 +254,8 @@ static void cli_incoming_list_totals(str *instr, struct callmaster* m, struct st
static void cli_incoming_list_numsessions(str *instr, struct callmaster* m, struct streambuf *replybuffer) { static void cli_incoming_list_numsessions(str *instr, struct callmaster* m, struct streambuf *replybuffer) {
rwlock_lock_r(&rtpe_callhash_lock); rwlock_lock_r(&rtpe_callhash_lock);
streambuf_printf(replybuffer, "Current sessions own: "UINT64F"\n", g_hash_table_size(rtpe_callhash) - atomic64_get(&m->stats.foreign_sessions));
streambuf_printf(replybuffer, "Current sessions foreign: "UINT64F"\n", atomic64_get(&m->stats.foreign_sessions));
streambuf_printf(replybuffer, "Current sessions own: "UINT64F"\n", g_hash_table_size(rtpe_callhash) - atomic64_get(&rtpe_stats.foreign_sessions));
streambuf_printf(replybuffer, "Current sessions foreign: "UINT64F"\n", atomic64_get(&rtpe_stats.foreign_sessions));
streambuf_printf(replybuffer, "Current sessions total: %i\n", g_hash_table_size(rtpe_callhash)); streambuf_printf(replybuffer, "Current sessions total: %i\n", g_hash_table_size(rtpe_callhash));
rwlock_unlock_r(&rtpe_callhash_lock); rwlock_unlock_r(&rtpe_callhash_lock);
} }


+ 1
- 1
daemon/graphite.c View File

@ -136,7 +136,7 @@ int send_graphite_data(struct callmaster *cm, struct totalstats *sent_data) {
ts->managed_sess_max = cm->totalstats_interval.managed_sess_max; ts->managed_sess_max = cm->totalstats_interval.managed_sess_max;
ts->managed_sess_min = cm->totalstats_interval.managed_sess_min; ts->managed_sess_min = cm->totalstats_interval.managed_sess_min;
ts->total_sessions = g_hash_table_size(rtpe_callhash); ts->total_sessions = g_hash_table_size(rtpe_callhash);
ts->foreign_sessions = atomic64_get(&cm->stats.foreign_sessions);
ts->foreign_sessions = atomic64_get(&rtpe_stats.foreign_sessions);
ts->own_sessions = ts->total_sessions - ts->foreign_sessions; ts->own_sessions = ts->total_sessions - ts->foreign_sessions;
cm->totalstats_interval.managed_sess_max = ts->own_sessions;; cm->totalstats_interval.managed_sess_max = ts->own_sessions;;
cm->totalstats_interval.managed_sess_min = ts->own_sessions; cm->totalstats_interval.managed_sess_min = ts->own_sessions;


+ 5
- 7
daemon/media_socket.c View File

@ -1198,7 +1198,6 @@ static int stream_packet(struct stream_fd *sfd, str *s, const endpoint_t *fsin,
unk = 0; unk = 0;
int i; int i;
struct call *call; struct call *call;
struct callmaster *cm;
/*unsigned char cc;*/ /*unsigned char cc;*/
struct endpoint endpoint; struct endpoint endpoint;
rewrite_func rwf_in, rwf_out; rewrite_func rwf_in, rwf_out;
@ -1209,7 +1208,6 @@ static int stream_packet(struct stream_fd *sfd, str *s, const endpoint_t *fsin,
struct ssrc_ctx *ssrc_in = NULL, *ssrc_out = NULL; struct ssrc_ctx *ssrc_in = NULL, *ssrc_out = NULL;
call = sfd->call; call = sfd->call;
cm = call->callmaster;
rwlock_lock_r(&call->master_lock); rwlock_lock_r(&call->master_lock);
@ -1319,7 +1317,7 @@ loop_ok:
ilog(LOG_WARNING | LOG_FLAG_LIMIT, ilog(LOG_WARNING | LOG_FLAG_LIMIT,
"RTP packet with unknown payload type %u received", i); "RTP packet with unknown payload type %u received", i);
atomic64_inc(&stream->stats.errors); atomic64_inc(&stream->stats.errors);
atomic64_inc(&cm->statsps.errors);
atomic64_inc(&rtpe_statsps.errors);
} }
else { else {
@ -1338,7 +1336,7 @@ loop_ok:
if (G_UNLIKELY(!sink || !sink->selected_sfd || !out_srtp || !out_srtp->selected_sfd || !in_srtp->selected_sfd)) { if (G_UNLIKELY(!sink || !sink->selected_sfd || !out_srtp || !out_srtp->selected_sfd || !in_srtp->selected_sfd)) {
ilog(LOG_WARNING, "RTP packet from %s discarded", endpoint_print_buf(fsin)); ilog(LOG_WARNING, "RTP packet from %s discarded", endpoint_print_buf(fsin));
atomic64_inc(&stream->stats.errors); atomic64_inc(&stream->stats.errors);
atomic64_inc(&cm->statsps.errors);
atomic64_inc(&rtpe_statsps.errors);
goto unlock_out; goto unlock_out;
} }
@ -1511,7 +1509,7 @@ forward:
ret = -errno; ret = -errno;
ilog(LOG_DEBUG,"Error when sending message. Error: %s",strerror(errno)); ilog(LOG_DEBUG,"Error when sending message. Error: %s",strerror(errno));
atomic64_inc(&stream->stats.errors); atomic64_inc(&stream->stats.errors);
atomic64_inc(&cm->statsps.errors);
atomic64_inc(&rtpe_statsps.errors);
goto out; goto out;
} }
@ -1524,8 +1522,8 @@ drop:
atomic64_inc(&stream->stats.packets); atomic64_inc(&stream->stats.packets);
atomic64_add(&stream->stats.bytes, s->len); atomic64_add(&stream->stats.bytes, s->len);
atomic64_set(&stream->last_packet, rtpe_now.tv_sec); atomic64_set(&stream->last_packet, rtpe_now.tv_sec);
atomic64_inc(&cm->statsps.packets);
atomic64_add(&cm->statsps.bytes, s->len);
atomic64_inc(&rtpe_statsps.packets);
atomic64_add(&rtpe_statsps.bytes, s->len);
out: out:
if (ret == 0 && update) if (ret == 0 && update)


+ 4
- 4
daemon/statistics.c View File

@ -76,13 +76,13 @@ void statistics_update_foreignown_dec(struct call* c) {
m = c->callmaster; m = c->callmaster;
if (IS_FOREIGN_CALL(c)) { if (IS_FOREIGN_CALL(c)) {
atomic64_dec(&m->stats.foreign_sessions);
atomic64_dec(&rtpe_stats.foreign_sessions);
} }
if(IS_OWN_CALL(c)) { if(IS_OWN_CALL(c)) {
mutex_lock(&m->totalstats_interval.managed_sess_lock); mutex_lock(&m->totalstats_interval.managed_sess_lock);
m->totalstats_interval.managed_sess_min = MIN(m->totalstats_interval.managed_sess_min, m->totalstats_interval.managed_sess_min = MIN(m->totalstats_interval.managed_sess_min,
g_hash_table_size(rtpe_callhash) - atomic64_get(&m->stats.foreign_sessions));
g_hash_table_size(rtpe_callhash) - atomic64_get(&rtpe_stats.foreign_sessions));
mutex_unlock(&m->totalstats_interval.managed_sess_lock); mutex_unlock(&m->totalstats_interval.managed_sess_lock);
} }
@ -94,11 +94,11 @@ void statistics_update_foreignown_inc(struct callmaster *m, struct call* c) {
m->totalstats_interval.managed_sess_max = MAX( m->totalstats_interval.managed_sess_max = MAX(
m->totalstats_interval.managed_sess_max, m->totalstats_interval.managed_sess_max,
g_hash_table_size(rtpe_callhash) g_hash_table_size(rtpe_callhash)
- atomic64_get(&m->stats.foreign_sessions));
- atomic64_get(&rtpe_stats.foreign_sessions));
mutex_unlock(&m->totalstats_interval.managed_sess_lock); mutex_unlock(&m->totalstats_interval.managed_sess_lock);
} }
else if (IS_FOREIGN_CALL(c)) { /* foreign call*/ else if (IS_FOREIGN_CALL(c)) { /* foreign call*/
atomic64_inc(&m->stats.foreign_sessions);
atomic64_inc(&rtpe_stats.foreign_sessions);
atomic64_inc(&m->totalstats.total_foreign_sessions); atomic64_inc(&m->totalstats.total_foreign_sessions);
} }


Loading…
Cancel
Save