67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| 
								 | 
							
								{ options, config, lib, pkgs, ... }:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								with lib;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let
							 | 
						||
| 
								 | 
							
								  cfg = config.services.grafana_reporter;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								in {
							 | 
						||
| 
								 | 
							
								  options.services.grafana_reporter = {
							 | 
						||
| 
								 | 
							
								    enable = mkEnableOption "grafana_reporter";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    grafana = {
							 | 
						||
| 
								 | 
							
								      protocol = mkOption {
							 | 
						||
| 
								 | 
							
								        description = "Grafana protocol.";
							 | 
						||
| 
								 | 
							
								        default = "http";
							 | 
						||
| 
								 | 
							
								        type = types.enum ["http" "https"];
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								      addr = mkOption {
							 | 
						||
| 
								 | 
							
								        description = "Grafana address.";
							 | 
						||
| 
								 | 
							
								        default = "127.0.0.1";
							 | 
						||
| 
								 | 
							
								        type = types.str;
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								      port = mkOption {
							 | 
						||
| 
								 | 
							
								        description = "Grafana port.";
							 | 
						||
| 
								 | 
							
								        default = 3000;
							 | 
						||
| 
								 | 
							
								        type = types.int;
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    addr = mkOption {
							 | 
						||
| 
								 | 
							
								      description = "Listening address.";
							 | 
						||
| 
								 | 
							
								      default = "127.0.0.1";
							 | 
						||
| 
								 | 
							
								      type = types.str;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    port = mkOption {
							 | 
						||
| 
								 | 
							
								      description = "Listening port.";
							 | 
						||
| 
								 | 
							
								      default = 8686;
							 | 
						||
| 
								 | 
							
								      type = types.int;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    templateDir = mkOption {
							 | 
						||
| 
								 | 
							
								      description = "Optional template directory to use custom tex templates";
							 | 
						||
| 
								 | 
							
								      default = "${pkgs.grafana_reporter}";
							 | 
						||
| 
								 | 
							
								      type = types.str;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  config = mkIf cfg.enable {
							 | 
						||
| 
								 | 
							
								    systemd.services.grafana_reporter = {
							 | 
						||
| 
								 | 
							
								      description = "Grafana Reporter Service Daemon";
							 | 
						||
| 
								 | 
							
								      wantedBy = ["multi-user.target"];
							 | 
						||
| 
								 | 
							
								      after = ["network.target"];
							 | 
						||
| 
								 | 
							
								      serviceConfig = let
							 | 
						||
| 
								 | 
							
								        args = lib.concatSepString " " [
							 | 
						||
| 
								 | 
							
								          "-proto ${cfg.grafana.protocol}://"
							 | 
						||
| 
								 | 
							
								          "-ip ${cfg.grafana.addr}:${toString cfg.grafana.port}"
							 | 
						||
| 
								 | 
							
								          "-port :${toString cfg.port}"
							 | 
						||
| 
								 | 
							
								          "-templates ${cfg.templateDir}"
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								      in {
							 | 
						||
| 
								 | 
							
								        ExecStart = "${pkgs.grafana_reporter.bin}/bin/grafana-reporter ${args}";
							 | 
						||
| 
								 | 
							
								      };
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								}
							 |