Merge pull request #116037 from petabyteboy/feature/jitsi-exporter

prometheus-jitsi-exporter: init at 0.2.18

Changed files
+88
nixos
modules
services
monitoring
prometheus
tests
pkgs
servers
monitoring
prometheus
top-level
+1
nixos/modules/services/monitoring/prometheus/exporters.nix
···
"dovecot"
"fritzbox"
"json"
"keylight"
"knot"
"lnd"
···
"dovecot"
"fritzbox"
"json"
+
"jitsi"
"keylight"
"knot"
"lnd"
+40
nixos/modules/services/monitoring/prometheus/exporters/jitsi.nix
···
···
+
{ config, lib, pkgs, options }:
+
+
with lib;
+
+
let
+
cfg = config.services.prometheus.exporters.jitsi;
+
in
+
{
+
port = 9700;
+
extraOpts = {
+
url = mkOption {
+
type = types.str;
+
default = "http://localhost:8080/colibri/stats";
+
description = ''
+
Jitsi Videobridge metrics URL to monitor.
+
This is usually /colibri/stats on port 8080 of the jitsi videobridge host.
+
'';
+
};
+
interval = mkOption {
+
type = types.str;
+
default = "30s";
+
example = "1min";
+
description = ''
+
How often to scrape new data
+
'';
+
};
+
};
+
serviceOpts = {
+
serviceConfig = {
+
ExecStart = ''
+
${pkgs.prometheus-jitsi-exporter}/bin/jitsiexporter \
+
-url ${escapeShellArg cfg.url} \
+
-host ${cfg.listenAddress} \
+
-port ${toString cfg.port} \
+
-interval ${toString cfg.interval} \
+
${concatStringsSep " \\\n " cfg.extraFlags}
+
'';
+
};
+
};
+
}
+23
nixos/tests/prometheus-exporters.nix
···
'';
};
json = {
exporterConfig = {
enable = true;
···
'';
};
+
jitsi = {
+
exporterConfig = {
+
enable = true;
+
};
+
metricProvider = {
+
systemd.services.prometheus-jitsi-exporter.after = [ "jitsi-videobridge2.service" ];
+
services.jitsi-videobridge = {
+
enable = true;
+
apis = [ "colibri" "rest" ];
+
};
+
};
+
exporterTest = ''
+
wait_for_unit("jitsi-videobridge2.service")
+
wait_for_open_port(8080)
+
wait_for_unit("prometheus-jitsi-exporter.service")
+
wait_for_open_port(9700)
+
wait_until_succeeds(
+
'journalctl -eu prometheus-jitsi-exporter.service -o cat | grep -q "key=participants"'
+
)
+
succeed("curl -sSf 'localhost:9700/metrics' | grep -q 'jitsi_participants 0'")
+
'';
+
};
+
json = {
exporterConfig = {
enable = true;
+23
pkgs/servers/monitoring/prometheus/jitsi-exporter.nix
···
···
+
{ lib, buildGoModule, fetchgit, nixosTests }:
+
+
buildGoModule rec {
+
pname = "jitsiexporter";
+
version = "0.2.18";
+
+
src = fetchgit {
+
url = "https://git.xsfx.dev/prometheus/jitsiexporter";
+
rev = "v${version}";
+
sha256 = "1cf46wp96d9dwlwlffcgbcr0v3xxxfdv6il0zqkm2i7cfsfw0skf";
+
};
+
+
vendorSha256 = null;
+
+
passthru.tests = { inherit (nixosTests.prometheus-exporters) jitsi; };
+
+
meta = with lib; {
+
description = "Export Jitsi Videobridge metrics to Prometheus";
+
homepage = "https://git.xsfx.dev/prometheus/jitsiexporter";
+
license = licenses.mit;
+
maintainers = with maintainers; [ petabyteboy ];
+
};
+
}
+1
pkgs/top-level/all-packages.nix
···
prometheus-fritzbox-exporter = callPackage ../servers/monitoring/prometheus/fritzbox-exporter.nix { };
prometheus-gitlab-ci-pipelines-exporter = callPackage ../servers/monitoring/prometheus/gitlab-ci-pipelines-exporter.nix { };
prometheus-haproxy-exporter = callPackage ../servers/monitoring/prometheus/haproxy-exporter.nix { };
prometheus-json-exporter = callPackage ../servers/monitoring/prometheus/json-exporter.nix { };
prometheus-keylight-exporter = callPackage ../servers/monitoring/prometheus/keylight-exporter.nix { };
prometheus-knot-exporter = callPackage ../servers/monitoring/prometheus/knot-exporter.nix { };
···
prometheus-fritzbox-exporter = callPackage ../servers/monitoring/prometheus/fritzbox-exporter.nix { };
prometheus-gitlab-ci-pipelines-exporter = callPackage ../servers/monitoring/prometheus/gitlab-ci-pipelines-exporter.nix { };
prometheus-haproxy-exporter = callPackage ../servers/monitoring/prometheus/haproxy-exporter.nix { };
+
prometheus-jitsi-exporter = callPackage ../servers/monitoring/prometheus/jitsi-exporter.nix { };
prometheus-json-exporter = callPackage ../servers/monitoring/prometheus/json-exporter.nix { };
prometheus-keylight-exporter = callPackage ../servers/monitoring/prometheus/keylight-exporter.nix { };
prometheus-knot-exporter = callPackage ../servers/monitoring/prometheus/knot-exporter.nix { };