mirror of
https://github.com/coturn/coturn.git
synced 2025-10-23 20:11:17 +02:00
First code to implement prometheus metrics
This commit is contained in:
parent
4722697645
commit
b9802690d1
@ -30,8 +30,8 @@ HIREDIS_MODS = src/apps/common/hiredis_libevent2.c
|
||||
USERDB_HEADERS = src/apps/relay/dbdrivers/dbdriver.h src/apps/relay/dbdrivers/dbd_sqlite.h src/apps/relay/dbdrivers/dbd_pgsql.h src/apps/relay/dbdrivers/dbd_mysql.h src/apps/relay/dbdrivers/dbd_mongo.h src/apps/relay/dbdrivers/dbd_redis.h
|
||||
USERDB_MODS = src/apps/relay/dbdrivers/dbdriver.c src/apps/relay/dbdrivers/dbd_sqlite.c src/apps/relay/dbdrivers/dbd_pgsql.c src/apps/relay/dbdrivers/dbd_mysql.c src/apps/relay/dbdrivers/dbd_mongo.c src/apps/relay/dbdrivers/dbd_redis.c
|
||||
|
||||
SERVERAPP_HEADERS = src/apps/relay/userdb.h src/apps/relay/tls_listener.h src/apps/relay/mainrelay.h src/apps/relay/turn_admin_server.h src/apps/relay/dtls_listener.h src/apps/relay/libtelnet.h ${HIREDIS_HEADERS} ${USERDB_HEADERS}
|
||||
SERVERAPP_MODS = src/apps/relay/mainrelay.c src/apps/relay/netengine.c src/apps/relay/libtelnet.c src/apps/relay/turn_admin_server.c src/apps/relay/userdb.c src/apps/relay/tls_listener.c src/apps/relay/dtls_listener.c ${HIREDIS_MODS} ${USERDB_MODS}
|
||||
SERVERAPP_HEADERS = src/apps/relay/userdb.h src/apps/relay/tls_listener.h src/apps/relay/mainrelay.h src/apps/relay/turn_admin_server.h src/apps/relay/dtls_listener.h src/apps/relay/libtelnet.h src/apps/relay/prom_server.h ${HIREDIS_HEADERS} ${USERDB_HEADERS}
|
||||
SERVERAPP_MODS = src/apps/relay/mainrelay.c src/apps/relay/netengine.c src/apps/relay/libtelnet.c src/apps/relay/turn_admin_server.c src/apps/relay/userdb.c src/apps/relay/tls_listener.c src/apps/relay/dtls_listener.c src/apps/relay/prom_server.c ${HIREDIS_MODS} ${USERDB_MODS}
|
||||
SERVERAPP_DEPS = ${SERVERTURN_MODS} ${SERVERTURN_DEPS} ${SERVERAPP_MODS} ${SERVERAPP_HEADERS} ${COMMON_DEPS} ${IMPL_DEPS} lib/libturnclient.a
|
||||
|
||||
TURN_BUILD_RESULTS = bin/turnutils_oauth bin/turnutils_natdiscovery bin/turnutils_stunclient bin/turnutils_rfc5769check bin/turnutils_uclient bin/turnserver bin/turnutils_peer lib/libturnclient.a include/turn/ns_turn_defs.h sqlite_empty_db
|
||||
|
3
configure
vendored
3
configure
vendored
@ -876,6 +876,9 @@ testlib wldap64
|
||||
testlib intl
|
||||
testlib nsl
|
||||
testlib resolv
|
||||
testlib prom
|
||||
testlib promhttp
|
||||
testlib microhttpd
|
||||
|
||||
###########################
|
||||
# Test sockets compilation
|
||||
|
91
src/apps/relay/prom_server.c
Normal file
91
src/apps/relay/prom_server.c
Normal file
@ -0,0 +1,91 @@
|
||||
#include "prom_server.h"
|
||||
|
||||
int start_prometheus_server(void){
|
||||
prom_collector_registry_default_init();
|
||||
turn_status = prom_collector_registry_must_register_metric(prom_gauge_new("turn_status", "Represents status", 5, (const char *[]) {"realm", "user", "allocation", "status", "lifetime" }));
|
||||
turn_traffic_rcvp = prom_collector_registry_must_register_metric(prom_gauge_new("turn_traffic_rcvp", "Represents received packets", 3, (const char *[]) {"realm", "user", "allocation" }));
|
||||
turn_traffic_rcvb = prom_collector_registry_must_register_metric(prom_gauge_new("turn_traffic_rcvb", "Represents received bytes", 3, (const char *[]) {"realm", "user", "allocation" }));
|
||||
turn_traffic_sentp = prom_collector_registry_must_register_metric(prom_gauge_new("turn_traffic_sentp", "Represents sent packets", 3, (const char *[]) {"realm", "user", "allocation" }));
|
||||
turn_traffic_sentb = prom_collector_registry_must_register_metric(prom_gauge_new("turn_traffic_sentb", "Represents received bytes", 3, (const char *[]) {"realm", "user", "allocation" }));
|
||||
turn_traffic_peer_rcvp = prom_collector_registry_must_register_metric(prom_gauge_new("turn_traffic_peer_rcvp", "Represents peer received packets", 3, (const char *[]) {"realm", "user", "allocation" }));
|
||||
turn_traffic_peer_rcvb = prom_collector_registry_must_register_metric(prom_gauge_new("turn_traffic_peer_rcvb", "Represents peer received bytes", 3, (const char *[]) {"realm", "user", "allocation" }));
|
||||
turn_traffic_peer_sentp = prom_collector_registry_must_register_metric(prom_gauge_new("turn_traffic_peer_sentp", "Represents peer sent packets", 3, (const char *[]) {"realm", "user", "allocation" }));
|
||||
turn_traffic_peer_sentb = prom_collector_registry_must_register_metric(prom_gauge_new("turn_traffic_peer_sentb", "Represents peer received bytes", 3, (const char *[]) {"realm", "user", "allocation" }));
|
||||
promhttp_set_active_collector_registry(NULL);
|
||||
|
||||
|
||||
struct MHD_Daemon *daemon = promhttp_start_daemon(MHD_USE_SELECT_INTERNALLY, DEFAULT_PROM_SERVER_PORT, NULL, NULL);
|
||||
if (daemon == NULL) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void prom_set_status(const char* realm, const char* user, unsigned long long allocation, const char* status, unsigned long lifetime){
|
||||
char allocation_chars[1024];
|
||||
char lifetime_chars[1024];
|
||||
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
snprintf(lifetime_chars, sizeof(lifetime_chars), "%lu", lifetime);
|
||||
|
||||
prom_gauge_add(turn_status, 1, (const char *[]) { realm , user, allocation_chars, status, lifetime_chars });
|
||||
}
|
||||
|
||||
void prom_del_status(const char* realm, const char* user, unsigned long long allocation, const char* status){
|
||||
char allocation_chars[1024];
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
|
||||
prom_gauge_sub(turn_status, 1, (const char *[]) { realm , user, allocation_chars, (char *)"new", (char *)"600" });
|
||||
prom_gauge_add(turn_status, 1, (const char *[]) { realm , user, allocation_chars, status, NULL });
|
||||
|
||||
}
|
||||
|
||||
void prom_set_rcvp(const char* realm, const char* user, unsigned long long allocation, unsigned long rsvp){
|
||||
char allocation_chars[1024];
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
|
||||
prom_gauge_set(turn_traffic_rcvp, rsvp, (const char *[]) { realm , user, allocation_chars });
|
||||
}
|
||||
void prom_set_rcvb(const char* realm, const char* user, unsigned long long allocation, unsigned long rsvb){
|
||||
char allocation_chars[1024];
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
|
||||
prom_gauge_set(turn_traffic_rcvb, rsvb, (const char *[]) { realm , user, allocation_chars });
|
||||
}
|
||||
void prom_set_sentp(const char* realm, const char* user, unsigned long long allocation, unsigned long sentp){
|
||||
char allocation_chars[1024];
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
|
||||
prom_gauge_set(turn_traffic_sentp, sentp, (const char *[]) { realm , user, allocation_chars });
|
||||
}
|
||||
void prom_set_sentb(const char* realm, const char* user, unsigned long long allocation, unsigned long sentb){
|
||||
char allocation_chars[1024];
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
|
||||
prom_gauge_set(turn_traffic_sentb, sentb, (const char *[]) { realm , user, allocation_chars });
|
||||
}
|
||||
|
||||
void prom_set_peer_rcvp(const char* realm, const char* user, unsigned long long allocation, unsigned long rsvp){
|
||||
char allocation_chars[1024];
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
|
||||
prom_gauge_set(turn_traffic_peer_rcvp, rsvp, (const char *[]) { realm , user, allocation_chars });
|
||||
}
|
||||
void prom_set_peer_rcvb(const char* realm, const char* user, unsigned long long allocation, unsigned long rsvb){
|
||||
char allocation_chars[1024];
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
|
||||
prom_gauge_set(turn_traffic_peer_rcvb, rsvb, (const char *[]) { realm , user, allocation_chars });
|
||||
}
|
||||
void prom_set_peer_sentp(const char* realm, const char* user, unsigned long long allocation, unsigned long sentp){
|
||||
char allocation_chars[1024];
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
|
||||
prom_gauge_set(turn_traffic_peer_sentp, sentp, (const char *[]) { realm , user, allocation_chars });
|
||||
}
|
||||
void prom_set_peer_sentb(const char* realm, const char* user, unsigned long long allocation, unsigned long sentb){
|
||||
char allocation_chars[1024];
|
||||
snprintf(allocation_chars, sizeof(allocation_chars), "%018llu", allocation);
|
||||
|
||||
prom_gauge_set(turn_traffic_peer_sentb, sentb, (const char *[]) { realm , user, allocation_chars });
|
||||
}
|
49
src/apps/relay/prom_server.h
Normal file
49
src/apps/relay/prom_server.h
Normal file
@ -0,0 +1,49 @@
|
||||
|
||||
#ifndef __PROM_SERVER_H__
|
||||
#define __PROM_SERVER_H__
|
||||
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <microhttpd.h>
|
||||
#include <prom.h>
|
||||
#include <promhttp.h>
|
||||
|
||||
#define DEFAULT_PROM_SERVER_PORT (9121)
|
||||
|
||||
prom_gauge_t *turn_status;
|
||||
prom_gauge_t *turn_traffic_rcvp;
|
||||
prom_gauge_t *turn_traffic_rcvb;
|
||||
prom_gauge_t *turn_traffic_sentp;
|
||||
prom_gauge_t *turn_traffic_sentb;
|
||||
prom_gauge_t *turn_traffic_peer_rcvp;
|
||||
prom_gauge_t *turn_traffic_peer_rcvb;
|
||||
prom_gauge_t *turn_traffic_peer_sentp;
|
||||
prom_gauge_t *turn_traffic_peer_sentb;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int start_prometheus_server(void);
|
||||
|
||||
void prom_set_status(const char* realm, const char* user, unsigned long long allocation, const char* status, unsigned long lifetime);
|
||||
void prom_del_status(const char* realm, const char* user, unsigned long long allocation, const char* status);
|
||||
void prom_set_rcvp(const char* realm, const char* user, unsigned long long allocation, unsigned long rsvp);
|
||||
void prom_set_rcvb(const char* realm, const char* user, unsigned long long allocation, unsigned long rsvb);
|
||||
void prom_set_sentp(const char* realm, const char* user, unsigned long long allocation, unsigned long sentp);
|
||||
void prom_set_sentb(const char* realm, const char* user, unsigned long long allocation, unsigned long sentb);
|
||||
void prom_set_peer_rcvp(const char* realm, const char* user, unsigned long long allocation, unsigned long rsvp);
|
||||
void prom_set_peer_rcvb(const char* realm, const char* user, unsigned long long allocation, unsigned long rsvb);
|
||||
void prom_set_peer_sentp(const char* realm, const char* user, unsigned long long allocation, unsigned long sentp);
|
||||
void prom_set_peer_sentb(const char* realm, const char* user, unsigned long long allocation, unsigned long sentb);
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __clplusplus */
|
||||
|
||||
#endif /* __PROM_SERVER_H__ */
|
Loading…
x
Reference in New Issue
Block a user