From: Florian Forster Date: Tue, 10 Jun 2008 15:09:46 +0000 (+0200) Subject: Merge branch 'collectd-4.3' into collectd-4.4 X-Git-Tag: collectd-4.4.2~11 X-Git-Url: https://git.octo.it/?a=commitdiff_plain;h=c60c6dfa5960b23bdc59341ae73e701dd59d4305;hp=-c;p=collectd.git Merge branch 'collectd-4.3' into collectd-4.4 --- c60c6dfa5960b23bdc59341ae73e701dd59d4305 diff --combined configure.in index 3876b4f1,e51bbd7a..12c91393 --- a/configure.in +++ b/configure.in @@@ -57,7 -57,7 +57,7 @@@ AC_HEADER_STD AC_HEADER_SYS_WAIT AC_HEADER_DIRENT - AC_CHECK_HEADERS(stdint.h stdio.h errno.h math.h stdarg.h syslog.h fcntl.h signal.h assert.h sys/types.h sys/socket.h sys/select.h poll.h netdb.h arpa/inet.h sys/resource.h sys/param.h kstat.h regex.h sys/ioctl.h endian.h) + AC_CHECK_HEADERS(stdint.h stdio.h errno.h math.h stdarg.h syslog.h fcntl.h signal.h assert.h sys/types.h sys/socket.h sys/select.h poll.h netdb.h arpa/inet.h sys/resource.h sys/param.h kstat.h regex.h sys/ioctl.h endian.h sys/isa_defs.h) # For ping library AC_CHECK_HEADERS(netinet/in_systm.h, [], [], @@@ -1600,16 -1600,6 +1600,16 @@@ the LDFLAGS=$SAVE_LDFLAGS fi +if test "x$ac_system" = "xLinux" +then + AC_ARG_VAR([KERNEL_DIR], [path to Linux kernel sources]) + if test -z "$KERNEL_DIR" + then + KERNEL_DIR="/lib/modules/`uname -r`/source" + fi +fi + +with_own_libiptc="no" AC_ARG_WITH(libiptc, [AS_HELP_STRING([--with-libiptc@<:@=PREFIX@:>@], [Path to libiptc.])], [ if test "x$withval" != "xno" && test "x$withval" != "xyes" @@@ -1634,45 -1624,22 +1634,45 @@@ the AC_CHECK_LIB(iptc, iptc_init, [ AC_DEFINE(HAVE_LIBIPTC, 1, [Define to 1 if you have the iptc library (-liptc).]) - ], [with_libiptc="no (libiptc not found)"]) + ], + [ + with_libiptc="yes" + with_own_libiptc="yes" + ]) fi -if test "x$with_libiptc" = "xyes" +if test "x$with_libiptc" = "xyes" -a "x$with_own_libiptc" != "xyes" then AC_CHECK_HEADERS(libiptc/libiptc.h, [ AC_DEFINE(HAVE_LIBIPTC_LIBIPTC_H, 1, [Define to 1 if you have the header file.]) - ], [with_libiptc="no (libiptc/libiptc.h not found)"]) + ], + [ + with_libiptc="yes" + with_own_libiptc="yes" + ]) fi if test "x$with_libiptc" = "xyes" then - collect_libiptc=1 -else - collect_libiptc=0 + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -I$KERNEL_DIR/include" + + AC_CHECK_HEADERS(linux/netfilter_ipv4/ip_tables.h linux/netfilter_ipv6/ip6_tables.h, [], + [ + with_libiptc="no (Linux iptables headers not found - check KERNEL_DIR)" + with_own_libiptc="no" + ], + [ +#include "$srcdir/src/libiptc/ipt_kernel_headers.h" + ]) + + CFLAGS=$SAVE_CFLAGS fi AM_CONDITIONAL(BUILD_WITH_LIBIPTC, test "x$with_libiptc" = "xyes") +AM_CONDITIONAL(BUILD_WITH_OWN_LIBIPTC, test "x$with_own_libiptc" = "xyes") +if test "x$with_own_libiptc" = "xyes" +then + AC_DEFINE(OWN_LIBIPTC, 1, [Define to 1 if we use the shipped iptc library.]) +fi with_snmp_config="net-snmp-config" with_snmp_cflags="" @@@ -1992,85 -1959,6 +1992,85 @@@ the fi AM_CONDITIONAL(BUILD_WITH_LIBNETLINK, test "x$with_libnetlink" = "xyes") +with_libopenipmipthread="yes" +with_libopenipmipthread_cflags="" +with_libopenipmipthread_libs="" + +AC_MSG_CHECKING([for pkg-config]) +temp_result="no" +if test "x$PKG_CONFIG" = "x" +then + with_libopenipmipthread="no" + temp_result="no" +else + temp_result="$PKG_CONFIG" +fi +AC_MSG_RESULT([$temp_result]) + +if test "x$with_libopenipmipthread" = "xyes" +then + AC_MSG_CHECKING([for libOpenIPMIpthread]) + $PKG_CONFIG --exists OpenIPMIpthread 2>/dev/null + if test "$?" != "0" + then + with_libopenipmipthread="no ($PKG_CONFIG doesn't know OpenIPMIpthread)" + fi + AC_MSG_RESULT([$with_libopenipmipthread]) +fi + +if test "x$with_libopenipmipthread" = "xyes" +then + AC_MSG_CHECKING([for libOpenIPMIpthread CFLAGS]) + temp_result="`$PKG_CONFIG --cflags OpenIPMIpthread`" + if test "$?" = "0" + then + with_libopenipmipthread_cflags="$temp_result" + else + with_libopenipmipthread="no ($PKG_CONFIG --cflags OpenIPMIpthread failed)" + temp_result="$PKG_CONFIG --cflags OpenIPMIpthread failed" + fi + AC_MSG_RESULT([$temp_result]) +fi + +if test "x$with_libopenipmipthread" = "xyes" +then + AC_MSG_CHECKING([for libOpenIPMIpthread LDFLAGS]) + temp_result="`$PKG_CONFIG --libs OpenIPMIpthread`" + if test "$?" = "0" + then + with_libopenipmipthread_ldflags="$temp_result" + else + with_libopenipmipthread="no ($PKG_CONFIG --libs OpenIPMIpthread failed)" + temp_result="$PKG_CONFIG --libs OpenIPMIpthread failed" + fi + AC_MSG_RESULT([$temp_result]) +fi + +if test "x$with_libopenipmipthread" = "xyes" +then + SAVE_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $with_libopenipmipthread_cflags" + + AC_CHECK_HEADERS(OpenIPMI/ipmi_smi.h, + [with_libopenipmipthread="yes"], + [with_libopenipmipthread="no (OpenIPMI/ipmi_smi.h not found)"], +[#include +#include +#include +#include +]) + + CPPFLAGS="$SAVE_CPPFLAGS" +fi + +if test "x$with_libopenipmipthread" = "xyes" +then + BUILD_WITH_OPENIPMI_CFLAGS="$with_libopenipmipthread_cflags" + BUILD_WITH_OPENIPMI_LIBS="$with_libopenipmipthread_ldflags" + AC_SUBST(BUILD_WITH_OPENIPMI_CFLAGS) + AC_SUBST(BUILD_WITH_OPENIPMI_LIBS) +fi + dnl Check for libvirt and libxml2 libraries. with_libxml2="no (pkg-config isn't available)" with_libxml2_cflags="" @@@ -2078,6 -1966,7 +2078,6 @@@ with_libxml2_ldflags=" with_libvirt="no (pkg-config isn't available)" with_libvirt_cflags="" with_libvirt_ldflags="" -PKG_PROG_PKG_CONFIG if test "x$PKG_CONFIG" != "x" then pkg-config --exists 'libxml-2.0' 2>/dev/null @@@ -2292,7 -2181,6 +2292,7 @@@ AC_COLLECTD([debug], [enable], [fe AC_COLLECTD([daemon], [disable], [feature], [daemon mode]) AC_COLLECTD([getifaddrs],[enable], [feature], [getifaddrs under Linux]) +plugin_ascent="no" plugin_battery="no" plugin_cpu="no" plugin_cpufreq="no" @@@ -2300,7 -2188,6 +2300,7 @@@ plugin_df="no plugin_disk="no" plugin_entropy="no" plugin_interface="no" +plugin_ipmi="no" plugin_ipvs="no" plugin_irq="no" plugin_libvirt="no" @@@ -2315,7 -2202,6 +2315,7 @@@ plugin_swap="no plugin_tape="no" plugin_tcpconns="no" plugin_users="no" +plugin_vmem="no" plugin_vserver="no" plugin_wireless="no" @@@ -2336,7 -2222,6 +2336,7 @@@ the plugin_serial="yes" plugin_swap="yes" plugin_tcpconns="yes" + plugin_vmem="yes" plugin_vserver="yes" plugin_wireless="yes" @@@ -2367,23 -2252,10 +2367,23 @@@ f # libstatgrab if test "x$with_libstatgrab" = "xyes" then + plugin_cpu="yes" + plugin_disk="yes" plugin_interface="yes" plugin_load="yes" plugin_memory="yes" plugin_swap="yes" + plugin_users="yes" +fi + +if test "x$with_libcurl" = "xyes" && test "x$with_libxml2" = "xyes" +then + plugin_ascent="yes" +fi + +if test "x$with_libopenipmipthread" = "xyes" +then + plugin_ipmi="yes" fi if test "x$have_processor_info" = "xyes" @@@ -2464,7 -2336,6 +2464,7 @@@ collectd plugins:] AC_PLUGIN([apache], [$with_libcurl], [Apache httpd statistics]) AC_PLUGIN([apcups], [yes], [Statistics of UPSes by APC]) AC_PLUGIN([apple_sensors], [$with_libiokit], [Apple's hardware sensors]) +AC_PLUGIN([ascent], [$plugin_ascent], [AscentEmu player statistics]) AC_PLUGIN([battery], [$plugin_battery], [Battery statistics]) AC_PLUGIN([cpu], [$plugin_cpu], [CPU usage statistics]) AC_PLUGIN([cpufreq], [$plugin_cpufreq], [CPU frequency statistics]) @@@ -2478,7 -2349,6 +2478,7 @@@ AC_PLUGIN([exec], [yes] AC_PLUGIN([hddtemp], [yes], [Query hddtempd]) AC_PLUGIN([interface], [$plugin_interface], [Interface traffic statistics]) AC_PLUGIN([iptables], [$with_libiptc], [IPTables rule counters]) +AC_PLUGIN([ipmi], [$plugin_ipmi], [IPMI sensor statistics]) AC_PLUGIN([ipvs], [$plugin_ipvs], [IPVS connection statistics]) AC_PLUGIN([irq], [$plugin_irq], [IRQ statistics]) AC_PLUGIN([libvirt], [$plugin_libvirt], [Virtual machine statistics]) @@@ -2497,7 -2367,6 +2497,7 @@@ AC_PLUGIN([ntpd], [yes] AC_PLUGIN([nut], [$with_libupsclient], [Network UPS tools statistics]) AC_PLUGIN([perl], [$plugin_perl], [Embed a Perl interpreter]) AC_PLUGIN([ping], [$with_liboping], [Network latency statistics]) +AC_PLUGIN([powerdns], [yes], [PowerDNS statistics]) AC_PLUGIN([processes], [$plugin_processes], [Process statistics]) AC_PLUGIN([rrdtool], [$with_rrdtool], [RRDTool output plugin]) AC_PLUGIN([sensors], [$with_lm_sensors], [lm_sensors statistics]) @@@ -2505,14 -2374,11 +2505,14 @@@ AC_PLUGIN([serial], [$plugin_seria AC_PLUGIN([snmp], [$with_libnetsnmp], [SNMP querying plugin]) AC_PLUGIN([swap], [$plugin_swap], [Swap usage statistics]) AC_PLUGIN([syslog], [$have_syslog], [Syslog logging plugin]) +AC_PLUGIN([tail], [yes], [Parsing of logfiles]) AC_PLUGIN([tape], [$plugin_tape], [Tape drive statistics]) AC_PLUGIN([tcpconns], [$plugin_tcpconns], [TCP connection statistics]) +AC_PLUGIN([teamspeak2], [yes], [TeamSpeak2 server statistics]) AC_PLUGIN([unixsock], [yes], [Unixsock communication plugin]) AC_PLUGIN([users], [$plugin_users], [User statistics]) AC_PLUGIN([uuid], [yes], [UUID as hostname plugin]) +AC_PLUGIN([vmem], [$plugin_vmem], [Virtual memory statistics]) AC_PLUGIN([vserver], [$plugin_vserver], [Linux VServer statistics]) AC_PLUGIN([wireless], [$plugin_wireless], [Wireless statistics]) AC_PLUGIN([xmms], [$with_libxmms], [XMMS statistics]) @@@ -2554,7 -2420,7 +2554,7 @@@ f AC_SUBST(PERL_BINDINGS) AC_SUBST(PERL_BINDINGS_OPTIONS) -AC_OUTPUT(Makefile src/Makefile src/collectd.conf src/liboconfig/Makefile src/liboping/Makefile bindings/Makefile) +AC_OUTPUT(Makefile src/Makefile src/collectd.conf src/libiptc/Makefile src/liboconfig/Makefile src/liboping/Makefile bindings/Makefile) if test "x$with_rrdtool" = "xyes" \ && test "x$librrd_threadsafe" != "xyes" @@@ -2568,11 -2434,6 +2568,11 @@@ the with_liboping="yes (shipped version)" fi +if test "x$with_libiptc" = "xyes" -a "x$with_own_libiptc" = "xyes" +then + with_libiptc="yes (shipped version)" +fi + if test "x$with_libperl" = "xyes" then with_libperl="yes (version `$perl_interpreter -MConfig -e 'print $Config{version};'`)" @@@ -2599,7 -2460,6 +2599,7 @@@ Configuration libnetlink . . . . $with_libnetlink libnetsnmp . . . . $with_libnetsnmp liboconfig . . . . $with_liboconfig + libopenipmi . . . . $with_libopenipmipthread liboping . . . . . $with_liboping libpcap . . . . . . $with_libpcap libperl . . . . . . $with_libperl @@@ -2623,7 -2483,6 +2623,7 @@@ apache . . . . . . $enable_apache apcups . . . . . . $enable_apcups apple_sensors . . . $enable_apple_sensors + ascent . . . . . . $enable_ascent battery . . . . . . $enable_battery cpu . . . . . . . . $enable_cpu cpufreq . . . . . . $enable_cpufreq @@@ -2637,7 -2496,6 +2637,7 @@@ hddtemp . . . . . . $enable_hddtemp interface . . . . . $enable_interface iptables . . . . . $enable_iptables + ipmi . . . . . . . $enable_ipmi ipvs . . . . . . . $enable_ipvs irq . . . . . . . . $enable_irq libvirt . . . . . . $enable_libvirt @@@ -2656,7 -2514,6 +2656,7 @@@ nut . . . . . . . . $enable_nut perl . . . . . . . $enable_perl ping . . . . . . . $enable_ping + powerdns . . . . . $enable_powerdns processes . . . . . $enable_processes rrdtool . . . . . . $enable_rrdtool sensors . . . . . . $enable_sensors @@@ -2664,14 -2521,11 +2664,14 @@@ snmp . . . . . . . $enable_snmp swap . . . . . . . $enable_swap syslog . . . . . . $enable_syslog + tail . . . . . . . $enable_tail tape . . . . . . . $enable_tape tcpconns . . . . . $enable_tcpconns + teamspeak2 . . . . $enable_teamspeak2 unixsock . . . . . $enable_unixsock users . . . . . . . $enable_users uuid . . . . . . . $enable_uuid + vmem . . . . . . . $enable_vmem vserver . . . . . . $enable_vserver wireless . . . . . $enable_wireless xmms . . . . . . . $enable_xmms diff --combined src/disk.c index 6ed71b28,e7372ab7..2d13430b --- a/src/disk.c +++ b/src/disk.c @@@ -1,6 -1,6 +1,6 @@@ /** * collectd - src/disk.c - * Copyright (C) 2005-2007 Florian octo Forster + * Copyright (C) 2005-2008 Florian octo Forster * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@@ -22,7 -22,6 +22,7 @@@ #include "collectd.h" #include "common.h" #include "plugin.h" +#include "utils_ignorelist.h" #if HAVE_MACH_MACH_TYPES_H # include @@@ -59,10 -58,6 +59,10 @@@ # define UINT_MAX 4294967295U #endif +#if HAVE_STATGRAB_H +# include +#endif + #if HAVE_IOKIT_IOKITLIB_H static mach_port_t io_master_port = MACH_PORT_NULL; /* #endif HAVE_IOKIT_IOKITLIB_H */ @@@ -102,50 -97,10 +102,50 @@@ static kstat_t *ksp[MAX_NUMDISK] static int numdisk = 0; /* #endif HAVE_LIBKSTAT */ +#elif defined(HAVE_LIBSTATGRAB) +/* #endif HAVE_LIBKSTATGRAB */ + #else # error "No applicable input method." #endif +static const char *config_keys[] = +{ + "Disk", + "IgnoreSelected" +}; +static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); + +static ignorelist_t *ignorelist = NULL; + +static int disk_config (const char *key, const char *value) +{ + if (ignorelist == NULL) + ignorelist = ignorelist_create (/* invert = */ 1); + if (ignorelist == NULL) + return (1); + + if (strcasecmp ("Disk", key) == 0) + { + ignorelist_add (ignorelist, value); + } + else if (strcasecmp ("IgnoreSelected", key) == 0) + { + int invert = 1; + if ((strcasecmp ("True", value) == 0) + || (strcasecmp ("Yes", value) == 0) + || (strcasecmp ("On", value) == 0)) + invert = 0; + ignorelist_set_invert (ignorelist, invert); + } + else + { + return (-1); + } + + return (0); +} /* int disk_config */ + static int disk_init (void) { #if HAVE_IOKIT_IOKITLIB_H @@@ -203,10 -158,6 +203,10 @@@ static void disk_submit (const char *pl value_t values[2]; value_list_t vl = VALUE_LIST_INIT; + /* Both `ignorelist' and `plugin_instance' may be NULL. */ + if (ignorelist_match (ignorelist, plugin_instance) != 0) + return; + values[0].counter = read; values[1].counter = write; @@@ -452,7 -403,7 +452,7 @@@ static int disk_read (void major = atoll (fields[0]); minor = atoll (fields[1]); - disk_name = fields[2]; + disk_name = fields[2 + fieldshift]; for (ds = disklist, pre_ds = disklist; ds != NULL; pre_ds = ds, ds = ds->next) if (strcmp (disk_name, ds->name) == 0) @@@ -666,31 -617,13 +666,31 @@@ kio.KIO_ROPS, kio.KIO_WOPS); } } -#endif /* defined(HAVE_LIBKSTAT) */ +/* #endif defined(HAVE_LIBKSTAT) */ + +#elif defined(HAVE_LIBSTATGRAB) + sg_disk_io_stats *ds; + int disks, counter; + char name[DATA_MAX_NAME_LEN]; + + if ((ds = sg_get_disk_io_stats(&disks)) == NULL) + return (0); + + for (counter=0; counter < disks; counter++) { + strncpy(name, ds->disk_name, sizeof(name)); + name[sizeof(name)-1] = '\0'; /* strncpy doesn't terminate longer strings */ + disk_submit (name, "disk_octets", ds->read_bytes, ds->write_bytes); + ds++; + } +#endif /* defined(HAVE_LIBSTATGRAB) */ return (0); } /* int disk_read */ void module_register (void) { - plugin_register_init ("disk", disk_init); - plugin_register_read ("disk", disk_read); + plugin_register_config ("disk", disk_config, + config_keys, config_keys_num); + plugin_register_init ("disk", disk_init); + plugin_register_read ("disk", disk_read); } /* void module_register */ diff --combined src/network.c index e1503642,ff806af3..039354b5 --- a/src/network.c +++ b/src/network.c @@@ -183,7 -183,7 +183,7 @@@ static pthread_mutex_t send_buffer_loc static c_avl_tree_t *cache_tree = NULL; static pthread_mutex_t cache_lock = PTHREAD_MUTEX_INITIALIZER; - static time_t cache_flush_last; + static time_t cache_flush_last = 0; static int cache_flush_interval = 1800; /* @@@ -1706,11 -1706,19 +1706,19 @@@ static int network_shutdown (void plugin_unregister_write ("network"); plugin_unregister_shutdown ("network"); + /* Let the init function do it's move again ;) */ + cache_flush_last = 0; + return (0); } /* int network_shutdown */ static int network_init (void) { + /* Check if we were already initialized. If so, just return - there's + * nothing more to do (for now, that is). */ + if (cache_flush_last != 0) + return (0); + plugin_register_shutdown ("network", network_shutdown); send_buffer_ptr = send_buffer; @@@ -1759,25 -1767,9 +1767,25 @@@ return (0); } /* int network_init */ +static int network_flush (int timeout) +{ + pthread_mutex_lock (&send_buffer_lock); + + if (((time (NULL) - cache_flush_last) >= timeout) + && (send_buffer_fill > 0)) + { + flush_buffer (); + } + + pthread_mutex_unlock (&send_buffer_lock); + + return (0); +} /* int network_flush */ + void module_register (void) { plugin_register_config ("network", network_config, config_keys, config_keys_num); plugin_register_init ("network", network_init); + plugin_register_flush ("network", network_flush); } /* void module_register */ diff --combined src/plugin.h index 7b59930d,91978bd9..318b5473 --- a/src/plugin.h +++ b/src/plugin.h @@@ -2,7 -2,7 +2,7 @@@ #define PLUGIN_H /** * collectd - src/plugin.h - * Copyright (C) 2005-2007 Florian octo Forster + * Copyright (C) 2005-2008 Florian octo Forster * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@@ -19,7 -19,6 +19,7 @@@ * * Authors: * Florian octo Forster + * Sebastian Harl **/ #include "collectd.h" @@@ -150,11 -149,8 +150,11 @@@ int plugin_load (const char *name) void plugin_init_all (void); void plugin_read_all (void); +void plugin_flush_all (int timeout); void plugin_shutdown_all (void); +int plugin_flush_one (int timeout, const char *name); + /* * The `plugin_register_*' functions are used to make `config', `init', * `read', `write' and `shutdown' functions known to the plugin @@@ -171,8 -167,6 +171,8 @@@ int plugin_register_read (const char *n int (*callback) (void)); int plugin_register_write (const char *name, int (*callback) (const data_set_t *ds, const value_list_t *vl)); +int plugin_register_flush (const char *name, + int (*callback) (const int)); int plugin_register_shutdown (char *name, int (*callback) (void)); int plugin_register_data_set (const data_set_t *ds); @@@ -186,7 -180,6 +186,7 @@@ int plugin_unregister_complex_config (c int plugin_unregister_init (const char *name); int plugin_unregister_read (const char *name); int plugin_unregister_write (const char *name); +int plugin_unregister_flush (const char *name); int plugin_unregister_shutdown (const char *name); int plugin_unregister_data_set (const char *name); int plugin_unregister_log (const char *name); @@@ -212,7 -205,9 +212,9 @@@ int plugin_dispatch_values (const char int plugin_dispatch_notification (const notification_t *notif); - void plugin_log (int level, const char *format, ...); + void plugin_log (int level, const char *format, ...) + __attribute__ ((format(printf,2,3))); + #define ERROR(...) plugin_log (LOG_ERR, __VA_ARGS__) #define WARNING(...) plugin_log (LOG_WARNING, __VA_ARGS__) #define NOTICE(...) plugin_log (LOG_NOTICE, __VA_ARGS__)