{
self,
config,
lib,
...
}:
let
inherit (lib)
enabled
filterAttrs
flatten
mapAttrsToList
;
in
{
services.grafana.provision.datasources.settings = {
datasources = [
{
name = "Prometheus";
type = "prometheus";
url = "http://[::1]:${toString config.services.prometheus.port}";
orgId = 1;
}
];
deleteDatasources = [
{
name = "Prometheus";
orgId = 1;
}
];
};
services.prometheus = enabled {
listenAddress = "[::]";
retentionTime = "1w";
scrapeConfigs =
let
configToScrapeConfig =
hostName:
{ config, ... }:
let
hostConfig = config;
in
hostConfig.services.prometheus.exporters
|> filterAttrs (
exporterName: exporterConfig:
exporterName != "minio"
&& exporterName != "unifi-poller"
&& exporterName != "tor"
&& exporterConfig.enable or false
)
|> mapAttrsToList (
exporterName: exporterConfig: {
job_name = "${exporterName}-${hostName}";
static_configs = [
{
targets = [ "${hostName}:${toString exporterConfig.port}" ];
}
];
}
);
in
self.nixosConfigurations |> mapAttrsToList configToScrapeConfig |> flatten;
};
}