Merge branch 'collectd-4.8'
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Tue, 15 Sep 2009 20:18:24 +0000 (22:18 +0200)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Tue, 15 Sep 2009 20:18:24 +0000 (22:18 +0200)
Conflicts:
src/exec.c

1  2 
configure.in
src/Makefile.am
src/collectd.conf.pod
src/curl.c
src/exec.c

diff --combined configure.in
@@@ -359,13 -359,13 +359,13 @@@ have_net_ip_vs_h="no
  have_ip_vs_h="no"
  if test "x$ac_system" = "xLinux"
  then
-       SAVE_CFLAGS=$CFLAGS
+       SAVE_CFLAGS="$CFLAGS"
        CFLAGS="$CFLAGS $KERNEL_CFLAGS"
  
        AC_CHECK_HEADERS(net/ip_vs.h, [have_net_ip_vs_h="yes"])
        AC_CHECK_HEADERS(ip_vs.h, [have_ip_vs_h="yes"])
  
-       CFLAGS=$SAVE_CFLAGS
+       CFLAGS="$SAVE_CFLAGS"
  fi
  
  # For quota module
@@@ -1442,14 -1442,18 +1442,18 @@@ AM_CONDITIONAL(BUILD_WITH_LIBGCRYPT, te
  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"
+       if test "x$withval" = "xshipped"
+       then
+               with_own_libiptc="yes"
+               with_libiptc="yes"
+       else if test "x$withval" != "xno" && test "x$withval" != "xyes"
        then
                LDFLAGS="$LDFLAGS -L$withval/lib"
                CPPFLAGS="$CPPFLAGS -I$withval/include"
                with_libiptc="yes"
        else
                with_libiptc="$withval"
-       fi
+       fi; fi
  ],
  [
        if test "x$ac_system" = "xLinux"
                with_libiptc="no (Linux only)"
        fi
  ])
- if test "x$with_libiptc" = "xyes"
+ if test "x$with_libiptc" = "xyes" && test "x$with_own_libiptc" = "xno"
  then
        AC_CHECK_LIB(iptc, iptc_init,
        [
                with_own_libiptc="yes"
        ])
  fi
- if test "x$with_libiptc" = "xyes" -a "x$with_own_libiptc" != "xyes"
+ if test "x$with_libiptc" = "xyes" && test "x$with_own_libiptc" = "xno"
  then
        AC_CHECK_HEADERS(libiptc/libiptc.h,
        [
  fi
  if test "x$with_libiptc" = "xyes"
  then
-       SAVE_CFLAGS=$CFLAGS
+       SAVE_CFLAGS="$CFLAGS"
        CFLAGS="$CFLAGS $KERNEL_CFLAGS"
  
        AC_CHECK_HEADERS(linux/netfilter_ipv4/ip_tables.h linux/netfilter_ipv6/ip6_tables.h, [],
                with_own_libiptc="no"
        ],
        [
- #include "$srcdir/src/libiptc/ipt_kernel_headers.h"
+ #include "$srcdir/src/owniptc/ipt_kernel_headers.h"
        ])
  
-       CFLAGS=$SAVE_CFLAGS
+       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")
@@@ -1503,6 -1507,24 +1507,24 @@@ if test "x$with_own_libiptc" = "xyes
  then
        AC_DEFINE(OWN_LIBIPTC, 1, [Define to 1 if we use the shipped iptc library.])
  fi
+ if test "x$with_libiptc" = "xyes"
+ then
+       SAVE_CFLAGS="$CFLAGS"
+       CFLAGS="$CFLAGS $KERNEL_CFLAGS"
+       AC_CHECK_TYPES([iptc_handle_t, ip6tc_handle_t], [], [],
+       [
+ #if OWN_LIBIPTC
+ # include "$srcdir/src/owniptc/libiptc.h"
+ # include "$srcdir/src/owniptc/libip6tc.h"
+ #else
+ # include <libiptc/libiptc.h>
+ # include <libiptc/libip6tc.h>
+ #endif
+       ])
+       CFLAGS="$SAVE_CFLAGS"
+ fi
  # }}}
  
  # --with-java {{{
@@@ -1812,7 -1834,7 +1834,7 @@@ AC_ARG_WITH(libnetlink, [AS_HELP_STRING
  ])
  if test "x$with_libnetlink" = "xyes"
  then
-       SAVE_CFLAGS=$CFLAGS
+       SAVE_CFLAGS="$CFLAGS"
        CFLAGS="$CFLAGS $with_libnetlink_cflags"
  
        with_libnetlink="no (libnetlink.h not found)"
@@@ -2250,8 -2272,8 +2272,8 @@@ AC_SUBST(PERL, "$perl_interpreter"
  if test "x$with_libperl" = "xyes" \
        && test -n "$perl_interpreter"
  then
-   SAVE_CFLAGS=$CFLAGS
-   SAVE_LDFLAGS=$LDFLAGS
+   SAVE_CFLAGS="$CFLAGS"
+   SAVE_LDFLAGS="$LDFLAGS"
  dnl ARCHFLAGS="" -> disable multi -arch on OSX (see Config_heavy.pl:fetch_string)
    PERL_CFLAGS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e ccopts`
    PERL_LDFLAGS=`ARCHFLAGS="" $perl_interpreter -MExtUtils::Embed -e ldopts`
          with_libperl="no"
    fi
  
-   CFLAGS=$SAVE_CFLAGS
-   LDFLAGS=$SAVE_LDFLAGS
+   CFLAGS="$SAVE_CFLAGS"
+   LDFLAGS="$SAVE_LDFLAGS"
  else if test -z "$perl_interpreter"; then
    with_libperl="no (no perl interpreter found)"
    c_cv_have_libperl="no"
@@@ -2298,8 -2320,8 +2320,8 @@@ AM_CONDITIONAL(BUILD_WITH_LIBPERL, tes
  
  if test "x$with_libperl" = "xyes"
  then
-       SAVE_CFLAGS=$CFLAGS
-       SAVE_LDFLAGS=$LDFLAGS
+       SAVE_CFLAGS="$CFLAGS"
+       SAVE_LDFLAGS="$LDFLAGS"
        CFLAGS="$CFLAGS $PERL_CFLAGS"
        LDFLAGS="$LDFLAGS $PERL_LDFLAGS"
  
                AC_DEFINE(HAVE_PERL_ITHREADS, 1, [Define if Perl supports ithreads.])
        fi
  
-       CFLAGS=$SAVE_CFLAGS
-       LDFLAGS=$SAVE_LDFLAGS
+       CFLAGS="$SAVE_CFLAGS"
+       LDFLAGS="$SAVE_LDFLAGS"
  fi
  
  if test "x$with_libperl" = "xyes"
  then
-       SAVE_CFLAGS=$CFLAGS
-       SAVE_LDFLAGS=$LDFLAGS
+       SAVE_CFLAGS="$CFLAGS"
+       SAVE_LDFLAGS="$LDFLAGS"
        # trigger an error if Perl_load_module*() uses __attribute__nonnull__(3)
        # (see issues #41 and #42)
        CFLAGS="$CFLAGS $PERL_CFLAGS -Wall -Werror"
                )
        )
  
-       CFLAGS=$SAVE_CFLAGS
-       LDFLAGS=$SAVE_LDFLAGS
+       CFLAGS="$SAVE_CFLAGS"
+       LDFLAGS="$SAVE_LDFLAGS"
  fi
  AM_CONDITIONAL(HAVE_BROKEN_PERL_LOAD_MODULE,
                test "x$c_cv_have_broken_perl_load_module" = "xyes")
  
  if test "x$with_libperl" = "xyes"
  then
-       SAVE_CFLAGS=$CFLAGS
-       SAVE_LDFLAGS=$LDFLAGS
+       SAVE_CFLAGS="$CFLAGS"
+       SAVE_LDFLAGS="$LDFLAGS"
        CFLAGS="$CFLAGS $PERL_CFLAGS"
        LDFLAGS="$LDFLAGS $PERL_LDFLAGS"
  
                                  [Define if Perl's struct mgvtbl has member svt_local.])
        fi
  
-       CFLAGS=$SAVE_CFLAGS
-       LDFLAGS=$SAVE_LDFLAGS
+       CFLAGS="$SAVE_CFLAGS"
+       LDFLAGS="$SAVE_LDFLAGS"
  fi
  # }}}
  
@@@ -3774,7 -3796,6 +3796,7 @@@ AC_PLUGIN([tail],        [yes]
  AC_PLUGIN([tape],        [$plugin_tape],       [Tape drive statistics])
  AC_PLUGIN([target_notification], [yes],        [The notification target])
  AC_PLUGIN([target_replace], [yes],             [The replace target])
 +AC_PLUGIN([target_scale],[yes],                [The scale target])
  AC_PLUGIN([target_set],  [yes],                [The set target])
  AC_PLUGIN([tcpconns],    [$plugin_tcpconns],   [TCP connection statistics])
  AC_PLUGIN([teamspeak2],  [yes],                [TeamSpeak2 server statistics])
@@@ -3926,7 -3947,7 +3948,7 @@@ AC_SUBST(LCC_VERSION_STRING
  
  AC_CONFIG_FILES(src/libcollectdclient/lcc_features.h)
  
- AC_OUTPUT(Makefile src/Makefile src/collectd.conf src/libiptc/Makefile src/libcollectdclient/Makefile src/libcollectdclient/libcollectdclient.pc src/liboconfig/Makefile bindings/Makefile bindings/java/Makefile)
+ AC_OUTPUT(Makefile src/Makefile src/collectd.conf src/owniptc/Makefile src/libcollectdclient/Makefile src/libcollectdclient/libcollectdclient.pc src/liboconfig/Makefile bindings/Makefile bindings/java/Makefile)
  
  if test "x$with_librrd" = "xyes" \
        && test "x$librrd_threadsafe" != "xyes"
@@@ -4075,7 -4096,6 +4097,7 @@@ Configuration
      tape  . . . . . . . . $enable_tape
      target_notification . $enable_target_notification
      target_replace  . . . $enable_target_replace
 +    target_scale  . . . . $enable_target_scale
      target_set  . . . . . $enable_target_set
      tcpconns  . . . . . . $enable_tcpconns
      teamspeak2  . . . . . $enable_teamspeak2
diff --combined src/Makefile.am
@@@ -1,6 -1,6 +1,6 @@@
  SUBDIRS = libcollectdclient
  if BUILD_WITH_OWN_LIBIPTC
- SUBDIRS += libiptc
+ SUBDIRS += owniptc
  endif
  if BUILD_WITH_OWN_LIBOCONFIG
  SUBDIRS += liboconfig
@@@ -373,8 -373,8 +373,8 @@@ pkglib_LTLIBRARIES += iptables.l
  iptables_la_SOURCES = iptables.c
  iptables_la_LDFLAGS = -module -avoid-version
  if BUILD_WITH_OWN_LIBIPTC
- iptables_la_LIBADD  = libiptc/libiptc.la
- iptables_la_DEPENDENCIES = libiptc/libiptc.la
+ iptables_la_LIBADD  = owniptc/libiptc.la
+ iptables_la_DEPENDENCIES = owniptc/libiptc.la
  else
  iptables_la_LIBADD = -liptc
  endif
@@@ -910,14 -910,6 +910,14 @@@ collectd_LDADD += "-dlopen" target_repl
  collectd_DEPENDENCIES += target_replace.la
  endif
  
 +if BUILD_PLUGIN_TARGET_SCALE
 +pkglib_LTLIBRARIES += target_scale.la
 +target_scale_la_SOURCES = target_scale.c
 +target_scale_la_LDFLAGS = -module -avoid-version
 +collectd_LDADD += "-dlopen" target_scale.la
 +collectd_DEPENDENCIES += target_scale.la
 +endif
 +
  if BUILD_PLUGIN_TARGET_SET
  pkglib_LTLIBRARIES += target_set.la
  target_set_la_SOURCES = target_set.c
diff --combined src/collectd.conf.pod
@@@ -501,10 -501,6 +501,10 @@@ File that holds one or more SSL certifi
  possibly need this option. What CA certificates come bundled with C<libcurl>
  and are checked by default depends on the distribution you use.
  
 +=item B<MeasureResponseTime> B<true>|B<false>
 +
 +Measure response time for the request. Disabled by default.
 +
  =item B<E<lt>MatchE<gt>>
  
  One or more B<Match> blocks that define how to match information in the data
@@@ -1079,6 -1075,11 +1079,11 @@@ Controls whether or not to recurse int
  
  =back
  
+ =head2 Plugin C<GenericJMX>
+ The I<GenericJMX plugin> is written in I<Java> and therefore documented in
+ L<collectd-java(5)>.
  =head2 Plugin C<gmond>
  
  The I<gmond> plugin received the multicast traffic sent by B<gmond>, the
diff --combined src/curl.c
@@@ -57,7 -57,6 +57,7 @@@ struct web_page_s /* {{{ *
    int   verify_peer;
    int   verify_host;
    char *cacert;
 +  int   response_time;
  
    CURL *curl;
    char curl_errbuf[CURL_ERROR_SIZE];
@@@ -370,6 -369,7 +370,7 @@@ static int cc_page_init_curl (web_page_
        PACKAGE_NAME"/"PACKAGE_VERSION);
    curl_easy_setopt (wp->curl, CURLOPT_ERRORBUFFER, wp->curl_errbuf);
    curl_easy_setopt (wp->curl, CURLOPT_URL, wp->url);
+   curl_easy_setopt (wp->curl, CURLOPT_FOLLOWLOCATION, 1);
  
    if (wp->user != NULL)
    {
@@@ -424,7 -424,6 +425,7 @@@ static int cc_config_add_page (oconfig_
    page->pass = NULL;
    page->verify_peer = 1;
    page->verify_host = 1;
 +  page->response_time = 0;
  
    page->instance = strdup (ci->values[0].value.string);
    if (page->instance == NULL)
        status = cc_config_set_boolean ("VerifyPeer", &page->verify_peer, child);
      else if (strcasecmp ("VerifyHost", child->key) == 0)
        status = cc_config_set_boolean ("VerifyHost", &page->verify_host, child);
 +    else if (strcasecmp ("MeasureResponseTime", child->key) == 0)
 +      status = cc_config_set_boolean (child->key, &page->response_time, child);
      else if (strcasecmp ("CACert", child->key) == 0)
        status = cc_config_add_string ("CACert", &page->cacert, child);
      else if (strcasecmp ("Match", child->key) == 0)
        status = -1;
      }
  
 -    if (page->matches == NULL)
 +    if (page->matches == NULL && !page->response_time)
      {
        assert (page->instance != NULL);
        WARNING ("curl plugin: No (valid) `Match' block "
 -          "within `Page' block `%s'.", page->instance);
 +          "or MeasureResponseTime within `Page' block `%s'.", page->instance);
        status = -1;
      }
  
@@@ -580,32 -577,10 +581,32 @@@ static void cc_submit (const web_page_
    plugin_dispatch_values (&vl);
  } /* }}} void cc_submit */
  
 +static void cc_submit_response_time (const web_page_t *wp, double seconds) /* {{{ */
 +{
 +  value_t values[1];
 +  value_list_t vl = VALUE_LIST_INIT;
 +
 +  values[0].gauge = seconds;
 +
 +  vl.values = values;
 +  vl.values_len = 1;
 +  vl.time = time (NULL);
 +  sstrncpy (vl.host, hostname_g, sizeof (vl.host));
 +  sstrncpy (vl.plugin, "curl", sizeof (vl.plugin));
 +  sstrncpy (vl.plugin_instance, wp->instance, sizeof (vl.plugin_instance));
 +  sstrncpy (vl.type, "response_time", sizeof (vl.type));
 +
 +  plugin_dispatch_values (&vl);
 +} /* }}} void cc_submit_response_time */
 +
  static int cc_read_page (web_page_t *wp) /* {{{ */
  {
    web_match_t *wm;
    int status;
 +  struct timeval start, end;
 +
 +  if (wp->response_time)
 +    gettimeofday (&start, NULL);
  
    wp->buffer_fill = 0;
    status = curl_easy_perform (wp->curl);
      return (-1);
    }
  
 +  if (wp->response_time)
 +  {
 +    double secs = 0;
 +    gettimeofday (&end, NULL);
 +    secs += end.tv_sec - start.tv_sec;
 +    secs += (end.tv_usec - start.tv_usec) / 1000000.0;
 +    cc_submit_response_time (wp, secs);
 +  }
 +
    for (wm = wp->matches; wm != NULL; wm = wm->next)
    {
      cu_match_value_t *mv;
diff --combined src/exec.c
@@@ -265,17 -265,6 +265,17 @@@ static int exec_config (oconfig_item_t 
    return (0);
  } /* int exec_config }}} */
  
 +static void set_environment (void) /* {{{ */
 +{
 +  char buffer[1024];
 +
 +  ssnprintf (buffer, sizeof (buffer), "%i", interval_g);
 +  setenv ("COLLECTD_INTERVAL", buffer, /* overwrite = */ 1);
 +
 +  ssnprintf (buffer, sizeof (buffer), "%s", hostname_g);
 +  setenv ("COLLECTD_HOSTNAME", buffer, /* overwrite = */ 1);
 +} /* }}} void set_environment */
 +
  static void exec_child (program_list_t *pl) /* {{{ */
  {
    int status;
    exit (-1);
  } /* void exec_child }}} */
  
+ static void reset_signal_mask (void) /* {{{ */
+ {
+   sigset_t ss;
+   memset (&ss, 0, sizeof (ss));
+   sigemptyset (&ss);
+   sigprocmask (SIG_SETMASK, &ss, /* old mask = */ NULL);
+ } /* }}} void reset_signal_mask */
  /*
   * Creates three pipes (one for reading, one for writing and one for errors),
   * forks a child, sets up the pipes so that fd_in is connected to STDIN of
@@@ -479,7 -477,9 +488,11 @@@ static int fork_child (program_list_t *
        close (fd_pipe_err[1]);
      }
  
 +    set_environment ();
++
+     /* Unblock all signals */
+     reset_signal_mask ();
      exec_child (pl);
      /* does not return */
    }
@@@ -742,7 -742,8 +755,8 @@@ static void *exec_notification_one (voi
    DEBUG ("exec plugin: Child %i exited with status %i.",
        pid, status);
  
-   plugin_notification_meta_free (n->meta);
+   if (n->meta != NULL)
+     plugin_notification_meta_free (n->meta);
    n->meta = NULL;
    sfree (arg);
    pthread_exit ((void *) 0);