Merge branch 'master' into sr/pf
authorFlorian Forster <octo@collectd.org>
Thu, 13 Sep 2012 11:11:22 +0000 (13:11 +0200)
committerFlorian Forster <octo@collectd.org>
Thu, 13 Sep 2012 11:11:22 +0000 (13:11 +0200)
Conflicts:
src/types.db

src/pf.c [new file with mode: 0644]
src/types.db

diff --git a/src/pf.c b/src/pf.c
new file mode 100644 (file)
index 0000000..93fb500
--- /dev/null
+++ b/src/pf.c
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2010 Pierre-Yves Ritschard <pyr@openbsd.org>
+ * Copyright (c) 2011 Stefan Rinkes <stefan.rinkes@gmail.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include "pfcommon.h"
+
+static int      pf_init(void);
+static int      pf_read(void);
+static void     submit_counter(const char *, const char *, counter_t, int);
+
+char           *pf_device = "/dev/pf";
+
+int
+pf_init(void)
+{
+       struct pf_status        status;
+       int                     pfdev = -1;
+
+       if ((pfdev = open(pf_device, O_RDONLY)) == -1) {
+               ERROR("unable to open %s", pf_device);
+               return (-1);
+       }
+
+       if (ioctl(pfdev, DIOCGETSTATUS, &status) == -1) {
+               ERROR("DIOCGETSTATUS: %i", pfdev);
+               close(pfdev);
+               return (-1);
+       }
+
+       close(pfdev);
+       if (!status.running)
+               return (-1);
+
+       return (0);
+}
+
+int
+pf_read(void)
+{
+       struct pf_status        status;
+       int                     pfdev = -1;
+       int                     i;
+
+       char            *cnames[] = PFRES_NAMES;
+       char            *lnames[] = LCNT_NAMES;
+       char            *names[] = { "searches", "inserts", "removals" };
+
+       if ((pfdev = open(pf_device, O_RDONLY)) == -1) {
+               ERROR("unable to open %s", pf_device);
+               return (-1);
+       }
+
+       if (ioctl(pfdev, DIOCGETSTATUS, &status) == -1) {
+               ERROR("DIOCGETSTATUS: %i", pfdev);
+               close(pfdev);
+               return (-1);
+       }
+
+       close(pfdev);
+
+       for (i = 0; i < PFRES_MAX; i++)
+               submit_counter("pf_counters", cnames[i], status.counters[i], 0);
+       for (i = 0; i < LCNT_MAX; i++)
+               submit_counter("pf_limits", lnames[i], status.lcounters[i], 0);
+       for (i = 0; i < FCNT_MAX; i++)
+               submit_counter("pf_state", names[i], status.fcounters[i], 0);
+       for (i = 0; i < SCNT_MAX; i++)
+               submit_counter("pf_source", names[i], status.scounters[i], 0);
+
+       submit_counter("pf_states", "current", status.states, 1);
+
+       return (0);
+}
+
+void
+submit_counter(const char *type, const char *inst, counter_t val, int usegauge)
+{
+#ifndef TEST
+       value_t         values[1];
+       value_list_t    vl = VALUE_LIST_INIT;
+
+       if (usegauge)
+               values[0].gauge = val;
+       else
+               values[0].counter = val;
+
+       vl.values = values;
+       vl.values_len = 1;
+       sstrncpy (vl.host, hostname_g, sizeof (vl.host));
+       sstrncpy (vl.plugin, "pf", sizeof (vl.plugin));
+       sstrncpy (vl.type, type, sizeof(vl.type));
+       sstrncpy (vl.type_instance, inst, sizeof(vl.type_instance));
+       plugin_dispatch_values(&vl);
+#else
+       printf("%s.%s: %lld\n", type, inst, val);
+#endif
+}
+
+#ifdef TEST
+int
+main(int argc, char *argv[])
+{
+       if (pf_init())
+               err(1, "pf_init");
+       if (pf_read())
+               err(1, "pf_read");
+       return (0);
+}
+#else
+void module_register(void) {
+       plugin_register_init("pf", pf_init);
+       plugin_register_read("pf", pf_read);
+}
+#endif
index ed27b78..3dcb5e7 100644 (file)
@@ -56,12 +56,13 @@ email_check         value:GAUGE:0:U
 email_count            value:GAUGE:0:U
 email_size             value:GAUGE:0:U
 entropy                        value:GAUGE:0:4294967295
+evaluations    value:COUNTER:0:U
 fanspeed               value:GAUGE:0:U
 file_size              value:GAUGE:0:U
 files                  value:GAUGE:0:U
 fork_rate              value:DERIVE:0:U
-frequency              value:GAUGE:0:U
 frequency_offset       value:GAUGE:-1000000:1000000
+frequency              value:GAUGE:0:U
 fscache_stat           value:DERIVE:0:U
 gauge                  value:GAUGE:U:U
 hash_collisions                value:DERIVE:0:U
@@ -109,6 +110,15 @@ node_stat          value:DERIVE:0:U
 node_tx_rate           value:GAUGE:0:127
 operations             value:DERIVE:0:U
 percent                        value:GAUGE:0:100.1
+pf_bytes_in    value:COUNTER:0:U
+pf_bytes_out   value:COUNTER:0:U
+pf_counters    value:COUNTER:0:U
+pf_limits      value:COUNTER:0:U
+pf_packets_in  value:COUNTER:0:U
+pf_packets_out value:COUNTER:0:U
+pf_source      value:COUNTER:0:U
+pf_states      value:GAUGE:0:U
+pf_state       value:COUNTER:0:U
 pg_blks                        value:DERIVE:0:U
 pg_db_size             value:GAUGE:0:U
 pg_n_tup_c             value:DERIVE:0:U
@@ -117,8 +127,8 @@ pg_numbackends              value:GAUGE:0:U
 pg_scan                        value:DERIVE:0:U
 pg_xact                        value:DERIVE:0:U
 ping_droprate          value:GAUGE:0:100
-ping                   value:GAUGE:0:65535
 ping_stddev            value:GAUGE:0:65535
+ping                   value:GAUGE:0:65535
 players                        value:GAUGE:0:1000000
 power                  value:GAUGE:0:U
 protocol_counter       value:DERIVE:0:U
@@ -147,6 +157,8 @@ signal_quality              value:GAUGE:0:U
 snr                    value:GAUGE:0:U
 spam_check             value:GAUGE:0:U
 spam_score             value:GAUGE:U:U
+states_cur     value:GAUGE:0:U
+states_tot     value:COUNTER:0:U
 swap_io                        value:DERIVE:0:U
 swap                   value:GAUGE:0:1099511627776
 tcp_connections                value:GAUGE:0:4294967295
@@ -189,3 +201,4 @@ arc_ratio           value:GAUGE:0:U
 arc_size               current:GAUGE:0:U, target:GAUGE:0:U, minlimit:GAUGE:0:U, maxlimit:GAUGE:0:U
 mysql_qcache           hits:COUNTER:0:U, inserts:COUNTER:0:U, not_cached:COUNTER:0:U, lowmem_prunes:COUNTER:0:U, queries_in_cache:GAUGE:0:U
 mysql_threads          running:GAUGE:0:U, connected:GAUGE:0:U, cached:GAUGE:0:U, created:COUNTER:0:U
+>>>>>>> master