{ config, lib, pkgs, ... }: let cfg = config.orbekk.monitoring-server; aliases = import ../data/aliases.nix; in { options = { orbekk.monitoring-server = { enable = lib.mkEnableOption "Enable monitoring server"; grafana-port = lib.mkOption { type = lib.types.int; default = aliases.services.grafana.port; }; grafana-domain = lib.mkOption { type = lib.types.str; default = "grafana.orbekk.com"; }; prometheus-port = lib.mkOption { type = lib.types.int; default = aliases.services.prometheus.port; }; prometheus-exporter-port = lib.mkOption { type = lib.types.int; default = aliases.services.prometheus-exporter.port; }; }; }; config = lib.mkIf cfg.enable { services.grafana = { enable = true; domain = cfg.grafana-domain; port = cfg.grafana-port; addr = "127.0.0.1"; provision = { enable = true; datasources = [ { name = "Prometheus"; type = "prometheus"; access = "proxy"; orgId = 1; editable = false; url = "http://127.0.0.1:${toString cfg.prometheus-port}"; isDefault = true; } ]; }; }; services.prometheus = { enable = true; port = cfg.prometheus-port; scrapeConfigs = [ { job_name = "self"; static_configs = [{ targets = ["127.0.0.1:${toString cfg.prometheus-exporter-port}"]; }]; } ]; exporters = { node = { enable = true; enabledCollectors = [ "systemd" ]; port = cfg.prometheus-exporter-port; }; }; }; # services.nginx.virtualHosts.${cfg.grafana-domain} = { # locations."/" = { # enableACME = true; # forceSSL = true; # proxyPass = "http://127.0.0.1:${toString cfg.grafana-port}"; # proxyWebsockets = true; # }; # }; }; }