X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Femail.c;h=594ef962d97c6441a6c53f17381142b15f65ea4b;hb=3f5fc2f959affe8f2c40944aeed6c2bf75cf462c;hp=eed91f170cc1c16639acf47f084975127132f9cc;hpb=358556cc2c0a8e10a4db94a584d049545ad01cd7;p=collectd.git diff --git a/src/email.c b/src/email.c index eed91f17..594ef962 100644 --- a/src/email.c +++ b/src/email.c @@ -4,8 +4,7 @@ * * 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 - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. + * Free Software Foundation; only version 2 of the License is applicable. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -44,20 +43,9 @@ # include #endif -#if HAVE_SYS_SELECT_H -# include -#endif /* HAVE_SYS_SELECT_H */ - -#if HAVE_SYS_SOCKET_H -# include -#endif /* HAVE_SYS_SOCKET_H */ - -/* *sigh* glibc does not define UNIX_PATH_MAX in sys/un.h ... */ -#if HAVE_LINUX_UN_H -# include -#elif HAVE_SYS_UN_H -# include -#endif /* HAVE_LINUX_UN_H | HAVE_SYS_UN_H */ +#include +#include +#include /* some systems (e.g. Darwin) seem to not define UNIX_PATH_MAX at all */ #ifndef UNIX_PATH_MAX @@ -137,36 +125,6 @@ static const char *config_keys[] = }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); -static data_source_t gauge_dsrc[1] = -{ - {"value", DS_TYPE_GAUGE, 0.0, NAN} -}; - -static data_set_t email_count_ds = -{ - "email_count", 1, gauge_dsrc -}; - -static data_set_t email_size_ds = -{ - "email_size", 1, gauge_dsrc -}; - -static data_set_t spam_check_ds = -{ - "spam_check", 1, gauge_dsrc -}; - -static data_source_t spam_score_dsrc[1] = -{ - {"score", DS_TYPE_GAUGE, NAN, NAN} -}; - -static data_set_t spam_score_ds = -{ - "spam_score", 1, spam_score_dsrc -}; - /* socket configuration */ static char *sock_group = COLLECTD_GRP_NAME; static int sock_perms = S_IRWXU | S_IRWXG; @@ -190,7 +148,7 @@ static conn_list_t conns; static pthread_cond_t collector_available = PTHREAD_COND_INITIALIZER; /* collector threads */ -static collector_t **collectors; +static collector_t **collectors = NULL; static pthread_mutex_t available_mutex = PTHREAD_MUTEX_INITIALIZER; static int available_collectors; @@ -724,9 +682,6 @@ static int email_shutdown (void) { int i = 0; - if (disabled) - return (0); - if (connector != ((pthread_t) 0)) { pthread_kill (connector, SIGTERM); connector = (pthread_t) 0; @@ -740,21 +695,27 @@ static int email_shutdown (void) /* don't allow any more connections to be processed */ pthread_mutex_lock (&conns_mutex); - for (i = 0; i < max_conns; ++i) { - if (collectors[i]->thread != ((pthread_t) 0)) { - pthread_kill (collectors[i]->thread, SIGTERM); - collectors[i]->thread = (pthread_t) 0; - } - - if (collectors[i]->socket >= 0) { - close (collectors[i]->socket); - collectors[i]->socket = -1; + if (collectors != NULL) { + for (i = 0; i < max_conns; ++i) { + if (collectors[i] == NULL) + continue; + + if (collectors[i]->thread != ((pthread_t) 0)) { + pthread_kill (collectors[i]->thread, SIGTERM); + collectors[i]->thread = (pthread_t) 0; + } + + if (collectors[i]->socket >= 0) { + close (collectors[i]->socket); + collectors[i]->socket = -1; + } } - } + } /* if (collectors != NULL) */ pthread_mutex_unlock (&conns_mutex); unlink (SOCK_PATH); + errno = 0; return (0); } /* static void email_shutdown (void) */ @@ -818,7 +779,8 @@ static int email_read (void) { type_t *ptr; - double sc; + double score_old; + int score_count_old; static type_list_t *cnt; static type_list_t *sz; @@ -867,13 +829,15 @@ static int email_read (void) /* spam score */ pthread_mutex_lock (&score_mutex); - sc = score; + score_old = score; + score_count_old = score_count; score = 0.0; score_count = 0; pthread_mutex_unlock (&score_mutex); - email_submit ("spam_score", "", sc); + if (score_count_old > 0) + email_submit ("spam_score", "", score_old); /* spam checks */ pthread_mutex_lock (&check_mutex); @@ -888,22 +852,11 @@ static int email_read (void) return (0); } /* int email_read */ -void module_register (modreg_e load) +void module_register (void) { - if (load & MR_DATASETS) - { - plugin_register_data_set (&email_count_ds); - plugin_register_data_set (&email_size_ds); - plugin_register_data_set (&spam_check_ds); - plugin_register_data_set (&spam_score_ds); - } - - if (load & MR_READ) - { - plugin_register_config ("email", email_config, config_keys, config_keys_num); - plugin_register_init ("email", email_init); - plugin_register_read ("email", email_read); - } + plugin_register_config ("email", email_config, config_keys, config_keys_num); + plugin_register_init ("email", email_init); + plugin_register_read ("email", email_read); plugin_register_shutdown ("email", email_shutdown); } /* void module_register */