vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / monitoring / prometheus / exporters / buildkite-agent.nix
blob0af1e33b2c4455b14af2a614836edecc8b98ec8c
1 { config, lib, pkgs, options, ... }:
3 let
4   cfg = config.services.prometheus.exporters.buildkite-agent;
5   inherit (lib)
6     mkOption
7     types
8     concatStringsSep
9     optionalString
10     literalExpression
11     ;
14   port = 9876;
15   extraOpts = {
16     tokenPath = mkOption {
17       type = types.nullOr types.path;
18       apply = final: if final == null then null else toString final;
19       description = ''
20         The token from your Buildkite "Agents" page.
22         A run-time path to the token file, which is supposed to be provisioned
23         outside of Nix store.
24       '';
25     };
26     interval = mkOption {
27       type = types.str;
28       default = "30s";
29       example = "1min";
30       description = ''
31         How often to update metrics.
32       '';
33     };
34     endpoint = mkOption {
35       type = types.str;
36       default = "https://agent.buildkite.com/v3";
37       description = ''
38         The Buildkite Agent API endpoint.
39       '';
40     };
41     queues = mkOption {
42       type = with types; nullOr (listOf str);
43       default = null;
44       example = literalExpression ''[ "my-queue1" "my-queue2" ]'';
45       description = ''
46         Which specific queues to process.
47       '';
48     };
49   };
50   serviceOpts = {
51     script =
52       let
53         queues = concatStringsSep " " (map (q: "-queue ${q}") cfg.queues);
54       in
55       ''
56         export BUILDKITE_AGENT_TOKEN="$(cat ${toString cfg.tokenPath})"
57         exec ${pkgs.buildkite-agent-metrics}/bin/buildkite-agent-metrics \
58           -backend prometheus \
59           -interval ${cfg.interval} \
60           -endpoint ${cfg.endpoint} \
61           ${optionalString (cfg.queues != null) queues} \
62           -prometheus-addr "${cfg.listenAddress}:${toString cfg.port}" ${concatStringsSep " " cfg.extraFlags}
63       '';
64     serviceConfig = {
65       DynamicUser = false;
66       RuntimeDirectory = "buildkite-agent-metrics";
67     };
68   };