Browse Source

MT#55283 use g_auto for stats_metrics

Change-Id: Ica79c0dcd7254879a4a1f68d82188c7a1ee82754
pull/1776/head
Richard Fuchs 2 years ago
parent
commit
40fcf7e448
6 changed files with 33 additions and 33 deletions
  1. +4
    -4
      daemon/cli.c
  2. +2
    -3
      daemon/mqtt.c
  3. +16
    -18
      daemon/statistics.c
  4. +2
    -2
      daemon/websocket.c
  5. +5
    -2
      include/statistics.h
  6. +4
    -4
      t/test-stats.c

+ 4
- 4
daemon/cli.c View File

@ -464,9 +464,9 @@ static void cli_incoming_list_counters(str *instr, struct cli_writer *cw) {
}
static void cli_incoming_list_totals(str *instr, struct cli_writer *cw) {
AUTO_CLEANUP_INIT(GQueue *metrics, statistics_free_metrics, statistics_gather_metrics(NULL));
g_autoptr(stats_metric_q) metrics = statistics_gather_metrics(NULL);
for (GList *l = metrics->head; l; l = l->next) {
for (__auto_type l = metrics->head; l; l = l->next) {
stats_metric *m = l->data;
if (!m->descr)
continue;
@ -1703,9 +1703,9 @@ static void cli_incoming_list_interfaces(str *instr, struct cli_writer *cw) {
}
static void cli_incoming_list_jsonstats(str *instr, struct cli_writer *cw) {
AUTO_CLEANUP_INIT(GQueue *metrics, statistics_free_metrics, statistics_gather_metrics(NULL));
g_autoptr(stats_metric_q) metrics = statistics_gather_metrics(NULL);
for (GList *l = metrics->head; l; l = l->next) {
for (__auto_type l = metrics->head; l; l = l->next) {
stats_metric *m = l->data;
if (!m->label)
continue;


+ 2
- 3
daemon/mqtt.c View File

@ -467,10 +467,9 @@ static void mqtt_full_call(struct call *call, JsonBuilder *json) {
static void mqtt_global_stats(JsonBuilder *json) {
AUTO_CLEANUP_INIT(GQueue *metrics, statistics_free_metrics,
statistics_gather_metrics(&interface_rate_stats));
g_autoptr(stats_metric_q) metrics = statistics_gather_metrics(&interface_rate_stats);
for (GList *l = metrics->head; l; l = l->next) {
for (__auto_type l = metrics->head; l; l = l->next) {
stats_metric *m = l->data;
if (!m->label)
continue;


+ 16
- 18
daemon/statistics.c View File

@ -197,26 +197,26 @@ found:;
}
INLINE void prom_metric(GQueue *ret, const char *name, const char *type) {
stats_metric *last = g_queue_peek_tail(ret);
INLINE void prom_metric(stats_metric_q *ret, const char *name, const char *type) {
stats_metric *last = t_queue_peek_tail(ret);
last->prom_name = name;
last->prom_type = type;
}
static void prom_label(GQueue *ret, const char *fmt, ...) {
static void prom_label(stats_metric_q *ret, const char *fmt, ...) {
if (!fmt)
return;
va_list ap;
va_start(ap, fmt);
stats_metric *last = g_queue_peek_tail(ret);
stats_metric *last = t_queue_peek_tail(ret);
last->prom_label = g_strdup_vprintf(fmt, ap);
va_end(ap);
}
#define PROM(name, type) prom_metric(ret, name, type)
#define PROMLAB(fmt, ...) prom_label(ret, fmt, ##__VA_ARGS__)
INLINE void metric_push(GQueue *ret, stats_metric *m) {
INLINE void metric_push(stats_metric_q *ret, stats_metric *m) {
stats_metric *last = NULL;
for (GList *l_last = ret->tail; l_last; l_last = l_last->prev) {
for (__auto_type l_last = ret->tail; l_last; l_last = l_last->prev) {
last = l_last->data;
if (last->label)
break;
@ -228,9 +228,9 @@ INLINE void metric_push(GQueue *ret, stats_metric *m) {
}
else if (m->is_bracket && !m->is_close_bracket && last && last->is_close_bracket)
m->is_follow_up = 1;
g_queue_push_tail(ret, m);
t_queue_push_tail(ret, m);
}
static void add_metric(GQueue *ret, const char *label, const char *desc, const char *fmt1, const char *fmt2, ...) {
static void add_metric(stats_metric_q *ret, const char *label, const char *desc, const char *fmt1, const char *fmt2, ...) {
va_list ap;
stats_metric *m = g_slice_alloc0(sizeof(*m));
@ -273,7 +273,7 @@ static void add_metric(GQueue *ret, const char *label, const char *desc, const c
}
metric_push(ret, m);
}
static void add_header(GQueue *ret, const char *fmt1, const char *fmt2, ...) {
static void add_header(stats_metric_q *ret, const char *fmt1, const char *fmt2, ...) {
va_list ap;
stats_metric *m = g_slice_alloc0(sizeof(*m));
@ -313,8 +313,8 @@ static void add_header(GQueue *ret, const char *fmt1, const char *fmt2, ...) {
#define HEADERl(fmt2, ...) add_header(ret, NULL, fmt2, ##__VA_ARGS__)
GQueue *statistics_gather_metrics(struct interface_sampled_rate_stats *interface_rate_stats) {
GQueue *ret = g_queue_new();
stats_metric_q *statistics_gather_metrics(struct interface_sampled_rate_stats *interface_rate_stats) {
stats_metric_q *ret = stats_metric_q_new();
double calls_dur_iv;
uint64_t cur_sessions, num_sessions, min_sess_iv, max_sess_iv;
@ -914,8 +914,7 @@ GQueue *statistics_gather_metrics(struct interface_sampled_rate_stats *interface
}
#pragma GCC diagnostic warning "-Wformat-zero-length"
static void free_stats_metric(void *p) {
stats_metric *m = p;
static void free_stats_metric(stats_metric *m) {
g_free(m->descr);
g_free(m->label);
g_free(m->value_long);
@ -925,9 +924,8 @@ static void free_stats_metric(void *p) {
g_slice_free1(sizeof(*m), m);
}
void statistics_free_metrics(GQueue **q) {
g_queue_free_full(*q, free_stats_metric);
*q = NULL;
void statistics_free_metrics(stats_metric_q *q) {
t_queue_free_full(q, free_stats_metric);
}
void statistics_free(void) {
@ -952,14 +950,14 @@ void statistics_init(void) {
}
const char *statistics_ng(bencode_item_t *input, bencode_item_t *output) {
AUTO_CLEANUP_INIT(GQueue *metrics, statistics_free_metrics, statistics_gather_metrics(NULL));
g_autoptr(stats_metric_q) metrics = statistics_gather_metrics(NULL);
g_auto(GQueue) bstack = G_QUEUE_INIT;
bencode_item_t *dict = output;
const char *sub_label = "statistics"; // top level
bencode_buffer_t *buf = output->buffer;
for (GList *l = metrics->head; l; l = l->next) {
for (__auto_type l = metrics->head; l; l = l->next) {
stats_metric *m = l->data;
if (!m->label)
continue;


+ 2
- 2
daemon/websocket.c View File

@ -384,11 +384,11 @@ static const char *websocket_http_ping(struct websocket_message *wm) {
static const char *websocket_http_metrics(struct websocket_message *wm) {
ilogs(http, LOG_DEBUG, "Respoding to GET /metrics");
AUTO_CLEANUP_INIT(GQueue *metrics, statistics_free_metrics, statistics_gather_metrics(NULL));
g_autoptr(stats_metric_q) metrics = statistics_gather_metrics(NULL);
g_autoptr(GString) outp = g_string_new("");
g_autoptr(GHashTable) metric_types = g_hash_table_new(g_str_hash, g_str_equal);
for (GList *l = metrics->head; l; l = l->next) {
for (__auto_type l = metrics->head; l; l = l->next) {
stats_metric *m = l->data;
if (!m->label)
continue;


+ 5
- 2
include/statistics.h View File

@ -120,6 +120,8 @@ struct stats_metric {
char *prom_label;
};
TYPED_GQUEUE(stats_metric, stats_metric)
struct call_stats {
time_t last_packet;
@ -195,8 +197,9 @@ void statistics_update_ip46_inc_dec(struct call *, int op);
void statistics_update_foreignown_dec(struct call *);
void statistics_update_foreignown_inc(struct call* c);
GQueue *statistics_gather_metrics(struct interface_sampled_rate_stats *);
void statistics_free_metrics(GQueue **);
stats_metric_q *statistics_gather_metrics(struct interface_sampled_rate_stats *);
void statistics_free_metrics(stats_metric_q *);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(stats_metric_q, statistics_free_metrics)
const char *statistics_ng(bencode_item_t *input, bencode_item_t *output);
enum thread_looper_action call_rate_stats_updater(void);


+ 4
- 4
t/test-stats.c View File

@ -42,9 +42,9 @@ static void __assert_g_string_eq(GString *a, const char *b, unsigned int line) {
}
#define assert_g_string_eq(a, b) __assert_g_string_eq(a, b, __LINE__)
static void __assert_metrics_eq(GQueue *q, const char *b, unsigned int line) {
static void __assert_metrics_eq(stats_metric_q *q, const char *b, unsigned int line) {
GString *a = g_string_new("");
for (GList *l = q->head; l; l = l->next) {
for (__auto_type l = q->head; l; l = l->next) {
struct stats_metric *m = l->data;
#define APP_S(x) if (m->x) do { g_string_append(a, m->x); g_string_append_c(a, '\n'); } while (0)
APP_S(descr);
@ -54,7 +54,7 @@ static void __assert_metrics_eq(GQueue *q, const char *b, unsigned int line) {
APP_S(prom_label);
}
__assert_g_string_eq(a, b, line);
statistics_free_metrics(&q);
statistics_free_metrics(q);
}
#define assert_metrics_eq(a, b) __assert_metrics_eq(a, b, __LINE__)
@ -286,7 +286,7 @@ int main(void) {
"timeout_sess 0 150\n"
"reject_sess 0 150\n");
GQueue *stats = statistics_gather_metrics(NULL);
stats_metric_q *stats = statistics_gather_metrics(NULL);
assert_metrics_eq(stats,
"\n"
"{\n"


Loading…
Cancel
Save