diff --git a/src/apps/relay/ns_ioalib_engine_impl.c b/src/apps/relay/ns_ioalib_engine_impl.c index 3ef77f1..c51d386 100644 --- a/src/apps/relay/ns_ioalib_engine_impl.c +++ b/src/apps/relay/ns_ioalib_engine_impl.c @@ -3721,6 +3721,12 @@ void turn_report_allocation_set(void *a, turn_time_t lifetime, int refresh) send_message_to_redis(e->rch, "set", key, "%s lifetime=%lu", status, (unsigned long)lifetime); send_message_to_redis(e->rch, "publish", key, "%s lifetime=%lu", status, (unsigned long)lifetime); } +#endif +#if !defined(TURN_NO_PROMETHEUS) + { + if (!refresh) + prom_inc_allocation(); + } #endif } } @@ -3777,6 +3783,7 @@ void turn_report_allocation_delete(void *a) prom_set_finished_traffic(NULL, (const char*)ss->username, (unsigned long)(ss->t_received_packets), (unsigned long)(ss->t_received_bytes), (unsigned long)(ss->t_sent_packets), (unsigned long)(ss->t_sent_bytes), false); prom_set_finished_traffic(NULL, (const char*)ss->username, (unsigned long)(ss->t_peer_received_packets), (unsigned long)(ss->t_peer_received_bytes), (unsigned long)(ss->t_peer_sent_packets), (unsigned long)(ss->t_peer_sent_bytes), true); } + prom_dec_allocation(); } #endif } diff --git a/src/apps/relay/prom_server.c b/src/apps/relay/prom_server.c index 883da46..1e2b5cc 100644 --- a/src/apps/relay/prom_server.c +++ b/src/apps/relay/prom_server.c @@ -24,6 +24,8 @@ prom_counter_t *turn_total_traffic_peer_rcvb; prom_counter_t *turn_total_traffic_peer_sentp; prom_counter_t *turn_total_traffic_peer_sentb; +prom_gauge_t *turn_total_allocations; + int start_prometheus_server(void){ if (turn_params.prometheus == 0){ @@ -63,6 +65,9 @@ int start_prometheus_server(void){ turn_total_traffic_peer_sentp = prom_collector_registry_must_register_metric(prom_counter_new("turn_total_traffic_peer_sentp", "Represents total finished sessions peer sent packets", 0, NULL)); turn_total_traffic_peer_sentb = prom_collector_registry_must_register_metric(prom_counter_new("turn_total_traffic_peer_sentb", "Represents total finished sessions peer sent bytes", 0, NULL)); + // Create total allocations number gauge metric + turn_total_allocations = prom_collector_registry_must_register_metric(prom_gauge_new("turn_total_allocations", "Represents current allocations number", 0, NULL)); + promhttp_set_active_collector_registry(NULL); @@ -105,4 +110,16 @@ void prom_set_finished_traffic(const char* realm, const char* user, unsigned lon } } +void prom_inc_allocation(void) { + if (turn_params.prometheus == 1){ + prom_gauge_inc(turn_total_allocations, NULL); + } +} + +void prom_dec_allocation(void) { + if (turn_params.prometheus == 1){ + prom_gauge_dec(turn_total_allocations, NULL); + } +} + #endif /* TURN_NO_PROMETHEUS */ diff --git a/src/apps/relay/prom_server.h b/src/apps/relay/prom_server.h index c70473b..9a2b500 100644 --- a/src/apps/relay/prom_server.h +++ b/src/apps/relay/prom_server.h @@ -46,6 +46,8 @@ extern prom_counter_t *turn_total_traffic_peer_rcvb; extern prom_counter_t *turn_total_traffic_peer_sentp; extern prom_counter_t *turn_total_traffic_peer_sentb; +extern prom_gauge_t *turn_total_allocations_number; + #define TURN_ALLOC_STR_MAX_SIZE (20) #ifdef __cplusplus @@ -57,6 +59,9 @@ int start_prometheus_server(void); void prom_set_finished_traffic(const char* realm, const char* user, unsigned long rsvp, unsigned long rsvb, unsigned long sentp, unsigned long sentb, bool peer); +void prom_inc_allocation(void); +void prom_dec_allocation(void); + #endif /* TURN_NO_PROMETHEUS */ #ifdef __cplusplus