| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- #include "mainrelay.h"
- #include "prom_server.h"
- #include "ns_turn_utils.h"
- #if !defined(TURN_NO_PROMETHEUS)
- prom_counter_t *turn_traffic_rcvp;
- prom_counter_t *turn_traffic_rcvb;
- prom_counter_t *turn_traffic_sentp;
- prom_counter_t *turn_traffic_sentb;
- prom_counter_t *turn_traffic_peer_rcvp;
- prom_counter_t *turn_traffic_peer_rcvb;
- prom_counter_t *turn_traffic_peer_sentp;
- prom_counter_t *turn_traffic_peer_sentb;
- prom_counter_t *turn_total_traffic_rcvp;
- prom_counter_t *turn_total_traffic_rcvb;
- prom_counter_t *turn_total_traffic_sentp;
- prom_counter_t *turn_total_traffic_sentb;
- prom_counter_t *turn_total_traffic_peer_rcvp;
- 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;
- void start_prometheus_server(void){
- if (turn_params.prometheus == 0){
- TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "prometheus collector disabled, not started\n");
- return;
- }
- prom_collector_registry_default_init();
- const char *label[] = {"realm", NULL};
- size_t nlabels = 1;
- if (turn_params.prometheus_username_labels) {
- label[1] = "user";
- nlabels++;
- }
- // Create traffic counter metrics
- turn_traffic_rcvp = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_rcvp", "Represents finished sessions received packets", nlabels, label));
- turn_traffic_rcvb = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_rcvb", "Represents finished sessions received bytes", nlabels, label));
- turn_traffic_sentp = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_sentp", "Represents finished sessions sent packets", nlabels, label));
- turn_traffic_sentb = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_sentb", "Represents finished sessions sent bytes", nlabels, label));
- // Create finished sessions traffic for peers counter metrics
- turn_traffic_peer_rcvp = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_peer_rcvp", "Represents finished sessions peer received packets", nlabels, label));
- turn_traffic_peer_rcvb = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_peer_rcvb", "Represents finished sessions peer received bytes", nlabels, label));
- turn_traffic_peer_sentp = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_peer_sentp", "Represents finished sessions peer sent packets", nlabels, label));
- turn_traffic_peer_sentb = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_peer_sentb", "Represents finished sessions peer sent bytes", nlabels, label));
- // Create total finished traffic counter metrics
- turn_total_traffic_rcvp = prom_collector_registry_must_register_metric(prom_counter_new("turn_total_traffic_rcvp", "Represents total finished sessions received packets", 0, NULL));
- turn_total_traffic_rcvb = prom_collector_registry_must_register_metric(prom_counter_new("turn_total_traffic_rcvb", "Represents total finished sessions received bytes", 0, NULL));
- turn_total_traffic_sentp = prom_collector_registry_must_register_metric(prom_counter_new("turn_total_traffic_sentp", "Represents total finished sessions sent packets", 0, NULL));
- turn_total_traffic_sentb = prom_collector_registry_must_register_metric(prom_counter_new("turn_total_traffic_sentb", "Represents total finished sessions sent bytes", 0, NULL));
- // Create total finished sessions traffic for peers counter metrics
- turn_total_traffic_peer_rcvp = prom_collector_registry_must_register_metric(prom_counter_new("turn_total_traffic_peer_rcvp", "Represents total finished sessions peer received packets", 0, NULL));
- turn_total_traffic_peer_rcvb = prom_collector_registry_must_register_metric(prom_counter_new("turn_total_traffic_peer_rcvb", "Represents total finished sessions peer received bytes", 0, NULL));
- 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", 1, (const char*[]) {"type"}));
- promhttp_set_active_collector_registry(NULL);
- unsigned int flags = MHD_USE_DUAL_STACK
- #if MHD_USE_ERROR_LOG
- | MHD_USE_ERROR_LOG
- #endif
- ;
- if (MHD_is_feature_supported(MHD_FEATURE_EPOLL)) {
- #if MHD_USE_EPOLL_INTERNAL_THREAD
- flags |= MHD_USE_EPOLL_INTERNAL_THREAD;
- #else
- flags |= MHD_USE_SELECT_INTERNALLY; //ubuntu 16.04
- #endif
- } else {
- flags |= MHD_USE_SELECT_INTERNALLY;
- }
- struct MHD_Daemon *daemon = promhttp_start_daemon(flags, turn_params.prometheus_port, NULL, NULL);
- if (daemon == NULL) {
- TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "could not start prometheus collector\n");
- return;
- }
- TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "prometheus collector started successfully\n");
- return;
- }
- 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){
- if (turn_params.prometheus == 1){
- const char *label[] = {realm, NULL};
- if (turn_params.prometheus_username_labels){
- label[1] = user;
- }
- if (peer){
- prom_counter_add(turn_traffic_peer_rcvp, rsvp, label);
- prom_counter_add(turn_traffic_peer_rcvb, rsvb, label);
- prom_counter_add(turn_traffic_peer_sentp, sentp, label);
- prom_counter_add(turn_traffic_peer_sentb, sentb, label);
- prom_counter_add(turn_total_traffic_peer_rcvp, rsvp, NULL);
- prom_counter_add(turn_total_traffic_peer_rcvb, rsvb, NULL);
- prom_counter_add(turn_total_traffic_peer_sentp, sentp, NULL);
- prom_counter_add(turn_total_traffic_peer_sentb, sentb, NULL);
- } else {
- prom_counter_add(turn_traffic_rcvp, rsvp, label);
- prom_counter_add(turn_traffic_rcvb, rsvb, label);
- prom_counter_add(turn_traffic_sentp, sentp, label);
- prom_counter_add(turn_traffic_sentb, sentb, label);
- prom_counter_add(turn_total_traffic_rcvp, rsvp, NULL);
- prom_counter_add(turn_total_traffic_rcvb, rsvb, NULL);
- prom_counter_add(turn_total_traffic_sentp, sentp, NULL);
- prom_counter_add(turn_total_traffic_sentb, sentb, NULL);
- }
- }
- }
- void prom_inc_allocation(SOCKET_TYPE type) {
- if (turn_params.prometheus == 1){
- prom_gauge_inc(turn_total_allocations, (const char*[]) {socket_type_name(type)});
- }
- }
- void prom_dec_allocation(SOCKET_TYPE type) {
- if (turn_params.prometheus == 1){
- prom_gauge_dec(turn_total_allocations, (const char*[]) {socket_type_name(type)});
- }
- }
- #else
- void start_prometheus_server(void){
- TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "turnserver compiled without prometheus support\n");
- return;
- }
- #endif /* TURN_NO_PROMETHEUS */
|