python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / nixos / modules / services / networking / trickster.nix
blob0b696e412b4d97bf92b5abec3dc1556258909869
1 { config, lib, pkgs, ... }:
3 with lib;
5 let
6   cfg = config.services.trickster;
7 in
9   imports = [
10     (mkRenamedOptionModule [ "services" "trickster" "origin" ] [ "services" "trickster" "origin-url" ])
11   ];
13   options = {
14     services.trickster = {
15       enable = mkOption {
16         type = types.bool;
17         default = false;
18         description = lib.mdDoc ''
19           Enable Trickster.
20         '';
21       };
23       package = mkOption {
24         type = types.package;
25         default = pkgs.trickster;
26         defaultText = literalExpression "pkgs.trickster";
27         description = lib.mdDoc ''
28           Package that should be used for trickster.
29         '';
30       };
32       configFile = mkOption {
33         type = types.nullOr types.path;
34         default = null;
35         description = lib.mdDoc ''
36           Path to configuration file.
37         '';
38       };
40       instance-id = mkOption {
41         type = types.nullOr types.int;
42         default = null;
43         description = lib.mdDoc ''
44           Instance ID for when running multiple processes (default null).
45         '';
46       };
48       log-level = mkOption {
49         type = types.str;
50         default = "info";
51         description = lib.mdDoc ''
52           Level of Logging to use (debug, info, warn, error) (default "info").
53         '';
54       };
56       metrics-port = mkOption {
57         type = types.port;
58         default = 8082;
59         description = lib.mdDoc ''
60           Port that the /metrics endpoint will listen on.
61         '';
62       };
64       origin-type = mkOption {
65         type = types.enum [ "prometheus" "influxdb" ];
66         default = "prometheus";
67         description = lib.mdDoc ''
68           Type of origin (prometheus, influxdb)
69         '';
70       };
72       origin-url = mkOption {
73         type = types.str;
74         default = "http://prometheus:9090";
75         description = lib.mdDoc ''
76           URL to the Origin. Enter it like you would in grafana, e.g., http://prometheus:9090 (default http://prometheus:9090).
77         '';
78       };
80       profiler-port = mkOption {
81         type = types.nullOr types.port;
82         default = null;
83         description = lib.mdDoc ''
84           Port that the /debug/pprof endpoint will listen on.
85         '';
86       };
88       proxy-port = mkOption {
89         type = types.port;
90         default = 9090;
91         description = lib.mdDoc ''
92           Port that the Proxy server will listen on.
93         '';
94       };
96     };
97   };
99   config = mkIf cfg.enable {
100     systemd.services.trickster = {
101       description = "Reverse proxy cache and time series dashboard accelerator";
102       after = [ "network.target" ];
103       wantedBy = [ "multi-user.target" ];
104       serviceConfig = {
105         DynamicUser = true;
106         ExecStart = ''
107           ${cfg.package}/bin/trickster \
108           -log-level ${cfg.log-level} \
109           -metrics-port ${toString cfg.metrics-port} \
110           -origin-type ${cfg.origin-type} \
111           -origin-url ${cfg.origin-url} \
112           -proxy-port ${toString cfg.proxy-port} \
113           ${optionalString (cfg.configFile != null) "-config ${cfg.configFile}"} \
114           ${optionalString (cfg.profiler-port != null) "-profiler-port ${cfg.profiler-port}"} \
115           ${optionalString (cfg.instance-id != null) "-instance-id ${cfg.instance-id}"}
116         '';
117         ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
118         Restart = "always";
119       };
120     };
121   };
123   meta.maintainers = with maintainers; [ _1000101 ];