diff options
author | Rory& <root@rory.gay> | 2024-08-28 21:40:53 +0200 |
---|---|---|
committer | Rory& <root@rory.gay> | 2024-08-28 21:40:53 +0200 |
commit | 62fb7f7c127ca8aee56b3903ee207dec766d0a11 (patch) | |
tree | ac38a9bc6228b990687dcb636dc13080bfbd334f /modules/monitoring/synapse.nix | |
parent | Desktop/i686 changes (diff) | |
download | Rory-Open-Architecture-62fb7f7c127ca8aee56b3903ee207dec766d0a11.tar.xz |
Monitoring?
Diffstat (limited to 'modules/monitoring/synapse.nix')
-rw-r--r-- | modules/monitoring/synapse.nix | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/modules/monitoring/synapse.nix b/modules/monitoring/synapse.nix new file mode 100644 index 0000000..12c5562 --- /dev/null +++ b/modules/monitoring/synapse.nix @@ -0,0 +1,111 @@ +{ lib, config, ... }: +let + cfg = config.monitoring; +in +{ + config = lib.mkIf (cfg.monitorAll && config.services.matrix-synapse.enable) { + services.matrix-synapse.settings.listeners = [ + { + type = "http"; + port = 9200; + resources = [ + { + names = [ "metrics" ]; + compress = false; + } + ]; + } + ]; + + #services.matrix-synapse.workers = ( + # let + # workerNames = config.services.matrix-synapse.workers; + + # hasMetricsListener = + # (workerName: + # lib.any ( + # listener: listener.type == "http" && (lib.any (resourceName: resourceName == "metrics") listener.resources) + # ) config.services.matrix-synapse.workers.${workerName}.worker_listeners); + + # workerNamesWithoutMetrics = lib.traceVal lib.filter (workerName: (!hasMetricsListener workerName)) workerNames; + # in + # lib.listToAttrs ( + # lib.imap (index: workerName: { + # name = workerName; + # value = { + # worker_listeners = [ + # { + # type = "http"; + # port = 9200 + index; + # resources = [ + # { + # names = [ "metrics" ]; + # compress = false; + # } + # ]; + # } + # ]; + # }; + # }) workerNamesWithoutMetrics + # ) + #); + + services.matrix-synapse.workers = ( + lib.listToAttrs ( + lib.imap (index: workerName: { + name = workerName; + value = { + worker_listeners = [ + { + type = "http"; + port = 9200 + index + 1; + resources = [ + { + names = [ "metrics" ]; + compress = false; + } + ]; + } + ]; + }; + }) config.monitoring.synapse.workerNames + ) + ); + + services.prometheus.scrapeConfigs = ( + (lib.map (interval: { + job_name = "synapse-main-${toString interval}s"; + scrape_interval = "${toString interval}s"; + static_configs = [ { targets = [ "localhost:9200" ]; } ]; + }) cfg.prometheusScrapeIntervals) + ++ lib.flatten ( + lib.imap ( + index: workerName: + lib.map (interval: { + job_name = "synapse-${workerName}-${toString interval}s"; + scrape_interval = "${toString interval}s"; + static_configs = [ { targets = [ "localhost:${toString (9200 + index + 1)}" ]; } ]; + }) cfg.prometheusScrapeIntervals + ) config.monitoring.synapse.workerNames + ) + ); + + services.grafana.provision.dashboards.settings = { + apiVersion = 1; + providers = [ + { + name = "matrix-synapse"; + orgId = 1; + type = "file"; + options = { + path = builtins.fetchurl { + url = "https://raw.githubusercontent.com/element-hq/synapse/master/contrib/grafana/synapse.json"; + sha256 = "07qlr0waw9phmyd38bv22bn5v303w3397b89l44l3lzwhpnhs16s"; + }; + }; + } + ]; + }; + + }; +} |