about summary refs log tree commit diff
path: root/pkgs/tools/system/collectd/plugins.nix
blob: 7202ec795e8b291c6cf538be81cbd318f4098077 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
{ lib, stdenv
, curl
, hiredis
, iptables
, jdk
, libatasmart
, libdbi
, libesmtp
, libgcrypt
, libmemcached, cyrus_sasl
, libmodbus
, libmicrohttpd
, libmnl
, libmysqlclient
, libnotify, gdk-pixbuf
, liboping
, libpcap
, libsigrok
, libvirt
, libxml2
, lua
, lvm2
, lm_sensors
, mongoc
, mosquitto
, net-snmp
, openldap
, openipmi
, perl
, postgresql
, protobufc
, python3
, rabbitmq-c
, rdkafka
, riemann_c_client
, rrdtool
, udev
, varnish
, xen
, yajl
, IOKit
# Defaults to `null` for all supported plugins (except xen, which is marked as
# insecure), otherwise a list of plugin names for a custom build
, enabledPlugins ? null
, ...
}:

let
  # Plugins that have dependencies.
  # Please help to extend these!
  plugins = {
    amqp.buildInputs = [
      yajl
    ] ++ lib.optionals stdenv.hostPlatform.isLinux [ rabbitmq-c ];
    apache.buildInputs = [ curl ];
    ascent.buildInputs = [ curl libxml2 ];
    battery.buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
      IOKit
    ];
    bind.buildInputs = [ curl libxml2 ];
    ceph.buildInputs = [ yajl ];
    curl.buildInputs = [ curl ];
    curl_json.buildInputs = [ curl yajl ];
    curl_xml.buildInputs = [ curl libxml2 ];
    dbi.buildInputs = [ libdbi ];
    disk.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
      udev
    ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
      IOKit
    ];
    dns.buildInputs = [ libpcap ];
    ipmi.buildInputs = [ openipmi ];
    iptables.buildInputs = [
      libpcap
    ] ++ lib.optionals stdenv.hostPlatform.isLinux [
      iptables libmnl
    ];
    java.buildInputs = [ jdk libgcrypt libxml2 ];
    log_logstash.buildInputs = [ yajl ];
    lua.buildInputs = [ lua ];
    memcachec.buildInputs = [ libmemcached cyrus_sasl ];
    modbus.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ libmodbus ];
    mqtt.buildInputs = [ mosquitto ];
    mysql.buildInputs = lib.optionals (libmysqlclient != null) [
      libmysqlclient
    ];
    netlink.buildInputs = [
      libpcap
    ] ++ lib.optionals stdenv.hostPlatform.isLinux [
      libmnl
    ];
    network.buildInputs = [ libgcrypt ];
    nginx.buildInputs = [ curl ];
    notify_desktop.buildInputs = [ libnotify gdk-pixbuf ];
    notify_email.buildInputs = [ libesmtp ];
    openldap.buildInputs = [ openldap ];
    ovs_events.buildInputs = [ yajl ];
    ovs_stats.buildInputs = [ yajl ];
    perl.buildInputs = [ perl ];
    pinba.buildInputs = [ protobufc ];
    ping.buildInputs = [ liboping ];
    postgresql.buildInputs = [ postgresql ];
    python.buildInputs = [ python3 ];
    redis.buildInputs = [ hiredis ];
    rrdcached.buildInputs = [ rrdtool libxml2 ];
    rrdtool.buildInputs = [ rrdtool libxml2 ];
    sensors.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ lm_sensors ];
    sigrok.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ libsigrok udev ];
    smart.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ libatasmart udev ];
    snmp.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ net-snmp ];
    snmp_agent.buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ net-snmp ];
    varnish.buildInputs = [ curl varnish ];
    virt.buildInputs = [
      libvirt libxml2 yajl
    ] ++ lib.optionals stdenv.hostPlatform.isLinux [ lvm2 udev ];
    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 ];
    xencpu.buildInputs = [ xen ];
  };

  configureFlags = lib.optionals (enabledPlugins != null) (
    [ "--disable-all-plugins" ]
    ++ (map (plugin: "--enable-${plugin}") enabledPlugins));

  pluginBuildInputs = plugin:
    lib.optionals (plugins ? ${plugin} && plugins.${plugin} ? buildInputs)
    plugins.${plugin}.buildInputs;

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