prom_server.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #if !defined(TURN_NO_PROMETHEUS)
  2. #include "mainrelay.h"
  3. #include "prom_server.h"
  4. prom_counter_t *turn_traffic_rcvp;
  5. prom_counter_t *turn_traffic_rcvb;
  6. prom_counter_t *turn_traffic_sentp;
  7. prom_counter_t *turn_traffic_sentb;
  8. prom_counter_t *turn_traffic_peer_rcvp;
  9. prom_counter_t *turn_traffic_peer_rcvb;
  10. prom_counter_t *turn_traffic_peer_sentp;
  11. prom_counter_t *turn_traffic_peer_sentb;
  12. prom_counter_t *turn_total_traffic_rcvp;
  13. prom_counter_t *turn_total_traffic_rcvb;
  14. prom_counter_t *turn_total_traffic_sentp;
  15. prom_counter_t *turn_total_traffic_sentb;
  16. prom_counter_t *turn_total_traffic_peer_rcvp;
  17. prom_counter_t *turn_total_traffic_peer_rcvb;
  18. prom_counter_t *turn_total_traffic_peer_sentp;
  19. prom_counter_t *turn_total_traffic_peer_sentb;
  20. int start_prometheus_server(void){
  21. if (turn_params.prometheus == 0){
  22. return 1;
  23. }
  24. prom_collector_registry_default_init();
  25. const char *label[] = {"realm", NULL};
  26. size_t nlabels = 1;
  27. if (turn_params.prometheus_username_labels) {
  28. label[1] = "user";
  29. nlabels++;
  30. }
  31. // Create traffic counter metrics
  32. turn_traffic_rcvp = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_rcvp", "Represents finished sessions received packets", nlabels, label));
  33. turn_traffic_rcvb = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_rcvb", "Represents finished sessions received bytes", nlabels, label));
  34. turn_traffic_sentp = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_sentp", "Represents finished sessions sent packets", nlabels, label));
  35. turn_traffic_sentb = prom_collector_registry_must_register_metric(prom_counter_new("turn_traffic_sentb", "Represents finished sessions sent bytes", nlabels, label));
  36. // Create finished sessions traffic for peers counter metrics
  37. 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));
  38. 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));
  39. 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));
  40. 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));
  41. // Create total finished traffic counter metrics
  42. 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));
  43. 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));
  44. 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));
  45. 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));
  46. // Create total finished sessions traffic for peers counter metrics
  47. 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));
  48. 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));
  49. 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));
  50. 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));
  51. promhttp_set_active_collector_registry(NULL);
  52. struct MHD_Daemon *daemon = promhttp_start_daemon(MHD_USE_SELECT_INTERNALLY, DEFAULT_PROM_SERVER_PORT, NULL, NULL);
  53. if (daemon == NULL) {
  54. return -1;
  55. }
  56. return 0;
  57. }
  58. 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){
  59. if (turn_params.prometheus == 1){
  60. const char *label[] = {realm, NULL};
  61. if (turn_params.prometheus_username_labels){
  62. label[1] = user;
  63. }
  64. if (peer){
  65. prom_counter_add(turn_traffic_peer_rcvp, rsvp, label);
  66. prom_counter_add(turn_traffic_peer_rcvb, rsvb, label);
  67. prom_counter_add(turn_traffic_peer_sentp, sentp, label);
  68. prom_counter_add(turn_traffic_peer_sentb, sentb, label);
  69. prom_counter_add(turn_total_traffic_peer_rcvp, rsvp, NULL);
  70. prom_counter_add(turn_total_traffic_peer_rcvb, rsvb, NULL);
  71. prom_counter_add(turn_total_traffic_peer_sentp, sentp, NULL);
  72. prom_counter_add(turn_total_traffic_peer_sentb, sentb, NULL);
  73. } else {
  74. prom_counter_add(turn_traffic_rcvp, rsvp, label);
  75. prom_counter_add(turn_traffic_rcvb, rsvb, label);
  76. prom_counter_add(turn_traffic_sentp, sentp, label);
  77. prom_counter_add(turn_traffic_sentb, sentb, label);
  78. prom_counter_add(turn_total_traffic_rcvp, rsvp, NULL);
  79. prom_counter_add(turn_total_traffic_rcvb, rsvb, NULL);
  80. prom_counter_add(turn_total_traffic_sentp, sentp, NULL);
  81. prom_counter_add(turn_total_traffic_sentb, sentb, NULL);
  82. }
  83. }
  84. }
  85. #endif /* TURN_NO_PROMETHEUS */