summary refs log blame commit diff
path: root/pkgs/tools/system/collectd/plugins.nix
blob: f1a87847a5ced6b48803fa1fdf7d35ba6d2c2fb6 (plain) (tree)





















                                 
     


            
          
















                                               

                                       































































































                                                           


                            



































































































                                                                             
                                                                     

                  
                                                                     

































































































                                                                                              
{ stdenv
, curl
, darwin
, hiredis
, iptables
, jdk
, libatasmart
, libdbi
, libgcrypt
, libmemcached, cyrus_sasl
, libmodbus
, libmicrohttpd
, libmnl
, libmysqlclient
, libnotify, gdk-pixbuf
, liboping
, libpcap
, libsigrok
, libvirt
, libxml2
, libapparmor, libcap_ng, numactl
, lvm2
, lua
, lm_sensors
, mongoc
, mosquitto
, net-snmp
, postgresql
, protobufc
, python
, rabbitmq-c
, rdkafka
, riemann_c_client
, rrdtool
, udev
, varnish
, yajl
# Defaults to `null` for all supported plugins,
# list of plugin names for a custom build
, enabledPlugins ? null
, ...
}:

let
  # All plugins and their dependencies.
  # Please help complete this!
  plugins = {
    aggregation = {};
    amqp = {
      buildInputs = [ yajl ] ++
        stdenv.lib.optionals stdenv.isLinux [ rabbitmq-c ];
    };
    apache = {
      buildInputs = [ curl ];
    };
    apcups = {};
    apple_sensors = {};
    aquaero = {};
    ascent = {
      buildInputs = [ curl libxml2 ];
    };
    barometer = {};
    battery = {
      buildInputs = stdenv.lib.optionals stdenv.isDarwin [
        darwin.apple_sdk.frameworks.IOKit
      ];
    };
    bind = {
      buildInputs = [ curl libxml2 ];
    };
    ceph = {
      buildInputs = [ yajl ];
    };
    cgroups = {};
    chrony = {};
    conntrack = {};
    contextswitch = {};
    cpu = {};
    cpufreq = {};
    cpusleep = {};
    csv = {};
    curl = {
      buildInputs = [ curl ];
    };
    curl_json = {
      buildInputs = [ curl yajl ];
    };
    curl_xml = {
      buildInputs = [ curl libxml2 ];
    };
    dbi = {
      buildInputs = [ libdbi ];
    };
    df = {};
    disk = {
      buildInputs = stdenv.lib.optionals stdenv.isLinux [
        udev
      ] ++ stdenv.lib.optionals stdenv.isDarwin [
        darwin.apple_sdk.frameworks.IOKit
      ];
    };
    dns = {
      buildInputs = [ libpcap ];
    };
    dpdkevents = {};
    dpdkstat = {};
    drbd = {};
    email = {};
    entropy = {};
    ethstat = {};
    exec = {};
    fhcount = {};
    filecount = {};
    fscache = {};
    gmond = {};
    gps = {};
    grpc = {};
    hddtemp = {};
    hugepages = {};
    intel_pmu = {};
    intel_rdt = {};
    interface = {};
    ipc = {};
    ipmi = {};
    iptables = {
      buildInputs = [
        libpcap
      ] ++ stdenv.lib.optionals stdenv.isLinux [
        iptables libmnl
      ];
    };
    ipvs = {};
    irq = {};
    java = {
      buildInputs = [ jdk libgcrypt libxml2 ];
    };
    load = {};
    logfile = {};
    log_logstash = {
      buildInputs = [ yajl ];
    };
    lpar = {};
    lua = {
      buildInputs = [ lua ];
    };
    lvm = {};
    madwifi = {};
    match_empty_counter = {};
    match_hashed = {};
    match_regex = {};
    match_timediff = {};
    match_value = {};
    mbmon = {};
    mcelog = {};
    md = {};
    memcachec = {
      buildInputs = [ libmemcached cyrus_sasl ];
    };
    memcached = {};
    memory = {};
    mic = {};
    modbus = {
      buildInputs = stdenv.lib.optionals stdenv.isLinux [ libmodbus ];
    };
    mqtt = {
      buildInputs = [ mosquitto ];
    };
    multimeter = {};
    mysql = {
      buildInputs = stdenv.lib.optionals (libmysqlclient != null) [
        libmysqlclient
      ];
    };
    netapp = {};
    netlink = {
      buildInputs = [
        libpcap
      ] ++ stdenv.lib.optionals stdenv.isLinux [
        libmnl
      ];
    };
    network = {
      buildInputs = [ libgcrypt ];
    };
    nfs = {};
    nginx = {
      buildInputs = [ curl ];
    };
    notify_desktop = {
      buildInputs = [ libnotify gdk-pixbuf ];
    };
    notify_email = {};
    notify_nagios = {};
    ntpd = {};
    numa = {};
    nut = {};
    olsrd = {};
    onewire = {};
    openldap = {};
    openvpn = {};
    oracle = {};
    ovs_events = {
      buildInputs = [ yajl ];
    };
    ovs_stats = {
      buildInputs = [ yajl ];
    };
    perl = {};
    pf = {};
    pinba = {
      buildInputs = [ protobufc ];
    };
    ping = {
      buildInputs = [ liboping ];
    };
    postgresql = {
      buildInputs = [ postgresql ];
    };
    powerdns = {};
    processes = {};
    protocols = {};
    python = {
      buildInputs = [ python ];
    };
    redis = {
      buildInputs = [ hiredis ];
    };
    routeros = {};
    rrdcached = {
      buildInputs = [ rrdtool libxml2 ];
    };
    rrdtool = {
      buildInputs = [ rrdtool libxml2 ];
    };
    sensors = {
      buildInputs = stdenv.lib.optionals stdenv.isLinux [ lm_sensors ];
    };
    serial = {};
    sigrok = {
      buildInputs = stdenv.lib.optionals stdenv.isLinux [ libsigrok udev ];
    };
    smart = {
      buildInputs = stdenv.lib.optionals stdenv.isLinux [ libatasmart udev ];
    };
    snmp = {
      buildInputs = stdenv.lib.optionals stdenv.isLinux [ net-snmp ];
    };
    snmp_agent = {
      buildInputs = stdenv.lib.optionals stdenv.isLinux [ net-snmp ];
    };
    statsd = {};
    swap = {};
    synproxy = {};
    syslog = {};
    table = {};
    tail_csv = {};
    tail = {};
    tape = {};
    target_notification = {};
    target_replace = {};
    target_scale = {};
    target_set = {};
    target_v5upgrade = {};
    tcpconns = {};
    teamspeak2 = {};
    ted = {};
    thermal = {};
    threshold = {};
    tokyotyrant = {};
    turbostat = {};
    unixsock = {};
    uptime = {};
    users = {};
    uuid = {};
    varnish = {
      buildInputs = [ curl varnish ];
    };
    virt = {
      buildInputs = [ libvirt libxml2 yajl ] ++
        stdenv.lib.optionals stdenv.isLinux [ lvm2 udev
          # those might be no longer required when https://github.com/NixOS/nixpkgs/pull/51767
          # is merged
          libapparmor numactl libcap_ng
        ];
    };
    vmem = {};
    vserver = {};
    wireless = {};
    write_graphite = {};
    write_http = {
      buildInputs = [ curl yajl ];
    };
    write_kafka = {
      buildInputs = [ yajl rdkafka ];
    };
    write_log = {
      buildInputs = [ yajl ];
    };
    write_mongodb = {
      buildInputs = [ mongoc ];
    };
    write_prometheus = {
      buildInputs = [ protobufc libmicrohttpd ];
    };
    write_redis = {
      buildInputs = [ hiredis ];
    };
    write_riemann = {
      buildInputs = [ protobufc riemann_c_client ];
    };
    write_sensu = {};
    write_tsdb = {};
    xencpu = {};
    xmms = {};
    zfs_arc = {};
    zone = {};
    zookeeper = {};
  };

  configureFlags =
    if enabledPlugins == null
    then []
    else (map (plugin: "--enable-${plugin}") enabledPlugins) ++
    (map (plugin: "--disable-${plugin}")
      (builtins.filter (plugin: ! builtins.elem plugin enabledPlugins)
        (builtins.attrNames plugins))
    );

  pluginBuildInputs = plugin:
        if ! builtins.hasAttr plugin plugins
        then throw "Unknown collectd plugin: ${plugin}"
        else
          let
            pluginAttrs = builtins.getAttr plugin plugins;
          in
          if pluginAttrs ? "buildInputs"
          then pluginAttrs.buildInputs
          else [];

  buildInputs =
    if enabledPlugins == null
    then builtins.concatMap pluginBuildInputs
      (builtins.attrNames plugins)
    else builtins.concatMap pluginBuildInputs enabledPlugins;
in {
  inherit configureFlags buildInputs;
}