From 54e16f7a9e059991c85098e5e274bbadb8e93497 Mon Sep 17 00:00:00 2001
From: lassulus <lass@lassul.us>
Date: Tue, 7 Feb 2017 17:21:25 +0100
Subject: move kapacitor to k 3

---
 krebs/3modules/kapacitor.nix | 173 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 173 insertions(+)
 create mode 100644 krebs/3modules/kapacitor.nix

(limited to 'krebs/3modules/kapacitor.nix')

diff --git a/krebs/3modules/kapacitor.nix b/krebs/3modules/kapacitor.nix
new file mode 100644
index 000000000..2ec67c73d
--- /dev/null
+++ b/krebs/3modules/kapacitor.nix
@@ -0,0 +1,173 @@
+{ config, lib, pkgs, ... }:
+
+with builtins;
+with import <stockholm/lib>;
+
+let
+  cfg = config.krebs.kapacitor;
+
+  out = {
+    options.krebs.kapacitor = api;
+    config = mkIf cfg.enable imp;
+  };
+
+  configOptions = recursiveUpdate {
+    hostname = "localhost";
+    data_dir = cfg.dataDir;
+    http = {
+      bind-address = ":9092";
+      auth-enabled = false;
+      log-enabled = false;
+      gtgwrite-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.excluded-subscriptions = {
+        _kapacitor = ["autogen"];
+      };
+    }];
+
+    logging = {
+      file = "STDERR";
+      level = "INFO";
+    };
+
+    deadman = {
+      interval = "10s";
+      id = "{{ .Group }}:NODE_NAME for task '{{ .TaskName }}'";
+      message = "{{ .ID }} is {{ if eq .Level \"OK\" }}alive{{ else }}dead{{ end }}: {{ index .Fields \"emitted\" | printf \"%0.3f\" }} points/INTERVAL.";
+      global = false;
+    };
+  } cfg.extraConfig;
+
+  api = {
+    enable = mkEnableOption "kapacitor";
+    dataDir = mkOption {
+      type = types.str;
+      default = "/var/lib/kapacitor";
+    };
+    user = mkOption {
+      type = types.user;
+      default = {
+        name = "kapacitor";
+        home = cfg.dataDir;
+      };
+    };
+    group = mkOption {
+      type = types.group;
+      default = {
+        name = "kapacitor";
+      };
+    };
+    extraConfig = mkOption {
+      type = types.attrs;
+      default = {};
+    };
+    alarms = mkOption {
+      type = with types; attrsOf (submodule {
+        options = {
+          database = mkOption {
+            type = str;
+          };
+          text = mkOption {
+            type = str;
+          };
+        };
+      });
+      default = {};
+    };
+  };
+
+  configFile = pkgs.runCommand "kapacitor.toml" {} ''
+    ${pkgs.remarshal}/bin/remarshal -if json -of toml \
+      < ${pkgs.writeText "kapacitor.json" (builtins.toJSON configOptions)} \
+      > $out
+  '';
+
+  imp = {
+    users = {
+      groups.${cfg.group.name} = {
+        inherit (cfg.group) name gid;
+      };
+      users.${cfg.user.name} = {
+        inherit (cfg.user) home name uid;
+        createHome = true;
+        group = cfg.group.name;
+      };
+    };
+
+    systemd.services.kapacitor = {
+      description = "kapacitor";
+      after = [ "network.target" ];
+      wantedBy = [ "multi-user.target" ];
+
+      restartIfChanged = true;
+
+      serviceConfig = {
+        Restart = "always";
+        User = cfg.user.name;
+        ExecStart = "${pkgs.kapacitor}/bin/kapacitord -config ${configFile}";
+      };
+    };
+
+    systemd.services.kapacitor-alarms = {
+      description = "kapacitor-alarms";
+      after = [ "kapacitor.service" ];
+      wantedBy = [ "multi-user.target" ];
+
+      restartIfChanged = true;
+
+      serviceConfig = {
+        Type = "oneshot";
+        User = cfg.user.name;
+        ExecStart = pkgs.writeDash "add_alarms" ''
+          ${pkgs.kapacitor}/bin/kapacitor delete tasks \*
+          ${concatStrings (mapAttrsToList (name: alarm: ''
+            ${pkgs.kapacitor}/bin/kapacitor define ${name} \
+              -type batch \
+              -tick ${pkgs.writeText "${name}.tick" alarm.text} \
+              -dbrp ${alarm.database}.default
+            ${pkgs.kapacitor}/bin/kapacitor enable ${name}
+          '') cfg.alarms)}
+        '';
+      };
+    };
+
+  };
+in out
-- 
cgit v1.2.3