X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fapcups.c;h=83a5c87a3b770b85df448a0fe0f13398569f345f;hp=3b8b03c29d4586d46947cf253826f5c5012a2717;hb=54619dc85fd308b21ed09a0271e5c7383c7921b9;hpb=cd401b9728839f8b24fd16fac9e9c1753526fd4e diff --git a/src/apcups.c b/src/apcups.c index 3b8b03c2..83a5c87a 100644 --- a/src/apcups.c +++ b/src/apcups.c @@ -26,8 +26,8 @@ #include "collectd.h" -#include "common.h" /* rrd_update_file */ -#include "plugin.h" /* plugin_register, plugin_submit */ +#include "plugin.h" /* plugin_register, plugin_submit */ +#include "utils/common/common.h" /* rrd_update_file */ #if HAVE_SYS_TYPES_H #include @@ -70,37 +70,37 @@ typedef struct { * Private variables */ /* Default values for contacting daemon */ -static char *conf_node = NULL; -static char *conf_service = NULL; +static char *conf_node; +static char *conf_service; /* Defaults to false for backwards compatibility. */ -static _Bool conf_report_seconds = 0; -static _Bool conf_persistent_conn = 1; +static bool conf_report_seconds; +static bool conf_persistent_conn = true; static int global_sockfd = -1; -static int count_retries = 0; -static int count_iterations = 0; +static int count_retries; +static int count_iterations; static int net_shutdown(int *fd) { uint16_t packet_size = 0; if ((fd == NULL) || (*fd < 0)) - return (EINVAL); + return EINVAL; (void)swrite(*fd, (void *)&packet_size, sizeof(packet_size)); close(*fd); *fd = -1; - return (0); + return 0; } /* int net_shutdown */ /* Close the network connection */ static int apcups_shutdown(void) { if (global_sockfd < 0) - return (0); + return 0; net_shutdown(&global_sockfd); - return (0); + return 0; } /* int apcups_shutdown */ /* @@ -119,11 +119,9 @@ static int net_open(char const *node, char const *service) { status = getaddrinfo(node, service, &ai_hints, &ai_return); if (status != 0) { - char errbuf[1024]; INFO("apcups plugin: getaddrinfo failed: %s", - (status == EAI_SYSTEM) ? sstrerror(errno, errbuf, sizeof(errbuf)) - : gai_strerror(status)); - return (-1); + (status == EAI_SYSTEM) ? STRERRNO : gai_strerror(status)); + return -1; } /* Create socket */ @@ -138,7 +136,7 @@ static int net_open(char const *node, char const *service) { if (sd < 0) { DEBUG("apcups plugin: Unable to open a socket"); freeaddrinfo(ai_return); - return (-1); + return -1; } status = connect(sd, ai_list->ai_addr, ai_list->ai_addrlen); @@ -147,16 +145,14 @@ static int net_open(char const *node, char const *service) { if (status != 0) /* `connect(2)' failed */ { - char errbuf[1024]; - INFO("apcups plugin: connect failed: %s", - sstrerror(errno, errbuf, sizeof(errbuf))); + INFO("apcups plugin: connect failed: %s", STRERRNO); close(sd); - return (-1); + return -1; } DEBUG("apcups plugin: Done opening a socket %i", sd); - return (sd); + return sd; } /* int net_open */ /* @@ -175,7 +171,7 @@ static int net_recv(int *sockfd, char *buf, int buflen) { if (sread(*sockfd, (void *)&packet_size, sizeof(packet_size)) != 0) { close(*sockfd); *sockfd = -1; - return (-1); + return -1; } packet_size = ntohs(packet_size); @@ -185,20 +181,20 @@ static int net_recv(int *sockfd, char *buf, int buflen) { packet_size, buflen); close(*sockfd); *sockfd = -1; - return (-2); + return -2; } if (packet_size == 0) - return (0); + return 0; /* now read the actual data */ if (sread(*sockfd, (void *)buf, packet_size) != 0) { close(*sockfd); *sockfd = -1; - return (-1); + return -1; } - return ((int)packet_size); + return (int)packet_size; } /* static int net_recv (int *sockfd, char *buf, int buflen) */ /* @@ -220,17 +216,17 @@ static int net_send(int *sockfd, const char *buff, int len) { if (swrite(*sockfd, (void *)&packet_size, sizeof(packet_size)) != 0) { close(*sockfd); *sockfd = -1; - return (-1); + return -1; } /* send data packet */ if (swrite(*sockfd, (void *)buff, len) != 0) { close(*sockfd); *sockfd = -1; - return (-2); + return -2; } - return (0); + return 0; } /* Get and print status from apcupsd NIS server */ @@ -240,7 +236,8 @@ static int apc_query_server(char const *node, char const *service, char recvline[1024]; char *tokptr; char *toksaveptr; - _Bool retry = 1; + int try + = 0; int status; #if APCMAIN @@ -250,32 +247,33 @@ static int apc_query_server(char const *node, char const *service, #define PRINT_VALUE(name, val) /**/ #endif - while (retry) { + while (1) { if (global_sockfd < 0) { global_sockfd = net_open(node, service); if (global_sockfd < 0) { ERROR("apcups plugin: Connecting to the " "apcupsd failed."); - return (-1); + return -1; } } status = net_send(&global_sockfd, "status", strlen("status")); if (status != 0) { - /* net_send is closing the socket on error. */ + /* net_send closes the socket on error. */ assert(global_sockfd < 0); - if (retry) { - retry = 0; + if (try == 0) { + try + ++; count_retries++; continue; } ERROR("apcups plugin: Writing to the socket failed."); - return (-1); + return -1; } break; - } /* while (retry) */ + } /* while (1) */ /* When collectd's collection interval is larger than apcupsd's * timeout, we would have to retry / re-connect each iteration. Try to @@ -287,7 +285,7 @@ static int apc_query_server(char const *node, char const *service, "first %i iterations. Will close the socket " "in future iterations.", count_retries, count_iterations); - conf_persistent_conn = 0; + conf_persistent_conn = false; } while ((n = net_recv(&global_sockfd, recvline, sizeof(recvline) - 1)) > 0) { @@ -341,17 +339,15 @@ static int apc_query_server(char const *node, char const *service, net_shutdown(&global_sockfd); if (n < 0) { - char errbuf[1024]; - ERROR("apcups plugin: Reading from socket failed: %s", - sstrerror(status, errbuf, sizeof(errbuf))); - return (-1); + ERROR("apcups plugin: Reading from socket failed: %s", STRERROR(status)); + return -1; } - return (0); + return 0; } static int apcups_config(oconfig_item_t *ci) { - _Bool persistent_conn_set = 0; + bool persistent_conn_set = false; for (int i = 0; i < ci->children_num; i++) { oconfig_item_t *child = ci->children + i; @@ -364,7 +360,7 @@ static int apcups_config(oconfig_item_t *ci) { cf_util_get_boolean(child, &conf_report_seconds); else if (strcasecmp(child->key, "PersistentConnection") == 0) { cf_util_get_boolean(child, &conf_persistent_conn); - persistent_conn_set = 1; + persistent_conn_set = true; } else ERROR("apcups plugin: Unknown config option \"%s\".", child->key); } @@ -376,11 +372,11 @@ static int apcups_config(oconfig_item_t *ci) { "Apcupsd NIS socket timeout is %.3f seconds, " "PersistentConnection disabled by default.", interval, APCUPS_SERVER_TIMEOUT); - conf_persistent_conn = 0; + conf_persistent_conn = false; } } - return (0); + return 0; } /* int apcups_config */ static void apc_submit_generic(const char *type, const char *type_inst, @@ -421,23 +417,32 @@ static int apcups_read(void) { .linefreq = NAN, }; - int status = - apc_query_server(conf_node == NULL ? APCUPS_DEFAULT_NODE : conf_node, - conf_service, &apcups_detail); + int status = apc_query_server(conf_node, conf_service, &apcups_detail); + if (status != 0) { - DEBUG("apcups plugin: apc_query_server (\"%s\", \"%s\") = %d", - conf_node == NULL ? APCUPS_DEFAULT_NODE : conf_node, conf_service, - status); - return (status); + DEBUG("apcups plugin: apc_query_server (\"%s\", \"%s\") = %d", conf_node, + conf_service, status); + return status; } apc_submit(&apcups_detail); - return (0); + return 0; } /* apcups_read */ +static int apcups_init(void) { + if (conf_node == NULL) + conf_node = APCUPS_DEFAULT_NODE; + + if (conf_service == NULL) + conf_service = APCUPS_DEFAULT_SERVICE; + + return 0; +} /* apcups_init */ + void module_register(void) { plugin_register_complex_config("apcups", apcups_config); + plugin_register_init("apcups", apcups_init); plugin_register_read("apcups", apcups_read); plugin_register_shutdown("apcups", apcups_shutdown); } /* void module_register */