diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2018-04-04 03:30:29 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2018-04-04 03:50:30 +0200 |
commit | d03dfda4410139a0a2a82d1d844e2e612ccf77c3 (patch) | |
tree | 6ce22441313ae6f49e92a4318e941f2160b39d0b /app-metrics/collectd/files | |
parent | app-admin/collectd: Move from virtual/mysql to virtual/libmysqlclient (diff) | |
download | gentoo-d03dfda4410139a0a2a82d1d844e2e612ccf77c3.tar.gz gentoo-d03dfda4410139a0a2a82d1d844e2e612ccf77c3.tar.bz2 gentoo-d03dfda4410139a0a2a82d1d844e2e612ccf77c3.zip |
app-metrics/collectd: Move package from app-admin/collectd
Package-Manager: Portage-2.3.26, Repoman-2.3.7
RepoMan-Options: --force
Diffstat (limited to 'app-metrics/collectd/files')
-rw-r--r-- | app-metrics/collectd/files/collectd-5.6.0-gentoo.patch | 153 | ||||
-rw-r--r-- | app-metrics/collectd/files/collectd-5.7.2-CVE-2017-16820.patch | 39 | ||||
-rw-r--r-- | app-metrics/collectd/files/collectd-5.7.2-issue-2443.patch | 160 | ||||
-rw-r--r-- | app-metrics/collectd/files/collectd-5.7.2-varnish-5.2+.patch | 1018 | ||||
-rw-r--r-- | app-metrics/collectd/files/collectd.confd-r2 | 49 | ||||
-rw-r--r-- | app-metrics/collectd/files/collectd.initd-r2 | 70 | ||||
-rw-r--r-- | app-metrics/collectd/files/collectd.logrotate | 9 | ||||
-rw-r--r-- | app-metrics/collectd/files/collectd.tmpfile | 1 |
8 files changed, 1499 insertions, 0 deletions
diff --git a/app-metrics/collectd/files/collectd-5.6.0-gentoo.patch b/app-metrics/collectd/files/collectd-5.6.0-gentoo.patch new file mode 100644 index 000000000000..dd8c1576354c --- /dev/null +++ b/app-metrics/collectd/files/collectd-5.6.0-gentoo.patch @@ -0,0 +1,153 @@ +From 8fe20883e248572690798e4dd1423511aa2f4e5d Mon Sep 17 00:00:00 2001 +From: Thomas Deutschmann <whissi@gentoo.org> +Date: Thu, 22 Sep 2016 00:53:58 +0200 +Subject: [PATCH 1/3] Remove bundled libltdl + +--- + Makefile.am | 6 ------ + configure.ac | 8 ++++---- + 2 files changed, 4 insertions(+), 10 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 03bdd39..ad04a3c 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,11 +1,5 @@ +-ACLOCAL_AMFLAGS = -I libltdl/m4 +- + SUBDIRS = + +-if BUILD_INCLUDED_LTDL +-SUBDIRS += libltdl +-endif +- + SUBDIRS += proto src bindings . + + AM_CPPFLAGS = $(LTDLINCL) +diff --git a/configure.ac b/configure.ac +index 9a6da11..68e15e0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3,7 +3,6 @@ AC_PREREQ([2.60]) + AC_INIT([collectd],[m4_esyscmd(./version-gen.sh)]) + AC_CONFIG_SRCDIR(src/target_set.c) + AC_CONFIG_HEADERS(src/config.h) +-AC_CONFIG_AUX_DIR([libltdl/config]) + + dnl older automake's default of ARFLAGS=cru is noisy on newer binutils; + dnl we don't really need the 'u' even in older toolchains. Then there is +@@ -13,7 +12,6 @@ m4_divert_text([DEFAULTS], [: "${ARFLAGS=cr} ${AR_FLAGS=cr}"]) + m4_ifdef([LT_PACKAGE_VERSION], + # libtool >= 2.2 + [ +- LT_CONFIG_LTDL_DIR([libltdl]) + LT_INIT([dlopen]) + LTDL_INIT([convenience]) + AC_DEFINE(LIBTOOL_VERSION, 2, [Define to used libtool version.]) +@@ -25,12 +23,14 @@ m4_ifdef([LT_PACKAGE_VERSION], + AC_SUBST(LTDLINCL) + AC_SUBST(LIBLTDL) + AC_LIBTOOL_DLOPEN +- AC_CONFIG_SUBDIRS(libltdl) + AC_DEFINE(LIBTOOL_VERSION, 1, [Define to used libtool version.]) + ] + ) + +-AM_CONDITIONAL([BUILD_INCLUDED_LTDL], [test "x$LTDLDEPS" != "x"]) ++if test "x$LTDLDEPS" != "x" ++then ++ AC_MSG_ERROR(["system's libltdl is too old! Should never happen. Please file a bug at https://bugs.gentoo.org"]) ++fi + + AM_INIT_AUTOMAKE([subdir-objects tar-pax dist-bzip2 no-dist-gzip foreign]) + m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +-- +2.10.0 + + +From 0b00f519ce183b8ceaab5cf8e56f574ecd2cb7c4 Mon Sep 17 00:00:00 2001 +From: Thomas Deutschmann <whissi@gentoo.org> +Date: Thu, 22 Sep 2016 00:54:08 +0200 +Subject: [PATCH 2/3] Remove libhal dependency + +X-Gentoo-Bug: 353839 +X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=353839 +--- + configure.ac | 24 ------------------------ + 1 file changed, 24 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 68e15e0..1700c44 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1663,30 +1663,6 @@ AM_CONDITIONAL(BUILD_WITH_LIBRESOLV, test "x$with_libresolv" = "xyes") + + dnl Check for HAL (hardware abstraction library) + with_libhal="no" +-PKG_CHECK_MODULES([HAL], [hal], +- [ +- SAVE_LIBS="$LIBS" +- LIBS="$HAL_LIBS $LIBS" +- AC_CHECK_LIB([hal], [libhal_device_property_exists], +- [ +- SAVE_CPPFLAGS="$CPPFLAGS" +- CPPFLAGS="$HAL_CFLAGS $CPPFLAGS" +- AC_CHECK_HEADERS([libhal.h], +- [ +- with_libhal="yes" +- BUILD_WITH_LIBHAL_CFLAGS="$HAL_CFLAGS" +- BUILD_WITH_LIBHAL_LIBS="$HAL_LIBS" +- ]) +- CPPFLAGS="$SAVE_CPPFLAGS" +- ], +- [ : ] +- ) +- LIBS="$SAVE_LIBS" +- ], +- [ : ] +-) +-AC_SUBST(BUILD_WITH_LIBHAL_CFLAGS) +-AC_SUBST(BUILD_WITH_LIBHAL_LIBS) + + + SAVE_LIBS="$LIBS" +-- +2.10.0 + + +From 380c61888bed5856319fa32816d8f2f4c88ee7bc Mon Sep 17 00:00:00 2001 +From: Thomas Deutschmann <whissi@gentoo.org> +Date: Thu, 22 Sep 2016 00:54:19 +0200 +Subject: [PATCH 3/3] Link Oracle plug-in against libocci + +Author: Aurelien Minet +X-Gentoo-Bug: 347607 +X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=347607 +--- + configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 1700c44..83909a0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -3587,14 +3587,14 @@ AC_ARG_WITH(oracle, [AS_HELP_STRING([--with-oracle@<:@=ORACLE_HOME@:>@], [Path t + ]) + if test "x$ORACLE_HOME" != "x" + then +- with_oracle_cppflags="-I$ORACLE_HOME/rdbms/public" ++ with_oracle_cppflags="-I$ORACLE_HOME/rdbms/public -locci" + + if test -e "$ORACLE_HOME/lib/ldflags" + then + with_oracle_libs=`cat "$ORACLE_HOME/lib/ldflags"` + fi + #with_oracle_libs="-L$ORACLE_HOME/lib $with_oracle_libs -lclntsh" +- with_oracle_libs="-L$ORACLE_HOME/lib -lclntsh" ++ with_oracle_libs="-L$ORACLE_HOME/lib -lclntsh -locci" + fi + if test "x$with_oracle" = "xyes" + then +-- +2.10.0 + diff --git a/app-metrics/collectd/files/collectd-5.7.2-CVE-2017-16820.patch b/app-metrics/collectd/files/collectd-5.7.2-CVE-2017-16820.patch new file mode 100644 index 000000000000..0090f2940bf6 --- /dev/null +++ b/app-metrics/collectd/files/collectd-5.7.2-CVE-2017-16820.patch @@ -0,0 +1,39 @@ +CVE-2017-16820: Fix double free of request PDU + +https://github.com/collectd/collectd/commit/d16c24542b2f96a194d43a73c2e5778822b9cb47 + +--- a/src/snmp.c ++++ b/src/snmp.c +@@ -1357,11 +1357,13 @@ static int csnmp_read_table(host_definition_t *host, data_definition_t *data) { + if (oid_list_todo_num == 0) { + /* The request is still empty - so we are finished */ + DEBUG("snmp plugin: all variables have left their subtree"); ++ snmp_free_pdu(req); + status = 0; + break; + } + + res = NULL; ++ /* snmp_sess_synch_response always frees our req PDU */ + status = snmp_sess_synch_response(host->sess_handle, req, &res); + if ((status != STAT_SUCCESS) || (res == NULL)) { + char *errstr = NULL; +@@ -1376,8 +1378,6 @@ static int csnmp_read_table(host_definition_t *host, data_definition_t *data) { + snmp_free_pdu(res); + res = NULL; + +- /* snmp_synch_response already freed our PDU */ +- req = NULL; + sfree(errstr); + csnmp_host_close_session(host); + +@@ -1492,9 +1492,6 @@ static int csnmp_read_table(host_definition_t *host, data_definition_t *data) { + snmp_free_pdu(res); + res = NULL; + +- if (req != NULL) +- snmp_free_pdu(req); +- req = NULL; + + if (status == 0) + csnmp_dispatch_table(host, data, instance_list_head, value_list_head); diff --git a/app-metrics/collectd/files/collectd-5.7.2-issue-2443.patch b/app-metrics/collectd/files/collectd-5.7.2-issue-2443.patch new file mode 100644 index 000000000000..19410c139b0a --- /dev/null +++ b/app-metrics/collectd/files/collectd-5.7.2-issue-2443.patch @@ -0,0 +1,160 @@ +turbostat: import msr-index header from linux to allow building against + >=linux-4.12 + +Backport of https://github.com/collectd/collectd/pull/2446 + +--- a/configure.ac ++++ b/configure.ac +@@ -805,28 +805,6 @@ AC_CACHE_CHECK([whether clock_boottime and clock_monotonic are supported], + + + # For the turbostat plugin +-have_asm_msrindex_h="no" +-AC_CHECK_HEADERS(asm/msr-index.h, [have_asm_msrindex_h="yes"]) +- +-if test "x$have_asm_msrindex_h" = "xyes" +-then +- AC_CACHE_CHECK([whether asm/msr-index.h has MSR_PKG_C10_RESIDENCY], +- [c_cv_have_usable_asm_msrindex_h], +- AC_COMPILE_IFELSE([AC_LANG_PROGRAM( +-[[[ +-#include<asm/msr-index.h> +-]]], +-[[[ +-int y = MSR_PKG_C10_RESIDENCY; +-return(y); +-]]] +- )], +- [c_cv_have_usable_asm_msrindex_h="yes"], +- [c_cv_have_usable_asm_msrindex_h="no"], +- ) +- ) +-fi +- + have_cpuid_h="no" + AC_CHECK_HEADERS(cpuid.h, [have_cpuid_h="yes"]) + +@@ -6108,7 +6086,7 @@ then + then + plugin_ipvs="yes" + fi +- if test "x$c_cv_have_usable_asm_msrindex_h" = "xyes" && test "x$have_cpuid_h" = "xyes" ++ if test "x$have_cpuid_h" = "xyes" + then + plugin_turbostat="yes" + fi +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -1212,7 +1212,9 @@ endif + + if BUILD_PLUGIN_TURBOSTAT + pkglib_LTLIBRARIES += turbostat.la +-turbostat_la_SOURCES = turbostat.c ++turbostat_la_SOURCES = \ ++ turbostat.c \ ++ msr-index.h + turbostat_la_LDFLAGS = $(PLUGIN_LDFLAGS) + endif + +--- /dev/null ++++ b/src/msr-index.h +@@ -0,0 +1,88 @@ ++/* ++ * Partial header file imported from the linux kernel ++ * (arch/x86/include/asm/msr-index.h) ++ * as it is not provided by the kernel sources anymore ++ * ++ * Only the minimal blocks of macro have been included ++ * ---- ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms and conditions of the GNU General Public License, ++ * version 2, as published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ * ++ * You should have received a copy of the GNU General Public License along with ++ * this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. ++ * ---- ++ */ ++ ++#ifndef _ASM_X86_MSR_INDEX_H ++#define _ASM_X86_MSR_INDEX_H ++ ++/* ++ * CPU model specific register (MSR) numbers. ++ * ++ * Do not add new entries to this file unless the definitions are shared ++ * between multiple compilation units. ++ */ ++ ++/* Intel MSRs. Some also available on other CPUs */ ++ ++/* C-state Residency Counters */ ++#define MSR_PKG_C3_RESIDENCY 0x000003f8 ++#define MSR_PKG_C6_RESIDENCY 0x000003f9 ++#define MSR_ATOM_PKG_C6_RESIDENCY 0x000003fa ++#define MSR_PKG_C7_RESIDENCY 0x000003fa ++#define MSR_CORE_C3_RESIDENCY 0x000003fc ++#define MSR_CORE_C6_RESIDENCY 0x000003fd ++#define MSR_CORE_C7_RESIDENCY 0x000003fe ++#define MSR_KNL_CORE_C6_RESIDENCY 0x000003ff ++#define MSR_PKG_C2_RESIDENCY 0x0000060d ++#define MSR_PKG_C8_RESIDENCY 0x00000630 ++#define MSR_PKG_C9_RESIDENCY 0x00000631 ++#define MSR_PKG_C10_RESIDENCY 0x00000632 ++ ++/* Run Time Average Power Limiting (RAPL) Interface */ ++ ++#define MSR_RAPL_POWER_UNIT 0x00000606 ++ ++#define MSR_PKG_POWER_LIMIT 0x00000610 ++#define MSR_PKG_ENERGY_STATUS 0x00000611 ++#define MSR_PKG_PERF_STATUS 0x00000613 ++#define MSR_PKG_POWER_INFO 0x00000614 ++ ++#define MSR_DRAM_POWER_LIMIT 0x00000618 ++#define MSR_DRAM_ENERGY_STATUS 0x00000619 ++#define MSR_DRAM_PERF_STATUS 0x0000061b ++#define MSR_DRAM_POWER_INFO 0x0000061c ++ ++#define MSR_PP0_POWER_LIMIT 0x00000638 ++#define MSR_PP0_ENERGY_STATUS 0x00000639 ++#define MSR_PP0_POLICY 0x0000063a ++#define MSR_PP0_PERF_STATUS 0x0000063b ++ ++#define MSR_PP1_POWER_LIMIT 0x00000640 ++#define MSR_PP1_ENERGY_STATUS 0x00000641 ++#define MSR_PP1_POLICY 0x00000642 ++ ++ ++ ++/* Intel defined MSRs. */ ++#define MSR_IA32_TSC 0x00000010 ++#define MSR_SMI_COUNT 0x00000034 ++ ++#define MSR_IA32_MPERF 0x000000e7 ++#define MSR_IA32_APERF 0x000000e8 ++ ++#define MSR_IA32_THERM_STATUS 0x0000019c ++ ++#define MSR_IA32_TEMPERATURE_TARGET 0x000001a2 ++ ++#define MSR_IA32_PACKAGE_THERM_STATUS 0x000001b1 ++ ++ ++#endif /* _ASM_X86_MSR_INDEX_H */ +--- a/src/turbostat.c ++++ b/src/turbostat.c +@@ -41,7 +41,7 @@ + #include "plugin.h" + #include "utils_time.h" + +-#include <asm/msr-index.h> ++#include "msr-index.h" + #include <cpuid.h> + #ifdef HAVE_SYS_CAPABILITY_H + #include <sys/capability.h> diff --git a/app-metrics/collectd/files/collectd-5.7.2-varnish-5.2+.patch b/app-metrics/collectd/files/collectd-5.7.2-varnish-5.2+.patch new file mode 100644 index 000000000000..60830042fa6a --- /dev/null +++ b/app-metrics/collectd/files/collectd-5.7.2-varnish-5.2+.patch @@ -0,0 +1,1018 @@ +Fix building against >=www-servers/varnish-5.2 + +https://github.com/collectd/collectd/commit/3c42182e912e3d634fe8c4f6a636053959fcde49 +https://github.com/collectd/collectd/commit/3ab73ae8b23b9816fb69fde630c5ad667aa1e09f +https://github.com/collectd/collectd/commit/7978b43670472a000831f7ff37a6a30771a6ee6f +https://github.com/collectd/collectd/commit/68123637814ea09efff5bf56f3209eefbe41287a +https://github.com/collectd/collectd/commit/8192bfcf975ff6275505c99193a23e2a066927d0 +https://github.com/collectd/collectd/commit/c1e2bf3d2bfa1a1da3a6b42186577f635795e7f8 + +--- a/configure.ac ++++ b/configure.ac +@@ -5614,13 +5614,18 @@ then + + CPPFLAGS="$CPPFLAGS $with_libvarnish_cflags" + +- AC_CHECK_HEADERS(vapi/vsc.h, +- [AC_DEFINE([HAVE_VARNISH_V4], [1], [Varnish 4 API support])], +- [AC_CHECK_HEADERS(vsc.h, +- [AC_DEFINE([HAVE_VARNISH_V3], [1], [Varnish 3 API support])], +- [AC_CHECK_HEADERS(varnishapi.h, +- [AC_DEFINE([HAVE_VARNISH_V2], [1], [Varnish 2 API support])], +- [with_libvarnish="no (found none of the varnish header files)"])])]) ++ $PKG_CONFIG --atleast-version=5.2 'varnishapi' 2>/dev/null ++ if test $? -eq 0; then ++ AC_DEFINE([HAVE_VARNISH_V5], [1], [Varnish 5 API support]) ++ else ++ AC_CHECK_HEADERS(vapi/vsc.h, ++ [AC_DEFINE([HAVE_VARNISH_V4], [1], [Varnish 4 API support])], ++ [AC_CHECK_HEADERS(vsc.h, ++ [AC_DEFINE([HAVE_VARNISH_V3], [1], [Varnish 3 API support])], ++ [AC_CHECK_HEADERS(varnishapi.h, ++ [AC_DEFINE([HAVE_VARNISH_V2], [1], [Varnish 2 API support])], ++ [with_libvarnish="no (found none of the varnish header files)"])])]) ++ fi + + CPPFLAGS="$SAVE_CPPFLAGS" + fi +--- a/src/varnish.c ++++ b/src/varnish.c +@@ -21,6 +21,7 @@ + * Jérôme Renard <jerome.renard at gmail.com> + * Marc Fournier <marc.fournier at camptocamp.com> + * Florian octo Forster <octo at collectd.org> ++ * Denes Matetelki <dmatetelki at varnish-software.com> + **/ + + #include "collectd.h" +@@ -28,7 +29,7 @@ + #include "common.h" + #include "plugin.h" + +-#if HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + #include <vapi/vsc.h> + #include <vapi/vsm.h> + typedef struct VSC_C_main c_varnish_stats_t; +@@ -69,17 +70,25 @@ struct user_config_s { + _Bool collect_sms; + #if HAVE_VARNISH_V2 + _Bool collect_sm; ++#endif ++#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + _Bool collect_sma; + #endif + _Bool collect_struct; + _Bool collect_totals; +-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + _Bool collect_uptime; + #endif + _Bool collect_vcl; + _Bool collect_workers; +-#if HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + _Bool collect_vsm; ++ _Bool collect_lck; ++ _Bool collect_mempool; ++ _Bool collect_mgt; ++ _Bool collect_smf; ++ _Bool collect_vbe; ++ _Bool collect_mse; + #endif + }; + typedef struct user_config_s user_config_t; /* }}} */ +@@ -98,60 +107,70 @@ static int varnish_submit(const char *plugin_instance, /* {{{ */ + + if (plugin_instance == NULL) + plugin_instance = "default"; +- ssnprintf(vl.plugin_instance, sizeof(vl.plugin_instance), "%s-%s", +- plugin_instance, category); ++ snprintf(vl.plugin_instance, sizeof(vl.plugin_instance), "%s-%s", ++ plugin_instance, category); + + sstrncpy(vl.type, type, sizeof(vl.type)); + + if (type_instance != NULL) + sstrncpy(vl.type_instance, type_instance, sizeof(vl.type_instance)); + +- return (plugin_dispatch_values(&vl)); ++ return plugin_dispatch_values(&vl); + } /* }}} int varnish_submit */ + + static int varnish_submit_gauge(const char *plugin_instance, /* {{{ */ + const char *category, const char *type, + const char *type_instance, + uint64_t gauge_value) { +- return (varnish_submit(plugin_instance, category, type, type_instance, +- (value_t){.gauge = (gauge_t)gauge_value})); ++ return varnish_submit(plugin_instance, category, type, type_instance, ++ (value_t){ ++ .gauge = (gauge_t)gauge_value, ++ }); + } /* }}} int varnish_submit_gauge */ + + static int varnish_submit_derive(const char *plugin_instance, /* {{{ */ + const char *category, const char *type, + const char *type_instance, + uint64_t derive_value) { +- return (varnish_submit(plugin_instance, category, type, type_instance, +- (value_t){.derive = (derive_t)derive_value})); ++ return varnish_submit(plugin_instance, category, type, type_instance, ++ (value_t){ ++ .derive = (derive_t)derive_value, ++ }); + } /* }}} int varnish_submit_derive */ + +-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + static int varnish_monitor(void *priv, + const struct VSC_point *const pt) /* {{{ */ + { + uint64_t val; + const user_config_t *conf; +- const char *class; + const char *name; + + if (pt == NULL) +- return (0); ++ return 0; + + conf = priv; + +-#if HAVE_VARNISH_V4 +- class = pt->section->fantom->type; +- name = pt->desc->name; ++#if HAVE_VARNISH_V5 ++ char namebuff[DATA_MAX_NAME_LEN]; + +- if (strcmp(class, "MAIN") != 0) +- return (0); ++ char const *c = strrchr(pt->name, '.'); ++ if (c == NULL) { ++ return EINVAL; ++ } ++ sstrncpy(namebuff, c + 1, sizeof(namebuff)); ++ name = namebuff; ++ ++#elif HAVE_VARNISH_V4 ++ if (strcmp(pt->section->fantom->type, "MAIN") != 0) ++ return 0; + ++ name = pt->desc->name; + #elif HAVE_VARNISH_V3 +- class = pt->class; +- name = pt->name; ++ if (strcmp(pt->class, "") != 0) ++ return 0; + +- if (strcmp(class, "") != 0) +- return (0); ++ name = pt->name; + #endif + + val = *(const volatile uint64_t *)pt->ptr; +@@ -178,6 +197,14 @@ static int varnish_monitor(void *priv, + else if (strcmp(name, "client_req") == 0) + return varnish_submit_derive(conf->instance, "connections", "connections", + "received", val); ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ else if (strcmp(name, "client_req_400") == 0) ++ return varnish_submit_derive(conf->instance, "connections", "connections", ++ "error_400", val); ++ else if (strcmp(name, "client_req_417") == 0) ++ return varnish_submit_derive(conf->instance, "connections", "connections", ++ "error_417", val); ++#endif + } + + #ifdef HAVE_VARNISH_V3 +@@ -207,6 +234,9 @@ static int varnish_monitor(void *priv, + else if (strcmp(name, "esi_warnings") == 0) + return varnish_submit_derive(conf->instance, "esi", "total_operations", + "warning", val); ++ else if (strcmp(name, "esi_maxdepth") == 0) ++ return varnish_submit_derive(conf->instance, "esi", "total_operations", ++ "max_depth", val); + } + + if (conf->collect_backend) { +@@ -282,6 +312,20 @@ static int varnish_monitor(void *priv, + else if (strcmp(name, "fetch_304") == 0) + return varnish_submit_derive(conf->instance, "fetch", "http_requests", + "no_body_304", val); ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ else if (strcmp(name, "fetch_no_thread") == 0) ++ return varnish_submit_derive(conf->instance, "fetch", "http_requests", ++ "no_thread", val); ++ else if (strcmp(name, "fetch_none") == 0) ++ return varnish_submit_derive(conf->instance, "fetch", "http_requests", ++ "none", val); ++ else if (strcmp(name, "busy_sleep") == 0) ++ return varnish_submit_derive(conf->instance, "fetch", "http_requests", ++ "busy_sleep", val); ++ else if (strcmp(name, "busy_wakeup") == 0) ++ return varnish_submit_derive(conf->instance, "fetch", "http_requests", ++ "busy_wakeup", val); ++#endif + } + + if (conf->collect_hcb) { +@@ -327,6 +371,14 @@ static int varnish_monitor(void *priv, + else if (strcmp(name, "n_objoverflow") == 0) + return varnish_submit_derive(conf->instance, "objects", "total_objects", + "workspace_overflow", val); ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ else if (strcmp(name, "exp_mailed") == 0) ++ return varnish_submit_gauge(conf->instance, "struct", "objects", ++ "exp_mailed", val); ++ else if (strcmp(name, "exp_received") == 0) ++ return varnish_submit_gauge(conf->instance, "struct", "objects", ++ "exp_received", val); ++#endif + } + + #if HAVE_VARNISH_V3 +@@ -351,7 +403,7 @@ static int varnish_monitor(void *priv, + "duplicate", val); + } + #endif +-#if HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + if (conf->collect_ban) { + if (strcmp(name, "bans") == 0) + return varnish_submit_derive(conf->instance, "ban", "total_operations", +@@ -377,6 +429,33 @@ static int varnish_monitor(void *priv, + else if (strcmp(name, "bans_dups") == 0) + return varnish_submit_derive(conf->instance, "ban", "total_operations", + "duplicate", val); ++ else if (strcmp(name, "bans_tested") == 0) ++ return varnish_submit_derive(conf->instance, "ban", "total_operations", ++ "tested", val); ++ else if (strcmp(name, "bans_lurker_contention") == 0) ++ return varnish_submit_derive(conf->instance, "ban", "total_operations", ++ "lurker_contention", val); ++ else if (strcmp(name, "bans_lurker_obj_killed") == 0) ++ return varnish_submit_derive(conf->instance, "ban", "total_operations", ++ "lurker_obj_killed", val); ++ else if (strcmp(name, "bans_lurker_tested") == 0) ++ return varnish_submit_derive(conf->instance, "ban", "total_operations", ++ "lurker_tested", val); ++ else if (strcmp(name, "bans_lurker_tests_tested") == 0) ++ return varnish_submit_derive(conf->instance, "ban", "total_operations", ++ "lurker_tests_tested", val); ++ else if (strcmp(name, "bans_obj_killed") == 0) ++ return varnish_submit_derive(conf->instance, "ban", "total_operations", ++ "obj_killed", val); ++ else if (strcmp(name, "bans_persisted_bytes") == 0) ++ return varnish_submit_derive(conf->instance, "ban", "total_bytes", ++ "persisted_bytes", val); ++ else if (strcmp(name, "bans_persisted_fragmentation") == 0) ++ return varnish_submit_derive(conf->instance, "ban", "total_bytes", ++ "persisted_fragmentation", val); ++ else if (strcmp(name, "bans_tests_tested") == 0) ++ return varnish_submit_derive(conf->instance, "ban", "total_operations", ++ "tests_tested", val); + } + #endif + +@@ -411,6 +490,15 @@ static int varnish_monitor(void *priv, + else if (strcmp(name, "sess_herd") == 0) + return varnish_submit_derive(conf->instance, "session", + "total_operations", "herd", val); ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ else if (strcmp(name, "sess_closed_err") == 0) ++ return varnish_submit_derive(conf->instance, "session", ++ "total_operations", "closed_err", val); ++ else if (strcmp(name, "sess_dropped") == 0) ++ return varnish_submit_derive(conf->instance, "session", ++ "total_operations", "dropped_for_thread", ++ val); ++#endif + } + + if (conf->collect_shm) { +@@ -510,12 +598,18 @@ static int varnish_monitor(void *priv, + else if (strcmp(name, "s_req_bodybytes") == 0) + return varnish_submit_derive(conf->instance, "totals", "total_bytes", + "req_body", val); ++ else if (strcmp(name, "s_req_protobytes") == 0) ++ return varnish_submit_derive(conf->instance, "totals", "total_bytes", ++ "req_proto", val); + else if (strcmp(name, "s_resp_hdrbytes") == 0) + return varnish_submit_derive(conf->instance, "totals", "total_bytes", + "resp_header", val); + else if (strcmp(name, "s_resp_bodybytes") == 0) + return varnish_submit_derive(conf->instance, "totals", "total_bytes", + "resp_body", val); ++ else if (strcmp(name, "s_resp_protobytes") == 0) ++ return varnish_submit_derive(conf->instance, "totals", "total_bytes", ++ "resp_proto", val); + else if (strcmp(name, "s_pipe_hdrbytes") == 0) + return varnish_submit_derive(conf->instance, "totals", "total_bytes", + "pipe_header", val); +@@ -580,8 +674,8 @@ static int varnish_monitor(void *priv, + return varnish_submit_derive(conf->instance, "workers", "total_threads", + "dropped", val); + else if (strcmp(name, "thread_queue_len") == 0) +- return varnish_submit_derive(conf->instance, "workers", "queue_length", +- "threads", val); ++ return varnish_submit_gauge(conf->instance, "workers", "queue_length", ++ "threads", val); + else if (strcmp(name, "n_wrk") == 0) + return varnish_submit_gauge(conf->instance, "workers", "threads", + "worker", val); +@@ -609,9 +703,17 @@ static int varnish_monitor(void *priv, + else if (strcmp(name, "n_wrk_lqueue") == 0) + return varnish_submit_derive(conf->instance, "workers", "total_requests", + "queue_length", val); ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ else if (strcmp(name, "pools") == 0) ++ return varnish_submit_gauge(conf->instance, "workers", "pools", "pools", ++ val); ++ else if (strcmp(name, "busy_killed") == 0) ++ return varnish_submit_derive(conf->instance, "workers", "http_requests", ++ "busy_killed", val); ++#endif + } + +-#if HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + if (conf->collect_vsm) { + if (strcmp(name, "vsm_free") == 0) + return varnish_submit_gauge(conf->instance, "vsm", "bytes", "free", val); +@@ -627,9 +729,262 @@ static int varnish_monitor(void *priv, + return varnish_submit_derive(conf->instance, "vsm", "total_bytes", + "overflowed", val); + } ++ ++ if (conf->collect_vbe) { ++ /* @TODO figure out the collectd type for bitmap ++ if (strcmp(name, "happy") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", ++ "bitmap", "happy_hprobes", val); ++ */ ++ if (strcmp(name, "bereq_hdrbytes") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "total_bytes", ++ "bereq_hdrbytes", val); ++ else if (strcmp(name, "bereq_bodybytes") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "total_bytes", ++ "bereq_bodybytes", val); ++ else if (strcmp(name, "bereq_protobytes") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "total_bytes", ++ "bereq_protobytes", val); ++ else if (strcmp(name, "beresp_hdrbytes") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "total_bytes", ++ "beresp_hdrbytes", val); ++ else if (strcmp(name, "beresp_bodybytes") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "total_bytes", ++ "beresp_bodybytes", val); ++ else if (strcmp(name, "beresp_protobytes") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "total_bytes", ++ "beresp_protobytes", val); ++ else if (strcmp(name, "pipe_hdrbytes") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "total_bytes", ++ "pipe_hdrbytes", val); ++ else if (strcmp(name, "pipe_out") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "total_bytes", ++ "pipe_out", val); ++ else if (strcmp(name, "pipe_in") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "total_bytes", ++ "pipe_in", val); ++ else if (strcmp(name, "conn") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "connections", ++ "c_conns", val); ++ else if (strcmp(name, "req") == 0) ++ return varnish_submit_derive(conf->instance, "vbe", "http_requests", ++ "b_reqs", val); ++ } ++ ++ /* All Stevedores support these counters */ ++ if (conf->collect_sma || conf->collect_smf || conf->collect_mse) { ++ ++ char category[4]; ++ if (conf->collect_sma) ++ strncpy(category, "sma", 4); ++ else if (conf->collect_smf) ++ strncpy(category, "smf", 4); ++ else ++ strncpy(category, "mse", 4); ++ ++ if (strcmp(name, "c_req") == 0) ++ return varnish_submit_derive(conf->instance, category, "total_operations", ++ "alloc_req", val); ++ else if (strcmp(name, "c_fail") == 0) ++ return varnish_submit_derive(conf->instance, category, "total_operations", ++ "alloc_fail", val); ++ else if (strcmp(name, "c_bytes") == 0) ++ return varnish_submit_derive(conf->instance, category, "total_bytes", ++ "bytes_allocated", val); ++ else if (strcmp(name, "c_freed") == 0) ++ return varnish_submit_derive(conf->instance, category, "total_bytes", ++ "bytes_freed", val); ++ else if (strcmp(name, "g_alloc") == 0) ++ return varnish_submit_derive(conf->instance, category, "total_operations", ++ "alloc_outstanding", val); ++ else if (strcmp(name, "g_bytes") == 0) ++ return varnish_submit_gauge(conf->instance, category, "bytes", ++ "bytes_outstanding", val); ++ else if (strcmp(name, "g_space") == 0) ++ return varnish_submit_gauge(conf->instance, category, "bytes", ++ "bytes_available", val); ++ } ++ ++ /* No SMA specific counters */ ++ ++ if (conf->collect_smf) { ++ if (strcmp(name, "g_smf") == 0) ++ return varnish_submit_gauge(conf->instance, "smf", "objects", ++ "n_struct_smf", val); ++ else if (strcmp(name, "g_smf_frag") == 0) ++ return varnish_submit_gauge(conf->instance, "smf", "objects", ++ "n_small_free_smf", val); ++ else if (strcmp(name, "g_smf_large") == 0) ++ return varnish_submit_gauge(conf->instance, "smf", "objects", ++ "n_large_free_smf", val); ++ } ++ ++ if (conf->collect_mgt) { ++ if (strcmp(name, "uptime") == 0) ++ return varnish_submit_gauge(conf->instance, "mgt", "uptime", ++ "mgt_proc_uptime", val); ++ else if (strcmp(name, "child_start") == 0) ++ return varnish_submit_derive(conf->instance, "mgt", "total_operations", ++ "child_start", val); ++ else if (strcmp(name, "child_exit") == 0) ++ return varnish_submit_derive(conf->instance, "mgt", "total_operations", ++ "child_exit", val); ++ else if (strcmp(name, "child_stop") == 0) ++ return varnish_submit_derive(conf->instance, "mgt", "total_operations", ++ "child_stop", val); ++ else if (strcmp(name, "child_died") == 0) ++ return varnish_submit_derive(conf->instance, "mgt", "total_operations", ++ "child_died", val); ++ else if (strcmp(name, "child_dump") == 0) ++ return varnish_submit_derive(conf->instance, "mgt", "total_operations", ++ "child_dump", val); ++ else if (strcmp(name, "child_panic") == 0) ++ return varnish_submit_derive(conf->instance, "mgt", "total_operations", ++ "child_panic", val); ++ } ++ ++ if (conf->collect_lck) { ++ if (strcmp(name, "creat") == 0) ++ return varnish_submit_gauge(conf->instance, "lck", "objects", "created", ++ val); ++ else if (strcmp(name, "destroy") == 0) ++ return varnish_submit_gauge(conf->instance, "lck", "objects", "destroyed", ++ val); ++ else if (strcmp(name, "locks") == 0) ++ return varnish_submit_derive(conf->instance, "lck", "total_operations", ++ "lock_ops", val); ++ } ++ ++ if (conf->collect_mempool) { ++ if (strcmp(name, "live") == 0) ++ return varnish_submit_gauge(conf->instance, "mempool", "objects", ++ "in_use", val); ++ else if (strcmp(name, "pool") == 0) ++ return varnish_submit_gauge(conf->instance, "mempool", "objects", ++ "in_pool", val); ++ else if (strcmp(name, "sz_wanted") == 0) ++ return varnish_submit_gauge(conf->instance, "mempool", "bytes", ++ "size_requested", val); ++ else if (strcmp(name, "sz_actual") == 0) ++ return varnish_submit_gauge(conf->instance, "mempool", "bytes", ++ "size_allocated", val); ++ else if (strcmp(name, "allocs") == 0) ++ return varnish_submit_derive(conf->instance, "mempool", ++ "total_operations", "allocations", val); ++ else if (strcmp(name, "frees") == 0) ++ return varnish_submit_derive(conf->instance, "mempool", ++ "total_operations", "frees", val); ++ else if (strcmp(name, "recycle") == 0) ++ return varnish_submit_gauge(conf->instance, "mempool", "objects", ++ "recycled", val); ++ else if (strcmp(name, "timeout") == 0) ++ return varnish_submit_gauge(conf->instance, "mempool", "objects", ++ "timed_out", val); ++ else if (strcmp(name, "toosmall") == 0) ++ return varnish_submit_gauge(conf->instance, "mempool", "objects", ++ "too_small", val); ++ else if (strcmp(name, "surplus") == 0) ++ return varnish_submit_gauge(conf->instance, "mempool", "objects", ++ "surplus", val); ++ else if (strcmp(name, "randry") == 0) ++ return varnish_submit_gauge(conf->instance, "mempool", "objects", ++ "ran_dry", val); ++ } ++ ++ if (conf->collect_mse) { ++ if (strcmp(name, "c_full") == 0) ++ return varnish_submit_derive(conf->instance, "mse", "total_operations", ++ "full_allocs", val); ++ else if (strcmp(name, "c_truncated") == 0) ++ return varnish_submit_derive(conf->instance, "mse", "total_operations", ++ "truncated_allocs", val); ++ else if (strcmp(name, "c_expanded") == 0) ++ return varnish_submit_derive(conf->instance, "mse", "total_operations", ++ "expanded_allocs", val); ++ else if (strcmp(name, "c_failed") == 0) ++ return varnish_submit_derive(conf->instance, "mse", "total_operations", ++ "failed_allocs", val); ++ else if (strcmp(name, "c_bytes") == 0) ++ return varnish_submit_derive(conf->instance, "mse", "total_bytes", ++ "bytes_allocated", val); ++ else if (strcmp(name, "c_freed") == 0) ++ return varnish_submit_derive(conf->instance, "mse", "total_bytes", ++ "bytes_freed", val); ++ else if (strcmp(name, "g_fo_alloc") == 0) ++ return varnish_submit_derive(conf->instance, "mse", "total_operations", ++ "fo_allocs_outstanding", val); ++ else if (strcmp(name, "g_fo_bytes") == 0) ++ return varnish_submit_gauge(conf->instance, "mse", "bytes", ++ "fo_bytes_outstanding", val); ++ else if (strcmp(name, "g_membuf_alloc") == 0) ++ return varnish_submit_gauge(conf->instance, "mse", "objects", ++ "membufs_allocated", val); ++ else if (strcmp(name, "g_membuf_inuse") == 0) ++ return varnish_submit_gauge(conf->instance, "mse", "objects", ++ "membufs_inuse", val); ++ else if (strcmp(name, "g_bans_bytes") == 0) ++ return varnish_submit_gauge(conf->instance, "mse", "bytes", ++ "persisted_banspace_used", val); ++ else if (strcmp(name, "g_bans_space") == 0) ++ return varnish_submit_gauge(conf->instance, "mse", "bytes", ++ "persisted_banspace_available", val); ++ else if (strcmp(name, "g_bans_persisted") == 0) ++ return varnish_submit_derive(conf->instance, "mse", "total_operations", ++ "bans_persisted", val); ++ else if (strcmp(name, "g_bans_lost") == 0) ++ return varnish_submit_derive(conf->instance, "mse", "total_operations", ++ "bans_lost", val); ++ ++ /* mse seg */ ++ else if (strcmp(name, "g_journal_bytes") == 0) ++ return varnish_submit_gauge(conf->instance, "mse_reg", "bytes", ++ "journal_bytes_used", val); ++ else if (strcmp(name, "g_journal_space") == 0) ++ return varnish_submit_gauge(conf->instance, "mse_reg", "bytes", ++ "journal_bytes_free", val); ++ ++ /* mse segagg */ ++ else if (strcmp(name, "g_bigspace") == 0) ++ return varnish_submit_gauge(conf->instance, "mse_segagg", "bytes", ++ "big_extents_bytes_available", val); ++ else if (strcmp(name, "g_extfree") == 0) ++ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects", ++ "free_extents", val); ++ else if (strcmp(name, "g_sparenode") == 0) ++ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects", ++ "spare_nodes_available", val); ++ else if (strcmp(name, "g_objnode") == 0) ++ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects", ++ "object_nodes_in_use", val); ++ else if (strcmp(name, "g_extnode") == 0) ++ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects", ++ "extent_nodes_in_use", val); ++ else if (strcmp(name, "g_bigextfree") == 0) ++ return varnish_submit_gauge(conf->instance, "mse_segagg", "objects", ++ "free_big_extents", val); ++ else if (strcmp(name, "c_pruneloop") == 0) ++ return varnish_submit_derive(conf->instance, "mse_segagg", ++ "total_operations", "prune_loops", val); ++ else if (strcmp(name, "c_pruned") == 0) ++ return varnish_submit_derive(conf->instance, "mse_segagg", ++ "total_objects", "pruned_objects", val); ++ else if (strcmp(name, "c_spared") == 0) ++ return varnish_submit_derive(conf->instance, "mse_segagg", ++ "total_operations", "spared_objects", val); ++ else if (strcmp(name, "c_skipped") == 0) ++ return varnish_submit_derive(conf->instance, "mse_segagg", ++ "total_operations", "missed_objects", val); ++ else if (strcmp(name, "c_nuked") == 0) ++ return varnish_submit_derive(conf->instance, "mse_segagg", ++ "total_operations", "nuked_objects", val); ++ else if (strcmp(name, "c_sniped") == 0) ++ return varnish_submit_derive(conf->instance, "mse_segagg", ++ "total_operations", "sniped_objects", val); ++ } ++ + #endif + +- return (0); ++ return 0; + + } /* }}} static int varnish_monitor */ + #else /* if HAVE_VARNISH_V2 */ +@@ -971,21 +1326,32 @@ static void varnish_monitor(const user_config_t *conf, /* {{{ */ + } /* }}} void varnish_monitor */ + #endif + +-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + static int varnish_read(user_data_t *ud) /* {{{ */ + { ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 + struct VSM_data *vd; +- const c_varnish_stats_t *stats; + _Bool ok; ++ const c_varnish_stats_t *stats; ++#elif HAVE_VARNISH_V5 ++ struct vsm *vd; ++ struct vsc *vsc; ++ int vsm_status; ++#endif + + user_config_t *conf; + + if ((ud == NULL) || (ud->data == NULL)) +- return (EINVAL); ++ return EINVAL; + + conf = ud->data; + + vd = VSM_New(); ++ ++#if HAVE_VARNISH_V5 ++ vsc = VSC_New(); ++#endif ++ + #if HAVE_VARNISH_V3 + VSC_Setup(vd); + #endif +@@ -993,48 +1359,85 @@ static int varnish_read(user_data_t *ud) /* {{{ */ + if (conf->instance != NULL) { + int status; + ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 + status = VSM_n_Arg(vd, conf->instance); ++#elif HAVE_VARNISH_V5 ++ status = VSM_Arg(vd, 'n', conf->instance); ++#endif ++ + if (status < 0) { ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 + VSM_Delete(vd); +- ERROR("varnish plugin: VSM_n_Arg (\"%s\") failed " ++#elif HAVE_VARNISH_V5 ++ VSC_Destroy(&vsc, vd); ++ VSM_Destroy(&vd); ++#endif ++ ERROR("varnish plugin: VSM_Arg (\"%s\") failed " + "with status %i.", + conf->instance, status); +- return (-1); ++ return -1; + } + } + + #if HAVE_VARNISH_V3 + ok = (VSC_Open(vd, /* diag = */ 1) == 0); +-#else /* if HAVE_VARNISH_V4 */ ++#elif HAVE_VARNISH_V4 + ok = (VSM_Open(vd) == 0); + #endif ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 + if (!ok) { + VSM_Delete(vd); + ERROR("varnish plugin: Unable to open connection."); +- +- return (-1); ++ return -1; + } ++#endif + + #if HAVE_VARNISH_V3 + stats = VSC_Main(vd); +-#else /* if HAVE_VARNISH_V4 */ ++#elif HAVE_VARNISH_V4 + stats = VSC_Main(vd, NULL); + #endif ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 + if (!stats) { + VSM_Delete(vd); + ERROR("varnish plugin: Unable to get statistics."); ++ return -1; ++ } ++#endif ++ ++#if HAVE_VARNISH_V5 ++ if (VSM_Attach(vd, STDERR_FILENO)) { ++ ERROR("varnish plugin: Cannot attach to varnish. %s", VSM_Error(vd)); ++ VSC_Destroy(&vsc, vd); ++ VSM_Destroy(&vd); ++ return -1; ++ } + +- return (-1); ++ vsm_status = VSM_Status(vd); ++ if (vsm_status & ~(VSM_MGT_RUNNING | VSM_WRK_RUNNING)) { ++ ERROR("varnish plugin: Unable to get statistics."); ++ VSC_Destroy(&vsc, vd); ++ VSM_Destroy(&vd); ++ return -1; + } ++#endif + + #if HAVE_VARNISH_V3 + VSC_Iter(vd, varnish_monitor, conf); +-#else /* if HAVE_VARNISH_V4 */ ++#elif HAVE_VARNISH_V4 + VSC_Iter(vd, NULL, varnish_monitor, conf); ++#elif HAVE_VARNISH_V5 ++ VSC_Iter(vsc, vd, varnish_monitor, conf); + #endif ++ ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 + VSM_Delete(vd); ++#elif HAVE_VARNISH_V5 ++ VSC_Destroy(&vsc, vd); ++ VSM_Destroy(&vd); ++#endif + +- return (0); ++ return 0; + } /* }}} */ + #else /* if HAVE_VARNISH_V2 */ + static int varnish_read(user_data_t *ud) /* {{{ */ +@@ -1044,7 +1447,7 @@ static int varnish_read(user_data_t *ud) /* {{{ */ + user_config_t *conf; + + if ((ud == NULL) || (ud->data == NULL)) +- return (EINVAL); ++ return EINVAL; + + conf = ud->data; + +@@ -1052,12 +1455,12 @@ static int varnish_read(user_data_t *ud) /* {{{ */ + if (stats == NULL) { + ERROR("Varnish plugin : unable to load statistics"); + +- return (-1); ++ return -1; + } + + varnish_monitor(conf, stats); + +- return (0); ++ return 0; + } /* }}} */ + #endif + +@@ -1075,7 +1478,7 @@ static void varnish_config_free(void *ptr) /* {{{ */ + static int varnish_config_apply_default(user_config_t *conf) /* {{{ */ + { + if (conf == NULL) +- return (EINVAL); ++ return EINVAL; + + conf->collect_backend = 1; + conf->collect_cache = 1; +@@ -1096,21 +1499,29 @@ static int varnish_config_apply_default(user_config_t *conf) /* {{{ */ + conf->collect_shm = 1; + #if HAVE_VARNISH_V2 + conf->collect_sm = 0; ++#endif ++#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + conf->collect_sma = 0; + #endif + conf->collect_sms = 0; + conf->collect_struct = 0; + conf->collect_totals = 0; +-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + conf->collect_uptime = 0; + #endif + conf->collect_vcl = 0; + conf->collect_workers = 0; +-#if HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + conf->collect_vsm = 0; ++ conf->collect_lck = 0; ++ conf->collect_mempool = 0; ++ conf->collect_mgt = 0; ++ conf->collect_smf = 0; ++ conf->collect_vbe = 0; ++ conf->collect_mse = 0; + #endif + +- return (0); ++ return 0; + } /* }}} int varnish_config_apply_default */ + + static int varnish_init(void) /* {{{ */ +@@ -1118,11 +1529,11 @@ static int varnish_init(void) /* {{{ */ + user_config_t *conf; + + if (have_instance) +- return (0); ++ return 0; + + conf = calloc(1, sizeof(*conf)); + if (conf == NULL) +- return (ENOMEM); ++ return ENOMEM; + + /* Default settings: */ + conf->instance = NULL; +@@ -1133,11 +1544,12 @@ static int varnish_init(void) /* {{{ */ + /* group = */ "varnish", + /* name = */ "varnish/localhost", + /* callback = */ varnish_read, +- /* interval = */ 0, &(user_data_t){ +- .data = conf, .free_func = varnish_config_free, +- }); ++ /* interval = */ 0, ++ &(user_data_t){ ++ .data = conf, .free_func = varnish_config_free, ++ }); + +- return (0); ++ return 0; + } /* }}} int varnish_init */ + + static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ +@@ -1147,7 +1559,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ + + conf = calloc(1, sizeof(*conf)); + if (conf == NULL) +- return (ENOMEM); ++ return ENOMEM; + conf->instance = NULL; + + varnish_config_apply_default(conf); +@@ -1158,7 +1570,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ + status = cf_util_get_string(ci, &conf->instance); + if (status != 0) { + sfree(conf); +- return (status); ++ return status; + } + assert(conf->instance != NULL); + +@@ -1170,7 +1582,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ + WARNING("Varnish plugin: \"Instance\" blocks accept only " + "one argument."); + sfree(conf); +- return (EINVAL); ++ return EINVAL; + } + + for (int i = 0; i < ci->children_num; i++) { +@@ -1218,11 +1630,11 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ + else if (strcasecmp("CollectSMS", child->key) == 0) + cf_util_get_boolean(child, &conf->collect_sms); + else if (strcasecmp("CollectSMA", child->key) == 0) +-#if HAVE_VARNISH_V2 ++#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + cf_util_get_boolean(child, &conf->collect_sma); + #else + WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", +- child->key, "v2"); ++ child->key, "v2 and v4"); + #endif + else if (strcasecmp("CollectSM", child->key) == 0) + #if HAVE_VARNISH_V2 +@@ -1236,7 +1648,7 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ + else if (strcasecmp("CollectTotals", child->key) == 0) + cf_util_get_boolean(child, &conf->collect_totals); + else if (strcasecmp("CollectUptime", child->key) == 0) +-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + cf_util_get_boolean(child, &conf->collect_uptime); + #else + WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", +@@ -1247,11 +1659,60 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ + else if (strcasecmp("CollectWorkers", child->key) == 0) + cf_util_get_boolean(child, &conf->collect_workers); + else if (strcasecmp("CollectVSM", child->key) == 0) +-#if HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + cf_util_get_boolean(child, &conf->collect_vsm); + #else + WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", + child->key, "v4"); ++#endif ++ else if (strcasecmp("CollectLock", child->key) == 0) ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ cf_util_get_boolean(child, &conf->collect_lck); ++#else ++ WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", ++ child->key, "v4"); ++#endif ++ else if (strcasecmp("CollectMempool", child->key) == 0) ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ cf_util_get_boolean(child, &conf->collect_mempool); ++#else ++ WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", ++ child->key, "v4"); ++#endif ++ else if (strcasecmp("CollectManagement", child->key) == 0) ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ cf_util_get_boolean(child, &conf->collect_mgt); ++#else ++ WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", ++ child->key, "v4"); ++#endif ++ else if (strcasecmp("CollectSMF", child->key) == 0) ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ cf_util_get_boolean(child, &conf->collect_smf); ++#else ++ WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", ++ child->key, "v4"); ++#endif ++ else if (strcasecmp("CollectSMF", child->key) == 0) ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ cf_util_get_boolean(child, &conf->collect_smf); ++#else ++ WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", ++ child->key, "v4"); ++#endif ++ else if (strcasecmp("CollectVBE", child->key) == 0) ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ cf_util_get_boolean(child, &conf->collect_vbe); ++#else ++ WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", ++ child->key, "v4"); ++#endif ++ else if (strcasecmp("CollectMSE", child->key) == 0) ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ cf_util_get_boolean(child, &conf->collect_mse); ++#else ++ WARNING("Varnish plugin: \"%s\" is available for Varnish %s only.", ++ child->key, "Plus v4"); + #endif + else { + WARNING("Varnish plugin: Ignoring unknown " +@@ -1275,38 +1736,44 @@ static int varnish_config_instance(const oconfig_item_t *ci) /* {{{ */ + #endif + && !conf->collect_session && !conf->collect_shm && !conf->collect_sms + #if HAVE_VARNISH_V2 +- && !conf->collect_sma && !conf->collect_sm ++ && !conf->collect_sm ++#endif ++#if HAVE_VARNISH_V2 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ && !conf->collect_sma + #endif + && !conf->collect_struct && !conf->collect_totals +-#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 ++#if HAVE_VARNISH_V3 || HAVE_VARNISH_V4 || HAVE_VARNISH_V5 + && !conf->collect_uptime + #endif + && !conf->collect_vcl && !conf->collect_workers +-#if HAVE_VARNISH_V4 +- && !conf->collect_vsm ++#if HAVE_VARNISH_V4 || HAVE_VARNISH_V5 ++ && !conf->collect_vsm && !conf->collect_vbe && !conf->collect_smf && ++ !conf->collect_mgt && !conf->collect_lck && !conf->collect_mempool && ++ !conf->collect_mse + #endif + ) { + WARNING("Varnish plugin: No metric has been configured for " + "instance \"%s\". Disabling this instance.", + (conf->instance == NULL) ? "localhost" : conf->instance); + sfree(conf); +- return (EINVAL); ++ return EINVAL; + } + +- ssnprintf(callback_name, sizeof(callback_name), "varnish/%s", +- (conf->instance == NULL) ? "localhost" : conf->instance); ++ snprintf(callback_name, sizeof(callback_name), "varnish/%s", ++ (conf->instance == NULL) ? "localhost" : conf->instance); + + plugin_register_complex_read( + /* group = */ "varnish", + /* name = */ callback_name, + /* callback = */ varnish_read, +- /* interval = */ 0, &(user_data_t){ +- .data = conf, .free_func = varnish_config_free, +- }); ++ /* interval = */ 0, ++ &(user_data_t){ ++ .data = conf, .free_func = varnish_config_free, ++ }); + + have_instance = 1; + +- return (0); ++ return 0; + } /* }}} int varnish_config_instance */ + + static int varnish_config(oconfig_item_t *ci) /* {{{ */ +@@ -1323,7 +1790,7 @@ static int varnish_config(oconfig_item_t *ci) /* {{{ */ + } + } + +- return (0); ++ return 0; + } /* }}} int varnish_config */ + + void module_register(void) /* {{{ */ +@@ -1331,5 +1798,3 @@ void module_register(void) /* {{{ */ + plugin_register_complex_config("varnish", varnish_config); + plugin_register_init("varnish", varnish_init); + } /* }}} */ +- +-/* vim: set sw=8 noet fdm=marker : */ diff --git a/app-metrics/collectd/files/collectd.confd-r2 b/app-metrics/collectd/files/collectd.confd-r2 new file mode 100644 index 000000000000..835936d5bce2 --- /dev/null +++ b/app-metrics/collectd/files/collectd.confd-r2 @@ -0,0 +1,49 @@ +# Distributed under the terms of the GNU General Public License v2 + +# Nice value used to launch collectd, to change priority of the process. As +# you usually we want to run it in background, a default of 5 is used. +# +#COLLECTD_NICELEVEL=5 + +# Location of configuration file. Modify if you don't like the standard +# one. +# +#COLLECTD_CONFIGFILE="/etc/collectd.conf" + +# File used to store the PID file. Usually you won't need to touch it. +# If you are going to change PID file location make sure that *only* +# root is allowed to write into that directory. +# +#COLLECTD_PIDFILE="/run/collectd.pid" + +# User to run collectd as (default is collectd, change to root or give +# collectd user appropriate privileges if you use one of the plugins that +# require it, as e.g. ping or iptables plugins) +# +#COLLECTD_USER="collectd" + +# The default collectd UNIX socket location in /run/collectd is now +# maintained via tmpfiles service. Therefore, the COLLECTD_GROUP setting +# isn't used anymore. +# If you are going to change UNIX socket location or change COLLECTD_USER +# setting above, make sure you overwrite /usr/lib/tmpfiles.d/collectd.conf +# via copy in /etc/tmpfiles.d/collectd.conf to match your setup. +#COLLECTD_GROUP="collectd" + +# You can use this configuration option to pass additional options to the +# start-stop-daemon, see start-stop-daemon(8) for more details. +# Per default we wait 1000ms after we have started the service to ensure +# that the daemon is really up and running. +#COLLECTD_SSDARGS="--wait 1000" + +# The termination timeout (start-stop-daemon parameter "retry") ensures +# that the service will be terminated within a given time (25 + 5 seconds +# per default) when you are stopping the service. +#COLLECTD_TERMTIMEOUT="TERM/25/KILL/5" + +# Options to collectd +# See collectd(8) for more details +# Notes: +# * Do not specify another PIDFILE but use the variable above to change the location +# * Do not specify another CONFIGFILE but use the variable above to change the location +#COLLECTD_OPTS="" diff --git a/app-metrics/collectd/files/collectd.initd-r2 b/app-metrics/collectd/files/collectd.initd-r2 new file mode 100644 index 000000000000..0a4ca71494f6 --- /dev/null +++ b/app-metrics/collectd/files/collectd.initd-r2 @@ -0,0 +1,70 @@ +#!/sbin/openrc-run +# Copyright 1999-2018 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +COLLECTD_CONFIGFILE=${COLLECTD_CONFIGFILE:-"/etc/collectd.conf"} +COLLECTD_PIDFILE=${COLLECTD_PIDFILE:-"/run/collectd.pid"} +COLLECTD_NICELEVEL=${COLLECTD_NICELEVEL:-5} +COLLECTD_USER=${COLLECTD_USER:-"collectd"} +COLLECTD_GROUP=${COLLECTD_GROUP:-"collectd"} +COLLECTD_SSDARGS=${COLLECTD_SSDARGS:-"--wait 1000"} +COLLECTD_TERMTIMEOUT=${COLLECTD_TERMTIMEOUT:-"TERM/25/KILL/5"} +COLLECTD_OPTS=${COLLECTD_OPTS:-""} + +command="/usr/sbin/collectd" +command_args="${COLLECTD_OPTS} -C \"${COLLECTD_CONFIGFILE}\" -f" +command_background=true +command_user="${COLLECTD_USER}" +start_stop_daemon_args="${COLLECTD_SSDARGS} --nice ${COLLECTD_NICELEVEL}" +pidfile="${COLLECTD_PIDFILE}" +retry="${COLLECTD_TERMTIMEOUT}" + +extra_commands="configtest" +description_configtest="Run collectd's internal config check." + +required_files="\"${COLLECTD_CONFIGFILE}\"" + +depend() { + use dns +} + +_checkconfig() { + if [ $(sed '/^$\|^#/d' "${COLLECTD_CONFIGFILE}" | grep 'LoadPlugin[[:space:]]\+oracle' | wc -l) -ge 1 ] ; then + if [ -e /etc/env.d/50oracle-instantclient-basic ] ; then + . /etc/env.d/50oracle-instantclient-basic + export ORACLE_HOME + export TNS_ADMIN + else + ewarn "Unable to set Oracle environment, Oracle plugin wont work" + fi + fi + + local test_command="${command} -t -C \"${COLLECTD_CONFIGFILE}\"" + + eval ${test_command} 1>/dev/null 2>&1 + ret=$? + if [ $ret -ne 0 ]; then + eerror "${SVCNAME} has detected an error in your configuration:" + eval ${test_command} + fi + + return $ret +} + +configtest() { + ebegin "Checking ${SVCNAME} configuration" + _checkconfig + eend $? +} + +start_pre() { + if [ "${RC_CMD}" != "restart" ]; then + configtest || return 1 + fi +} + +stop_pre() { + if [ "${RC_CMD}" = "restart" ]; then + configtest || return 1 + fi +} diff --git a/app-metrics/collectd/files/collectd.logrotate b/app-metrics/collectd/files/collectd.logrotate new file mode 100644 index 000000000000..5d344f6208f1 --- /dev/null +++ b/app-metrics/collectd/files/collectd.logrotate @@ -0,0 +1,9 @@ +# +# /etc/logrotate.d/collectd +# +/var/log/collectd.log { + daily + rotate 5 + notifempty + missingok +} diff --git a/app-metrics/collectd/files/collectd.tmpfile b/app-metrics/collectd/files/collectd.tmpfile new file mode 100644 index 000000000000..4524a56ec183 --- /dev/null +++ b/app-metrics/collectd/files/collectd.tmpfile @@ -0,0 +1 @@ +d /run/collectd 0770 collectd collectd |