From d8a52b784450909780f771d6550444ed66d6b667 Mon Sep 17 00:00:00 2001
From: lassulus <lass@lassul.us>
Date: Mon, 9 Jan 2017 17:09:52 +0100
Subject: [PATCH] l 3: add kapacitor service

---
 lass/3modules/default.nix   |   1 +
 lass/3modules/kapacitor.nix | 101 ++++++++++++++++++++++++++++++++++++
 2 files changed, 102 insertions(+)
 create mode 100644 lass/3modules/kapacitor.nix

diff --git a/lass/3modules/default.nix b/lass/3modules/default.nix
index 1046fb7cd..2bf2df8b3 100644
--- a/lass/3modules/default.nix
+++ b/lass/3modules/default.nix
@@ -9,6 +9,7 @@ _:
     ./urxvtd.nix
     ./usershadow.nix
     ./xresources.nix
+    ./kapacitor.nix
     ./telegraf.nix
   ];
 }
diff --git a/lass/3modules/kapacitor.nix b/lass/3modules/kapacitor.nix
new file mode 100644
index 000000000..023801987
--- /dev/null
+++ b/lass/3modules/kapacitor.nix
@@ -0,0 +1,101 @@
+{ config, lib, pkgs, ... }:
+
+with builtins;
+with lib;
+
+let
+  cfg = config.lass.kapacitor;
+
+  out = {
+    options.lass.kapacitor = api;
+    config = mkIf cfg.enable imp;
+  };
+
+  api = {
+    enable = mkEnableOption "kapacitor";
+    dataDir = mkOption {
+      type = types.str;
+      default = "/var/lib/kapacitor";
+    };
+    user = mkOption {
+      type = types.str;
+      default = "kapacitor";
+    };
+    config = mkOption {
+      type = types.str;
+      #TODO: find a good default
+      default = ''
+        hostname = "localhost"
+        data_dir = "/home/lass/.kapacitor"
+
+        [http]
+          bind-address = ":9092"
+          auth-enabled = false
+          log-enabled = true
+          write-tracing = false
+          pprof-enabled = false
+          https-enabled = false
+          https-certificate = "/etc/ssl/kapacitor.pem"
+          shutdown-timeout = "10s"
+          shared-secret = ""
+
+        [replay]
+          dir = "${cfg.dataDir}/replay"
+
+        [storage]
+          boltdb = "${cfg.dataDir}/kapacitor.db"
+
+        [task]
+          dir = "${cfg.dataDir}/tasks"
+          snapshot-interval = "1m0s"
+
+        [[influxdb]]
+          enabled = true
+          name = "default"
+          default = false
+          urls = ["http://localhost:8086"]
+          username = ""
+          password = ""
+          ssl-ca = ""
+          ssl-cert = ""
+          ssl-key = ""
+          insecure-skip-verify = false
+          timeout = "0s"
+          disable-subscriptions = false
+          subscription-protocol = "http"
+          udp-bind = ""
+          udp-buffer = 1000
+          udp-read-buffer = 0
+          startup-timeout = "5m0s"
+          subscriptions-sync-interval = "1m0s"
+          [influxdb.subscriptions]
+          [influxdb.excluded-subscriptions]
+            _kapacitor = ["autogen"]
+
+        [logging]
+          file = "STDERR"
+          level = "INFO"
+      '';
+      description = "configuration kapacitor is started with";
+    };
+  };
+
+  configFile = pkgs.writeText "kapacitor.conf" cfg.config;
+
+  imp = {
+
+    systemd.services.kapacitor = {
+      description = "kapacitor";
+      after = [ "network.target" ];
+      wantedBy = [ "multi-user.target" ];
+
+      restartIfChanged = true;
+
+      serviceConfig = {
+        Restart = "always";
+        ExecStart = "${pkgs.kapacitor}/bin/kapacitord -config ${configFile}";
+      };
+    };
+  };
+
+in out