prometheus-imap-mailstat-exporter: init at 0.0.1

To be able to monitor the number of (unread) mails in mailboxes

Changed files
+102
nixos
modules
services
monitoring
prometheus
pkgs
servers
monitoring
top-level
+1
nixos/modules/services/monitoring/prometheus/exporters.nix
···
"fritzbox"
"graphite"
"idrac"
+
"imap-mailstat"
"influxdb"
"ipmi"
"json"
+71
nixos/modules/services/monitoring/prometheus/exporters/imap-mailstat.nix
···
+
{ config, lib, pkgs, options }:
+
+
with lib;
+
+
let
+
cfg = config.services.prometheus.exporters.imap-mailstat;
+
valueToString = value:
+
if (builtins.typeOf value == "string") then "\"${value}\""
+
else (
+
if (builtins.typeOf value == "int") then "${toString value}"
+
else (
+
if (builtins.typeOf value == "bool") then (if value then "true" else "false")
+
else "XXX ${toString value}"
+
)
+
);
+
createConfigFile = accounts:
+
# unfortunately on toTOML yet
+
# https://github.com/NixOS/nix/issues/3929
+
pkgs.writeText "imap-mailstat-exporter.conf" ''
+
${concatStrings (attrValues (mapAttrs (name: config: "[[Accounts]]\nname = \"${name}\"\n${concatStrings (attrValues (mapAttrs (k: v: "${k} = ${valueToString v}\n") config))}") accounts))}
+
'';
+
mkOpt = type: description: mkOption {
+
type = types.nullOr type;
+
default = null;
+
description = lib.mdDoc description;
+
};
+
accountOptions.options = {
+
mailaddress = mkOpt types.str "Your email address (at the moment used as login name)";
+
username = mkOpt types.str "If empty string mailaddress value is used";
+
password = mkOpt types.str "";
+
serveraddress = mkOpt types.str "mailserver name or address";
+
serverport = mkOpt types.int "imap port number (at the moment only tls connection is supported)";
+
starttls = mkOpt types.bool "set to true for using STARTTLS to start a TLS connection";
+
};
+
in
+
{
+
port = 8081;
+
extraOpts = {
+
oldestUnseenDate = mkOption {
+
type = types.bool;
+
default = false;
+
description = lib.mdDoc ''
+
Enable metric with timestamp of oldest unseen mail
+
'';
+
};
+
accounts = mkOption {
+
type = types.attrsOf (types.submodule accountOptions);
+
default = {};
+
description = lib.mdDoc ''
+
Accounts to monitor
+
'';
+
};
+
configurationFile = mkOption {
+
type = types.path;
+
example = "/path/to/config-file";
+
description = lib.mdDoc ''
+
File containing the configuration
+
'';
+
};
+
};
+
serviceOpts = {
+
serviceConfig = {
+
ExecStart = ''
+
${pkgs.prometheus-imap-mailstat-exporter}/bin/imap-mailstat-exporter \
+
-config ${createConfigFile cfg.accounts} \
+
${optionalString cfg.oldestUnseenDate "-oldestunseendate"} \
+
${concatStringsSep " \\\n " cfg.extraFlags}
+
'';
+
};
+
};
+
}
+29
pkgs/servers/monitoring/prometheus/imap-mailstat-exporter.nix
···
+
{ lib
+
, buildGoModule
+
, fetchFromGitHub
+
, installShellFiles
+
}:
+
+
buildGoModule rec {
+
pname = "imap-mailstat-exporter";
+
version = "0.0.1";
+
+
src = fetchFromGitHub {
+
owner = "bt909";
+
repo = "imap-mailstat-exporter";
+
rev = "refs/tags/v${version}";
+
hash = "sha256-aR/94C9SI+FPs3zg3bpexmgGYrhxghyHwpXj25x0yuw=";
+
};
+
+
vendorSha256 = "sha256-M5Ho4CiO5DC6mWzenXEo2pu0WLHj5S8AV3oEFwD31Sw=";
+
+
nativeBuildInputs = [ installShellFiles ];
+
+
meta = with lib; {
+
description = "Export Prometheus-style metrics about how many emails you have in your INBOX and in additional configured folders";
+
homepage = "https://github.com/bt909/imap-mailstat-exporter";
+
license = licenses.mit;
+
maintainers = with maintainers; [ raboof ];
+
platforms = platforms.linux;
+
};
+
}
+1
pkgs/top-level/all-packages.nix
···
prometheus-graphite-exporter = callPackage ../servers/monitoring/prometheus/graphite-exporter.nix { };
prometheus-haproxy-exporter = callPackage ../servers/monitoring/prometheus/haproxy-exporter.nix { };
prometheus-idrac-exporter = callPackage ../servers/monitoring/prometheus/idrac-exporter.nix { };
+
prometheus-imap-mailstat-exporter = callPackage ../servers/monitoring/prometheus/imap-mailstat-exporter.nix { };
prometheus-influxdb-exporter = callPackage ../servers/monitoring/prometheus/influxdb-exporter.nix { };
prometheus-ipmi-exporter = callPackage ../servers/monitoring/prometheus/ipmi-exporter.nix { };
prometheus-jitsi-exporter = callPackage ../servers/monitoring/prometheus/jitsi-exporter.nix { };