MT#55283 use typed GHashTable for codec_stats

Change-Id: I447ff59f947bb88d1731472b16e7ac588a21cae6
pull/1776/head
Richard Fuchs 1 year ago
parent 260fc20cc7
commit 8e0276d7ce

@ -1725,15 +1725,17 @@ static void cli_incoming_list_jsonstats(str *instr, struct cli_writer *cw) {
static void cli_incoming_list_transcoders(str *instr, struct cli_writer *cw) {
mutex_lock(&rtpe_codec_stats_lock);
GList *chains = g_hash_table_get_keys(rtpe_codec_stats);
if (!chains)
if (t_hash_table_size(rtpe_codec_stats) == 0)
cw->cw_printf(cw, "No stats entries\n");
else {
int last_tv_sec = rtpe_now.tv_sec - 1;
unsigned int idx = last_tv_sec & 1;
for (GList *l = chains; l; l = l->next) {
char *chain = l->data;
struct codec_stats *stats_entry = g_hash_table_lookup(rtpe_codec_stats, chain);
codec_stats_ht_iter iter;
t_hash_table_iter_init(&iter, rtpe_codec_stats);
char *chain;
struct codec_stats *stats_entry;
while (t_hash_table_iter_next(&iter, &chain, &stats_entry)) {
cw->cw_printf(cw, "%s: %i transcoders\n", chain, g_atomic_int_get(&stats_entry->num_transcoders));
if (g_atomic_int_get(&stats_entry->last_tv_sec[idx]) != last_tv_sec)
continue;
@ -1744,8 +1746,6 @@ static void cli_incoming_list_transcoders(str *instr, struct cli_writer *cw) {
}
mutex_unlock(&rtpe_codec_stats_lock);
g_list_free(chains);
}
static void cli_incoming_list_controltos(str *instr, struct cli_writer *cw) {

@ -479,11 +479,11 @@ reset:
mutex_lock(&rtpe_codec_stats_lock);
struct codec_stats *stats_entry =
g_hash_table_lookup(rtpe_codec_stats, handler->stats_chain);
t_hash_table_lookup(rtpe_codec_stats, handler->stats_chain);
if (!stats_entry) {
stats_entry = g_slice_alloc0(sizeof(*stats_entry));
stats_entry->chain = strdup(handler->stats_chain);
g_hash_table_insert(rtpe_codec_stats, stats_entry->chain, stats_entry);
t_hash_table_insert(rtpe_codec_stats, stats_entry->chain, stats_entry);
stats_entry->chain_brief = g_strdup_printf(STR_FORMAT "_" STR_FORMAT,
STR_FMT(&handler->source_pt.encoding_with_params),
STR_FMT(&dest->encoding_with_params));

@ -193,12 +193,14 @@ GString *print_graphite_data(void) {
mutex_lock(&rtpe_codec_stats_lock);
GList *chains = g_hash_table_get_keys(rtpe_codec_stats);
int last_tv_sec = rtpe_now.tv_sec - 1;
unsigned int idx = last_tv_sec & 1;
for (GList *l = chains; l; l = l->next) {
char *chain = l->data;
struct codec_stats *stats_entry = g_hash_table_lookup(rtpe_codec_stats, chain);
codec_stats_ht_iter iter;
t_hash_table_iter_init(&iter, rtpe_codec_stats);
char *chain;
struct codec_stats *stats_entry;
while (t_hash_table_iter_next(&iter, &chain, &stats_entry)) {
GPF("transcoder_%s %i", stats_entry->chain_brief,
g_atomic_int_get(&stats_entry->num_transcoders));
if (g_atomic_int_get(&stats_entry->last_tv_sec[idx]) != last_tv_sec)
@ -213,8 +215,6 @@ GString *print_graphite_data(void) {
mutex_unlock(&rtpe_codec_stats_lock);
g_list_free(chains);
ilog(LOG_DEBUG, "min_sessions:%llu max_sessions:%llu, call_dur_per_interval:%.6f at time %llu\n",
(unsigned long long) atomic64_get_na(&rtpe_gauge_graphite_min_max_sampled.min.total_sessions),

@ -11,7 +11,7 @@ struct timeval rtpe_started;
mutex_t rtpe_codec_stats_lock;
GHashTable *rtpe_codec_stats;
codec_stats_ht rtpe_codec_stats;
struct global_stats_gauge rtpe_stats_gauge; // master values
@ -874,13 +874,15 @@ stats_metric_q *statistics_gather_metrics(struct interface_sampled_rate_stats *i
mutex_lock(&rtpe_codec_stats_lock);
HEADER("transcoders", NULL);
HEADER("[", "");
GList *chains = g_hash_table_get_keys(rtpe_codec_stats);
int last_tv_sec = rtpe_now.tv_sec - 1;
unsigned int idx = last_tv_sec & 1;
for (GList *l = chains; l; l = l->next) {
char *chain = l->data;
struct codec_stats *stats_entry = g_hash_table_lookup(rtpe_codec_stats, chain);
codec_stats_ht_iter iter;
t_hash_table_iter_init(&iter, rtpe_codec_stats);
char *chain;
struct codec_stats *stats_entry;
while (t_hash_table_iter_next(&iter, &chain, &stats_entry)) {
HEADER("{", "");
METRICsva("chain", "\"%s\"", chain);
METRICs("num", "%i", g_atomic_int_get(&stats_entry->num_transcoders));
@ -904,7 +906,6 @@ stats_metric_q *statistics_gather_metrics(struct interface_sampled_rate_stats *i
}
mutex_unlock(&rtpe_codec_stats_lock);
g_list_free(chains);
HEADER("]", "");
HEADER("}", NULL);
@ -929,23 +930,24 @@ void statistics_free_metrics(stats_metric_q *q) {
void statistics_free(void) {
mutex_destroy(&rtpe_codec_stats_lock);
g_hash_table_destroy(rtpe_codec_stats);
t_hash_table_destroy(rtpe_codec_stats);
}
static void codec_stats_free(void *p) {
struct codec_stats *stats_entry = p;
static void codec_stats_free(struct codec_stats *stats_entry) {
free(stats_entry->chain);
g_free(stats_entry->chain_brief);
g_slice_free1(sizeof(*stats_entry), stats_entry);
}
TYPED_GHASHTABLE_IMPL(codec_stats_ht, g_str_hash, g_str_equal, NULL, codec_stats_free)
void statistics_init(void) {
gettimeofday(&rtpe_started, NULL);
//rtpe_totalstats_interval.managed_sess_min = 0; // already zeroed
//rtpe_totalstats_interval.managed_sess_max = 0;
mutex_init(&rtpe_codec_stats_lock);
rtpe_codec_stats = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, codec_stats_free);
rtpe_codec_stats = codec_stats_ht_new();
}
const char *statistics_ng(bencode_item_t *input, bencode_item_t *output) {

@ -131,7 +131,7 @@ struct call_stats {
extern struct timeval rtpe_started;
extern mutex_t rtpe_codec_stats_lock;
extern GHashTable *rtpe_codec_stats;
extern codec_stats_ht rtpe_codec_stats;
extern struct global_stats_gauge rtpe_stats_gauge; // master values

@ -37,4 +37,7 @@ TYPED_GQUEUE(sink_handler, struct sink_handler)
struct dtmf_event;
TYPED_GQUEUE(dtmf_event, struct dtmf_event)
struct codec_stats;
TYPED_GHASHTABLE_PROTO(codec_stats_ht, char, struct codec_stats)
#endif

Loading…
Cancel
Save