mirror of
				https://github.com/nmasur/dotfiles
				synced 2025-11-04 05:53:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			2582 lines
		
	
	
		
			97 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			2582 lines
		
	
	
		
			97 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  config,
 | 
						|
  pkgs,
 | 
						|
  lib,
 | 
						|
  ...
 | 
						|
}:
 | 
						|
let
 | 
						|
 | 
						|
  inherit (config.nmasur.settings) hostnames;
 | 
						|
  cfg = config.nmasur.presets.services.grafana;
 | 
						|
  promUid = "victoriametrics";
 | 
						|
in
 | 
						|
{
 | 
						|
 | 
						|
  options.nmasur.presets.services.grafana.enable = lib.mkEnableOption "Grafana monitoring service";
 | 
						|
  config = lib.mkIf cfg.enable {
 | 
						|
 | 
						|
    # Allow Grafana to connect to email service
 | 
						|
    secrets.mailpass-grafana = {
 | 
						|
      source = ./mailpass-grafana.age;
 | 
						|
      dest = "${config.secretsDirectory}/mailpass-grafana";
 | 
						|
      owner = "grafana";
 | 
						|
      group = "grafana";
 | 
						|
      permissions = "0440";
 | 
						|
    };
 | 
						|
    systemd.services.mailpass-grafana-secret = {
 | 
						|
      requiredBy = [ "grafana.service" ];
 | 
						|
      before = [ "grafana.service" ];
 | 
						|
    };
 | 
						|
 | 
						|
    services.grafana = {
 | 
						|
      enable = true;
 | 
						|
      settings = {
 | 
						|
        server = {
 | 
						|
          domain = hostnames.metrics;
 | 
						|
          http_addr = "127.0.0.1";
 | 
						|
          http_port = 3000;
 | 
						|
          protocol = "http";
 | 
						|
        };
 | 
						|
        smtp = rec {
 | 
						|
          enabled = true;
 | 
						|
          host = "${config.nmasur.presets.programs.msmtp.host}:465";
 | 
						|
          user = "grafana@${config.nmasur.presets.programs.msmtp.domain}";
 | 
						|
          password = "$__file{${config.secrets.mailpass-grafana.dest}}";
 | 
						|
          from_name = "Grafana";
 | 
						|
          from_address = user;
 | 
						|
        };
 | 
						|
      };
 | 
						|
      provision = {
 | 
						|
        enable = true;
 | 
						|
        datasources.settings.datasources = [
 | 
						|
          {
 | 
						|
            name = "VictoriaMetrics";
 | 
						|
            type = "prometheus";
 | 
						|
            access = "proxy";
 | 
						|
            url = "http://localhost${config.services.victoriametrics.listenAddress}";
 | 
						|
            uid = promUid;
 | 
						|
          }
 | 
						|
        ];
 | 
						|
        # TODO: Add option to pull services from a list like Caddy does
 | 
						|
        dashboards.settings.providers = [
 | 
						|
          {
 | 
						|
            name = "test";
 | 
						|
            type = "file";
 | 
						|
            allowUiUpdates = true;
 | 
						|
            options.path = "${
 | 
						|
              (pkgs.writeTextDir "dashboards/dashboard.json" (
 | 
						|
                builtins.toJSON {
 | 
						|
                  annotations = {
 | 
						|
                    list = [
 | 
						|
                      {
 | 
						|
                        builtIn = 1;
 | 
						|
                        datasource = {
 | 
						|
                          type = "grafana";
 | 
						|
                          uid = "-- Grafana --";
 | 
						|
                        };
 | 
						|
                        enable = true;
 | 
						|
                        hide = true;
 | 
						|
                        iconColor = "rgba(0, 211, 255, 1)";
 | 
						|
                        name = "Annotations & Alerts";
 | 
						|
                        target = {
 | 
						|
                          limit = 100;
 | 
						|
                          matchAny = false;
 | 
						|
                          tags = [ ];
 | 
						|
                          type = "dashboard";
 | 
						|
                        };
 | 
						|
                        type = "dashboard";
 | 
						|
                      }
 | 
						|
                    ];
 | 
						|
                  };
 | 
						|
                  editable = true;
 | 
						|
                  fiscalYearStartMonth = 0;
 | 
						|
                  graphTooltip = 0;
 | 
						|
                  id = 1;
 | 
						|
                  links = [ ];
 | 
						|
                  liveNow = false;
 | 
						|
                  panels = [
 | 
						|
                    {
 | 
						|
                      collapsed = false;
 | 
						|
                      gridPos = {
 | 
						|
                        h = 1;
 | 
						|
                        w = 24;
 | 
						|
                        x = 0;
 | 
						|
                        y = 0;
 | 
						|
                      };
 | 
						|
                      id = 20;
 | 
						|
                      panels = [ ];
 | 
						|
                      title = "Services";
 | 
						|
                      type = "row";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Uptime (Overall)
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          decimals = 2;
 | 
						|
                          mappings = [ ];
 | 
						|
                          max = 1;
 | 
						|
                          min = 0;
 | 
						|
                          noValue = "0";
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "percentage";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "#9d2a37";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "#a8663a";
 | 
						|
                                value = 99;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "#bea25c";
 | 
						|
                                value = 99.8;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "#62895d";
 | 
						|
                                value = 100;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "percentunit";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 3;
 | 
						|
                        x = 0;
 | 
						|
                        y = 1;
 | 
						|
                      };
 | 
						|
                      id = 146;
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "area";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        text = { };
 | 
						|
                        textMode = "value_and_name";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "min(avg_over_time(up))";
 | 
						|
                          instant = false;
 | 
						|
                          legendFormat = "Min";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Uptime";
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Cloudflare Tunnel
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          decimals = 2;
 | 
						|
                          mappings = [ ];
 | 
						|
                          max = 1;
 | 
						|
                          min = 0;
 | 
						|
                          noValue = "0";
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "percentage";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "#720d19";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "#a8663a";
 | 
						|
                                value = 99;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "semi-dark-orange";
 | 
						|
                                value = 100;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "percentunit";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 4;
 | 
						|
                        x = 3;
 | 
						|
                        y = 1;
 | 
						|
                      };
 | 
						|
                      id = 157;
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "area";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        text = { };
 | 
						|
                        textMode = "value_and_name";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = ''systemd_unit_state{name=~"cloudflared-tunnel-.*", state="active"}'';
 | 
						|
                          instant = false;
 | 
						|
                          legendFormat = "{{job}}";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Tunnel";
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Services Uptime
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          mappings = [
 | 
						|
                            {
 | 
						|
                              options = {
 | 
						|
                                "0" = {
 | 
						|
                                  color = "dark-red";
 | 
						|
                                  index = 1;
 | 
						|
                                  text = "Down";
 | 
						|
                                };
 | 
						|
                                "1" = {
 | 
						|
                                  color = "#305387";
 | 
						|
                                  index = 0;
 | 
						|
                                  text = "Up";
 | 
						|
                                };
 | 
						|
                              };
 | 
						|
                              type = "value";
 | 
						|
                            }
 | 
						|
                          ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "red";
 | 
						|
                                value = 80;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 6;
 | 
						|
                        x = 7;
 | 
						|
                        y = 1;
 | 
						|
                      };
 | 
						|
                      id = 13;
 | 
						|
                      links = [ ];
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "none";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "auto";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "nextcloud_up";
 | 
						|
                          instant = false;
 | 
						|
                          interval = "";
 | 
						|
                          legendFormat = "Nextcloud";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = "sabnzbd_status";
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Sabnzbd";
 | 
						|
                          range = true;
 | 
						|
                          refId = "B";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = "radarr_system_status";
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Radarr";
 | 
						|
                          range = true;
 | 
						|
                          refId = "C";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = "readarr_system_status";
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Readarr";
 | 
						|
                          range = true;
 | 
						|
                          refId = "F";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = "sonarr_system_status";
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Sonarr";
 | 
						|
                          range = true;
 | 
						|
                          refId = "D";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = "prowlarr_system_status";
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Prowlarr";
 | 
						|
                          range = true;
 | 
						|
                          refId = "E";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Services";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Gitea Actions (disabled?)
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "#5d664a";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "none";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 3;
 | 
						|
                        x = 13;
 | 
						|
                        y = 1;
 | 
						|
                      };
 | 
						|
                      id = 90;
 | 
						|
                      links = [
 | 
						|
                        {
 | 
						|
                          targetBlank = true;
 | 
						|
                          title = "";
 | 
						|
                          url = "https://${hostnames.git}/admin/runners";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "none";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "auto";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = ''gitea_actions{job="flame"}'';
 | 
						|
                          instant = false;
 | 
						|
                          interval = "";
 | 
						|
                          legendFormat = "__auto";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Gitea Actions";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Video Library
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            fixedColor = "#5a4c30";
 | 
						|
                            mode = "fixed";
 | 
						|
                          };
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "dark-blue";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "bytes";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 3;
 | 
						|
                        x = 16;
 | 
						|
                        y = 1;
 | 
						|
                      };
 | 
						|
                      id = 18;
 | 
						|
                      links = [
 | 
						|
                        {
 | 
						|
                          targetBlank = true;
 | 
						|
                          title = "";
 | 
						|
                          url = "https://${hostnames.stream}";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "none";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "auto";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          "expr" = ''zfs_dataset_used_bytes{name="tank/video",job="swan"}'';
 | 
						|
                          legendFormat = "__auto";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Video Library";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # NAS Storage
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          decimals = 0;
 | 
						|
                          mappings = [ ];
 | 
						|
                          max = 1;
 | 
						|
                          min = 0;
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "percentage";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "super-light-green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "percentunit";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 2;
 | 
						|
                        w = 4;
 | 
						|
                        x = 19;
 | 
						|
                        y = 1;
 | 
						|
                      };
 | 
						|
                      id = 38;
 | 
						|
                      options = {
 | 
						|
                        displayMode = "basic";
 | 
						|
                        minVizHeight = 10;
 | 
						|
                        minVizWidth = 0;
 | 
						|
                        orientation = "horizontal";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        showUnfilled = true;
 | 
						|
                        valueMode = "color";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = ''zfs_dataset_used_bytes{name="tank"} / zfs_dataset_available_bytes{name="tank"}'';
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "{{name}}";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "NAS Storage";
 | 
						|
                      transformations = [ ];
 | 
						|
                      transparent = true;
 | 
						|
                      type = "bargauge";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # NAS Growth
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            fixedColor = "#2b462f";
 | 
						|
                            mode = "fixed";
 | 
						|
                          };
 | 
						|
                          decimals = 0;
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "super-light-green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "bytes";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 10;
 | 
						|
                        w = 4;
 | 
						|
                        x = 19;
 | 
						|
                        y = 3;
 | 
						|
                      };
 | 
						|
                      id = 55;
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "area";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "horizontal";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "auto";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          "expr" = ''delta(zfs_dataset_used_bytes{name="tank"}[1d])'';
 | 
						|
                          hide = false;
 | 
						|
                          instant = false;
 | 
						|
                          interval = "";
 | 
						|
                          legendFormat = "Past Day";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          "expr" = ''delta(zfs_dataset_used_bytes{name="tank"}[7d])'';
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Past Week";
 | 
						|
                          range = true;
 | 
						|
                          refId = "B";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          "expr" = ''delta(zfs_dataset_used_bytes{name="tank"}[30d])'';
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Past Month";
 | 
						|
                          range = true;
 | 
						|
                          refId = "C";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "NAS Growth";
 | 
						|
                      transformations = [ ];
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Caddy Upstreams
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "palette-classic";
 | 
						|
                          };
 | 
						|
                          custom = {
 | 
						|
                            fillOpacity = 69;
 | 
						|
                            lineWidth = 2;
 | 
						|
                            spanNulls = false;
 | 
						|
                          };
 | 
						|
                          mappings = [
 | 
						|
                            {
 | 
						|
                              options = {
 | 
						|
                                "0" = {
 | 
						|
                                  color = "#d13b4d";
 | 
						|
                                  index = 1;
 | 
						|
                                  text = "Down";
 | 
						|
                                };
 | 
						|
                                "1" = {
 | 
						|
                                  color = "#33372c";
 | 
						|
                                  index = 0;
 | 
						|
                                  text = "Up";
 | 
						|
                                };
 | 
						|
                              };
 | 
						|
                              type = "value";
 | 
						|
                            }
 | 
						|
                          ];
 | 
						|
                          noValue = "0";
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                        };
 | 
						|
                        overrides = [
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:${builtins.toString config.services.jellyseerr.port}";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Jellyseerr";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.download}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:${builtins.toString config.services.bazarr.listenPort}";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Bazarr";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.download}/bazarr";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:7878";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Radarr";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.download}/radarr";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:8787";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Readarr";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.download}/readarr";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "unix//run/phpfpm/nextcloud.sock";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Nextcloud";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.content}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:${builtins.toString config.services.calibre-web.listen.port}";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Calibre";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.books}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:8085";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Sabnzbd";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.download}/sabnzbd";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:8086";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "InfluxDB";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.influxdb}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:8096";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Jellyfin";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.stream}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:8989";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Sonarr";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.download}/sonarr";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:9000";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "The Lounge";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.irc}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:9696";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Prowlarr";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.download}/prowlarr";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:${builtins.toString config.services.grafana.settings.server.http_port}";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Grafana";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.metrics}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:${builtins.toString config.services.gitea.settings.server.HTTP_PORT}";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Gitea";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.git}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:${builtins.toString config.services.vaultwarden.config.ROCKET_PORT}";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Vaultwarden";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.secrets}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:8427";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "VictoriaMetrics";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.prometheus}/vmui";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:${builtins.toString config.services.paperless.port}";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Paperless";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.paperless}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "localhost:${builtins.toString config.services.audiobookshelf.port}";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Audiobookshelf";
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                id = "links";
 | 
						|
                                value = [
 | 
						|
                                  {
 | 
						|
                                    targetBlank = true;
 | 
						|
                                    title = "";
 | 
						|
                                    url = "https://${hostnames.audiobooks}";
 | 
						|
                                  }
 | 
						|
                                ];
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                        ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 8;
 | 
						|
                        w = 7;
 | 
						|
                        x = 0;
 | 
						|
                        y = 5;
 | 
						|
                      };
 | 
						|
                      id = 21;
 | 
						|
                      options = {
 | 
						|
                        alignValue = "left";
 | 
						|
                        legend = {
 | 
						|
                          displayMode = "list";
 | 
						|
                          placement = "bottom";
 | 
						|
                          showLegend = false;
 | 
						|
                        };
 | 
						|
                        mergeValues = true;
 | 
						|
                        rowHeight = 0.65;
 | 
						|
                        showValue = "never";
 | 
						|
                        tooltip = {
 | 
						|
                          mode = "single";
 | 
						|
                          sort = "none";
 | 
						|
                        };
 | 
						|
                      };
 | 
						|
                      pluginVersion = "9.5.3";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "caddy_reverse_proxy_upstreams_healthy{}";
 | 
						|
                          instant = false;
 | 
						|
                          legendFormat = "{{upstream}}";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Caddy Upstreams";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "state-timeline";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Stream Stats
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            fixedColor = "#5b79b0";
 | 
						|
                            mode = "fixed";
 | 
						|
                          };
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 6;
 | 
						|
                        x = 7;
 | 
						|
                        y = 5;
 | 
						|
                      };
 | 
						|
                      id = 108;
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "none";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "auto";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = ''increase(http_requests_received_total{endpoint="Sessions/Playing"}[1d])'';
 | 
						|
                          instant = false;
 | 
						|
                          legendFormat = "Past Day";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = ''increase(http_requests_received_total{endpoint="Sessions/Playing"}[7d])'';
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Past Week";
 | 
						|
                          range = true;
 | 
						|
                          refId = "B";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = ''increase(http_requests_received_total{endpoint="Sessions/Playing"}[30d])'';
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Past Month";
 | 
						|
                          range = true;
 | 
						|
                          refId = "C";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Streams";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Media Stats
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            fixedColor = "#895d3a";
 | 
						|
                            mode = "fixed";
 | 
						|
                          };
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 6;
 | 
						|
                        x = 13;
 | 
						|
                        y = 5;
 | 
						|
                      };
 | 
						|
                      id = 105;
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "none";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "auto";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "radarr_movie_downloaded_total";
 | 
						|
                          hide = false;
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "Movies";
 | 
						|
                          range = false;
 | 
						|
                          refId = "C";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "sonarr_series_downloaded_total";
 | 
						|
                          hide = false;
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "TV Shows";
 | 
						|
                          range = false;
 | 
						|
                          refId = "B";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "sonarr_episode_downloaded_total";
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "TV Episodes";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Media";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Downloader Status
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "#bc5460";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 2;
 | 
						|
                        x = 7;
 | 
						|
                        y = 9;
 | 
						|
                      };
 | 
						|
                      id = 134;
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "none";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "name";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "sabnzbd_info";
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "{{status}}";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Downloader";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Downloader Stats
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            fixedColor = "#895d3a";
 | 
						|
                            mode = "fixed";
 | 
						|
                          };
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "bytes";
 | 
						|
                        };
 | 
						|
                        overrides = [
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "Queue";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "unit";
 | 
						|
                                value = "none";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "Completed";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "unit";
 | 
						|
                                value = "none";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                        ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 8;
 | 
						|
                        x = 9;
 | 
						|
                        y = 9;
 | 
						|
                      };
 | 
						|
                      id = 106;
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "none";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "auto";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = "sabnzbd_queue_length";
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Queue";
 | 
						|
                          range = true;
 | 
						|
                          refId = "C";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = "sum(prowlarr_indexer_grabs_total[$__range])";
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Completed";
 | 
						|
                          range = true;
 | 
						|
                          refId = "D";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "increase(sabnzbd_downloaded_bytes[7d])";
 | 
						|
                          hide = false;
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "Week";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "sabnzbd_downloaded_bytes";
 | 
						|
                          hide = false;
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "Total";
 | 
						|
                          range = false;
 | 
						|
                          refId = "B";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Downloads";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Download Requests
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            fixedColor = "#723f3f";
 | 
						|
                            mode = "fixed";
 | 
						|
                          };
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 2;
 | 
						|
                        x = 17;
 | 
						|
                        y = 9;
 | 
						|
                      };
 | 
						|
                      id = 135;
 | 
						|
                      options = {
 | 
						|
                        colorMode = "background";
 | 
						|
                        graphMode = "none";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "auto";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = "radarr_movie_missing_total";
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "Movies";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = "sonarr_episode_missing_total";
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Episodes";
 | 
						|
                          range = true;
 | 
						|
                          refId = "B";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Requests";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # CPU by Host
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          decimals = 2;
 | 
						|
                          mappings = [ ];
 | 
						|
                          max = 1;
 | 
						|
                          min = 0;
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "percentage";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "#a82e3c";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "red";
 | 
						|
                                value = 90;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "percentunit";
 | 
						|
                        };
 | 
						|
                        overrides = [
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "flame";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Flame 🔥";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "swan";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Swan 🦢";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "tempest";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Tempest 🌊";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                        ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 7;
 | 
						|
                        x = 0;
 | 
						|
                        y = 13;
 | 
						|
                      };
 | 
						|
                      id = 72;
 | 
						|
                      options = {
 | 
						|
                        displayMode = "basic";
 | 
						|
                        minVizHeight = 10;
 | 
						|
                        minVizWidth = 0;
 | 
						|
                        orientation = "horizontal";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        showUnfilled = true;
 | 
						|
                        valueMode = "color";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = ''sort_desc(max(irate(node_cpu_seconds_total{instance="127.0.0.1:${builtins.toString config.services.prometheus.exporters.node.port}",mode=~"system|user"}[$__range])) by (job))'';
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "__auto";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "CPU";
 | 
						|
                      transformations = [ ];
 | 
						|
                      transparent = true;
 | 
						|
                      type = "bargauge";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Memory by Host
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          decimals = 2;
 | 
						|
                          mappings = [ ];
 | 
						|
                          max = 1;
 | 
						|
                          min = 0;
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "percentage";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "#ce95ca";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "semi-dark-red";
 | 
						|
                                value = 90;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "percentunit";
 | 
						|
                        };
 | 
						|
                        overrides = [
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "tempest";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Tempest 🌊";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "swan";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Swan 🦢";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "flame";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Flame 🔥";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                        ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 7;
 | 
						|
                        x = 7;
 | 
						|
                        y = 13;
 | 
						|
                      };
 | 
						|
                      id = 73;
 | 
						|
                      options = {
 | 
						|
                        displayMode = "basic";
 | 
						|
                        minVizHeight = 10;
 | 
						|
                        minVizWidth = 0;
 | 
						|
                        orientation = "horizontal";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        showUnfilled = true;
 | 
						|
                        valueMode = "color";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          "expr" = "sort_desc(node_memory_Active_bytes/node_memory_MemTotal_bytes)";
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "{{job}}";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Memory";
 | 
						|
                      transformations = [
 | 
						|
                        {
 | 
						|
                          id = "sortBy";
 | 
						|
                          options = { };
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      transparent = true;
 | 
						|
                      type = "bargauge";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Storage by Host
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          decimals = 2;
 | 
						|
                          mappings = [ ];
 | 
						|
                          max = 1;
 | 
						|
                          min = 0;
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "percentage";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "#dbda61";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "semi-dark-red";
 | 
						|
                                value = 90;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "percentunit";
 | 
						|
                        };
 | 
						|
                        overrides = [
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "flame";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Flame 🔥";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "swan";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Swan 🦢";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                          {
 | 
						|
                            matcher = {
 | 
						|
                              id = "byName";
 | 
						|
                              options = "tempest";
 | 
						|
                            };
 | 
						|
                            properties = [
 | 
						|
                              {
 | 
						|
                                id = "displayName";
 | 
						|
                                value = "Tempest 🌊";
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          }
 | 
						|
                        ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 4;
 | 
						|
                        w = 7;
 | 
						|
                        x = 14;
 | 
						|
                        y = 13;
 | 
						|
                      };
 | 
						|
                      id = 74;
 | 
						|
                      options = {
 | 
						|
                        displayMode = "basic";
 | 
						|
                        minVizHeight = 10;
 | 
						|
                        minVizWidth = 0;
 | 
						|
                        orientation = "horizontal";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        showUnfilled = true;
 | 
						|
                        valueMode = "color";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = ''sort_desc((node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"})'';
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "{{job}}";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Storage";
 | 
						|
                      transformations = [ ];
 | 
						|
                      transparent = true;
 | 
						|
                      type = "bargauge";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Host Bar
 | 
						|
                    {
 | 
						|
                      collapsed = false;
 | 
						|
                      gridPos = {
 | 
						|
                        h = 1;
 | 
						|
                        w = 24;
 | 
						|
                        x = 0;
 | 
						|
                        y = 17;
 | 
						|
                      };
 | 
						|
                      id = 16;
 | 
						|
                      panels = [ ];
 | 
						|
                      repeat = "host";
 | 
						|
                      repeatDirection = "h";
 | 
						|
                      title = "Host";
 | 
						|
                      type = "row";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Host Label
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          mappings = [
 | 
						|
                            {
 | 
						|
                              options = {
 | 
						|
                                flame = {
 | 
						|
                                  color = "orange";
 | 
						|
                                  index = 2;
 | 
						|
                                  text = "Flame 🔥";
 | 
						|
                                };
 | 
						|
                                swan = {
 | 
						|
                                  color = "text";
 | 
						|
                                  index = 1;
 | 
						|
                                  text = "Swan 🦢";
 | 
						|
                                };
 | 
						|
                                tempest = {
 | 
						|
                                  color = "#6fa8e1";
 | 
						|
                                  index = 0;
 | 
						|
                                  text = "Tempest 🌊";
 | 
						|
                                };
 | 
						|
                              };
 | 
						|
                              type = "value";
 | 
						|
                            }
 | 
						|
                          ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "dark-blue";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "none";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 3;
 | 
						|
                        w = 3;
 | 
						|
                        x = 0;
 | 
						|
                        y = 18;
 | 
						|
                      };
 | 
						|
                      id = 19;
 | 
						|
                      options = {
 | 
						|
                        colorMode = "value";
 | 
						|
                        graphMode = "none";
 | 
						|
                        justifyMode = "auto";
 | 
						|
                        orientation = "auto";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "/^job$/";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        textMode = "auto";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = ''node_os_info{job="$host"}'';
 | 
						|
                          format = "table";
 | 
						|
                          legendFormat = "__auto";
 | 
						|
                          range = true;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Host";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "stat";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Vitals
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            mode = "thresholds";
 | 
						|
                          };
 | 
						|
                          decimals = 0;
 | 
						|
                          mappings = [ ];
 | 
						|
                          max = 1;
 | 
						|
                          min = 0;
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "percentage";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "super-light-green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "orange";
 | 
						|
                                value = 70;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "red";
 | 
						|
                                value = 90;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "percentunit";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 5;
 | 
						|
                        w = 6;
 | 
						|
                        x = 3;
 | 
						|
                        y = 18;
 | 
						|
                      };
 | 
						|
                      id = 123;
 | 
						|
                      options = {
 | 
						|
                        displayMode = "basic";
 | 
						|
                        minVizHeight = 10;
 | 
						|
                        minVizWidth = 0;
 | 
						|
                        orientation = "horizontal";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        showUnfilled = true;
 | 
						|
                        valueMode = "color";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = ''max(irate(node_cpu_seconds_total{job="$host",instance="127.0.0.1:${builtins.toString config.services.prometheus.exporters.node.port}",mode=~"system|user"}[$__range]))'';
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "CPU";
 | 
						|
                          range = true;
 | 
						|
                          refId = "C";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          expr = ''(node_memory_Active_bytes{job="$host"})/node_memory_MemTotal_bytes{job="$host"}'';
 | 
						|
                          hide = false;
 | 
						|
                          legendFormat = "Memory";
 | 
						|
                          range = true;
 | 
						|
                          refId = "B";
 | 
						|
                        }
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = ''(node_filesystem_size_bytes{mountpoint="/",job="$host"} - node_filesystem_avail_bytes{mountpoint=~"/",job="$host"}) / node_filesystem_size_bytes{mountpoint="/",job="$host"}'';
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "Storage";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Vitals";
 | 
						|
                      transformations = [ ];
 | 
						|
                      transparent = true;
 | 
						|
                      type = "bargauge";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Top Processes by CPU
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      description = "";
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            fixedColor = "#c4af88";
 | 
						|
                            mode = "fixed";
 | 
						|
                          };
 | 
						|
                          decimals = 2;
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "red";
 | 
						|
                                value = 10000000;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "percentunit";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 8;
 | 
						|
                        w = 6;
 | 
						|
                        x = 12;
 | 
						|
                        y = 18;
 | 
						|
                      };
 | 
						|
                      id = 14;
 | 
						|
                      options = {
 | 
						|
                        displayMode = "basic";
 | 
						|
                        minVizHeight = 10;
 | 
						|
                        minVizWidth = 0;
 | 
						|
                        orientation = "horizontal";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        showUnfilled = true;
 | 
						|
                        valueMode = "color";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = ''topk(5, irate(namedprocess_namegroup_cpu_seconds_total{job="$host"}[$__range]))'';
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "{{groupname}}";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Top Processes - CPU";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "bargauge";
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Top Processes by Memory
 | 
						|
                    {
 | 
						|
                      datasource = {
 | 
						|
                        type = "prometheus";
 | 
						|
                        uid = promUid;
 | 
						|
                      };
 | 
						|
                      fieldConfig = {
 | 
						|
                        defaults = {
 | 
						|
                          color = {
 | 
						|
                            fixedColor = "#afb091";
 | 
						|
                            mode = "fixed";
 | 
						|
                          };
 | 
						|
                          mappings = [ ];
 | 
						|
                          thresholds = {
 | 
						|
                            mode = "absolute";
 | 
						|
                            steps = [
 | 
						|
                              {
 | 
						|
                                color = "green";
 | 
						|
                                value = null;
 | 
						|
                              }
 | 
						|
                              {
 | 
						|
                                color = "red";
 | 
						|
                                value = 10000000;
 | 
						|
                              }
 | 
						|
                            ];
 | 
						|
                          };
 | 
						|
                          unit = "bytes";
 | 
						|
                        };
 | 
						|
                        overrides = [ ];
 | 
						|
                      };
 | 
						|
                      gridPos = {
 | 
						|
                        h = 8;
 | 
						|
                        w = 6;
 | 
						|
                        x = 18;
 | 
						|
                        y = 18;
 | 
						|
                      };
 | 
						|
                      id = 15;
 | 
						|
                      options = {
 | 
						|
                        displayMode = "basic";
 | 
						|
                        minVizHeight = 10;
 | 
						|
                        minVizWidth = 0;
 | 
						|
                        orientation = "horizontal";
 | 
						|
                        reduceOptions = {
 | 
						|
                          calcs = [ "lastNotNull" ];
 | 
						|
                          fields = "";
 | 
						|
                          values = false;
 | 
						|
                        };
 | 
						|
                        showUnfilled = true;
 | 
						|
                        valueMode = "color";
 | 
						|
                      };
 | 
						|
                      pluginVersion = "10.0.2";
 | 
						|
                      targets = [
 | 
						|
                        {
 | 
						|
                          datasource = {
 | 
						|
                            type = "prometheus";
 | 
						|
                            uid = promUid;
 | 
						|
                          };
 | 
						|
                          editorMode = "code";
 | 
						|
                          exemplar = false;
 | 
						|
                          expr = ''topk(5, rate(namedprocess_namegroup_memory_bytes{memtype="resident",job="$host"}[$__range]))'';
 | 
						|
                          instant = true;
 | 
						|
                          legendFormat = "{{groupname}}";
 | 
						|
                          range = false;
 | 
						|
                          refId = "A";
 | 
						|
                        }
 | 
						|
                      ];
 | 
						|
                      title = "Top Processes - Memory";
 | 
						|
                      transparent = true;
 | 
						|
                      type = "bargauge";
 | 
						|
                    }
 | 
						|
                  ];
 | 
						|
 | 
						|
                  refresh = "10s";
 | 
						|
                  schemaVersion = 38;
 | 
						|
                  style = "dark";
 | 
						|
                  tags = [ ];
 | 
						|
                  templating = {
 | 
						|
                    list = [
 | 
						|
                      {
 | 
						|
                        current = {
 | 
						|
                          selected = true;
 | 
						|
                          text = [ "All" ];
 | 
						|
                          value = [ "$__all" ];
 | 
						|
                        };
 | 
						|
                        datasource = {
 | 
						|
                          type = "prometheus";
 | 
						|
                          uid = promUid;
 | 
						|
                        };
 | 
						|
                        definition = "label_values(nodename)";
 | 
						|
                        hide = 0;
 | 
						|
                        includeAll = true;
 | 
						|
                        label = "Host";
 | 
						|
                        multi = true;
 | 
						|
                        name = "host";
 | 
						|
                        options = [ ];
 | 
						|
                        query = {
 | 
						|
                          query = "label_values(nodename)";
 | 
						|
                          refId = "PrometheusVariableQueryEditor-VariableQuery";
 | 
						|
                        };
 | 
						|
                        refresh = 1;
 | 
						|
                        regex = "";
 | 
						|
                        skipUrlSync = false;
 | 
						|
                        sort = 1;
 | 
						|
                        type = "query";
 | 
						|
                      }
 | 
						|
                    ];
 | 
						|
                  };
 | 
						|
                  time = {
 | 
						|
                    from = "now-6h";
 | 
						|
                    to = "now";
 | 
						|
                  };
 | 
						|
                  timepicker = { };
 | 
						|
                  timezone = "";
 | 
						|
                  title = "Main";
 | 
						|
                  uid = "main";
 | 
						|
                  version = 60;
 | 
						|
                  weekStart = "";
 | 
						|
                }
 | 
						|
              ))
 | 
						|
            }/dashboards";
 | 
						|
          }
 | 
						|
        ];
 | 
						|
 | 
						|
        alerting = {
 | 
						|
 | 
						|
          contactPoints.settings.contactPoints = [
 | 
						|
            {
 | 
						|
              name = "grafana-default-email";
 | 
						|
              receivers = [
 | 
						|
                {
 | 
						|
                  uid = "basic-email";
 | 
						|
                  type = "email";
 | 
						|
                  settings.addresses = "grafana@${config.nmasur.presets.programs.msmtp.domain}";
 | 
						|
                }
 | 
						|
              ];
 | 
						|
            }
 | 
						|
          ];
 | 
						|
 | 
						|
          muteTimings = { };
 | 
						|
          policies.settings = {
 | 
						|
            resetPolicies = [ 1 ];
 | 
						|
          };
 | 
						|
 | 
						|
          rules.settings.groups = [
 | 
						|
            {
 | 
						|
              name = "Default";
 | 
						|
              interval = "1m";
 | 
						|
              folder = "Alerts";
 | 
						|
              rules = [
 | 
						|
                {
 | 
						|
                  uid = "cloudflare-tunnel";
 | 
						|
                  title = "Cloudflare Tunnel";
 | 
						|
                  condition = "C";
 | 
						|
                  data = [
 | 
						|
 | 
						|
                    # Query to retrieve the status data
 | 
						|
                    {
 | 
						|
                      refId = "A";
 | 
						|
                      relativeTimeRange = {
 | 
						|
                        from = 600;
 | 
						|
                        to = 0;
 | 
						|
                      };
 | 
						|
                      datasourceUid = promUid;
 | 
						|
                      model = {
 | 
						|
                        editorMode = "code";
 | 
						|
                        expr = ''systemd_unit_state{name=~"cloudflared-tunnel-.*", state="active", job!="tempest"}'';
 | 
						|
                        hide = false;
 | 
						|
                        instant = true;
 | 
						|
                        intervalMs = 1000;
 | 
						|
                        maxDataPoints = 43200;
 | 
						|
                        range = false;
 | 
						|
                        refId = "A";
 | 
						|
                      };
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Reduce to the max level, to ensure no false alarms
 | 
						|
                    {
 | 
						|
                      refId = "B";
 | 
						|
                      relativeTimeRange = {
 | 
						|
                        from = 600;
 | 
						|
                        to = 0;
 | 
						|
                      };
 | 
						|
                      datasourceUid = "__expr__";
 | 
						|
                      model = {
 | 
						|
                        conditions = [
 | 
						|
                          {
 | 
						|
                            evaluator = {
 | 
						|
                              params = [ ];
 | 
						|
                              type = "gt";
 | 
						|
                            };
 | 
						|
                            operator = {
 | 
						|
                              type = "and";
 | 
						|
                            };
 | 
						|
                            query = {
 | 
						|
                              params = [ "B" ];
 | 
						|
                            };
 | 
						|
                            reducer = {
 | 
						|
                              params = [ ];
 | 
						|
                              type = "last";
 | 
						|
                            };
 | 
						|
                            type = "query";
 | 
						|
                          }
 | 
						|
                        ];
 | 
						|
                        datasource = {
 | 
						|
                          type = "__expr__";
 | 
						|
                          uid = "__expr__";
 | 
						|
                        };
 | 
						|
                        expression = "A";
 | 
						|
                        hide = false;
 | 
						|
                        intervalMs = 1000;
 | 
						|
                        maxDataPoints = 43200;
 | 
						|
                        reducer = "max";
 | 
						|
                        refId = "B";
 | 
						|
                        type = "reduce";
 | 
						|
                      };
 | 
						|
                    }
 | 
						|
 | 
						|
                    # Threshold to trigger alarm if below 100% uptime
 | 
						|
                    {
 | 
						|
                      refId = "C";
 | 
						|
                      relativeTimeRange = {
 | 
						|
                        from = 600;
 | 
						|
                        to = 0;
 | 
						|
                      };
 | 
						|
                      datasourceUid = "__expr__";
 | 
						|
                      model = {
 | 
						|
                        conditions = [
 | 
						|
                          {
 | 
						|
                            evaluator = {
 | 
						|
                              params = [ 1 ];
 | 
						|
                              type = "lt";
 | 
						|
                            };
 | 
						|
                            operator = {
 | 
						|
                              type = "and";
 | 
						|
                            };
 | 
						|
                            query = {
 | 
						|
                              params = [ "C" ];
 | 
						|
                            };
 | 
						|
                            reducer = {
 | 
						|
                              params = [ ];
 | 
						|
                              type = "last";
 | 
						|
                            };
 | 
						|
                            type = "query";
 | 
						|
                          }
 | 
						|
                        ];
 | 
						|
                        datasource = {
 | 
						|
                          type = "__expr__";
 | 
						|
                          uid = "__expr__";
 | 
						|
                        };
 | 
						|
                        expression = "B";
 | 
						|
                        hide = false;
 | 
						|
                        intervalMs = 1000;
 | 
						|
                        maxDataPoints = 43200;
 | 
						|
                        refId = "C";
 | 
						|
                        type = "threshold";
 | 
						|
                      };
 | 
						|
                    }
 | 
						|
                  ];
 | 
						|
                  noDataState = "Alerting";
 | 
						|
                  execErrState = "Error";
 | 
						|
                  for = "5m";
 | 
						|
                  annotations = {
 | 
						|
                    description = "Cloudflare Tunnel for {{ index $labels \"job\" }}.";
 | 
						|
                    summary = "Cloudflare Tunnel is down.";
 | 
						|
                  };
 | 
						|
                  isPaused = false;
 | 
						|
                }
 | 
						|
              ];
 | 
						|
            }
 | 
						|
          ];
 | 
						|
 | 
						|
          templates = { };
 | 
						|
        };
 | 
						|
 | 
						|
        # notifiers = [];
 | 
						|
      };
 | 
						|
    };
 | 
						|
 | 
						|
    nmasur.presets.services.caddy.routes = [
 | 
						|
      {
 | 
						|
        match = [ { host = [ hostnames.metrics ]; } ];
 | 
						|
        handle = [
 | 
						|
          {
 | 
						|
            handler = "reverse_proxy";
 | 
						|
            upstreams = [
 | 
						|
              { dial = "localhost:${builtins.toString config.services.grafana.settings.server.http_port}"; }
 | 
						|
            ];
 | 
						|
          }
 | 
						|
        ];
 | 
						|
      }
 | 
						|
    ];
 | 
						|
 | 
						|
    # Configure Cloudflare DNS to point to this machine
 | 
						|
    services.cloudflare-dyndns.domains = [ hostnames.metrics ];
 | 
						|
  };
 | 
						|
}
 |