X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fmbmon.c;h=90226bbf6e7403eda02919b8b9e02fb008215ba2;hb=be99a844a40d7037a910d37a894988b807631a6e;hp=0d9cd163215b1fd63dffca298c9cbaa3235e8fd2;hpb=6360474f4aa35dd1a587b6148ff88a23e6155132;p=collectd.git diff --git a/src/mbmon.c b/src/mbmon.c index 0d9cd163..90226bbf 100644 --- a/src/mbmon.c +++ b/src/mbmon.c @@ -1,6 +1,7 @@ /** * collectd - src/mbmon.c - * Copyright (C) 2006 Flavio Stanchina + * Copyright (C) 2006 Flavio Stanchina + * Copyright (C) 2006-2007 Florian octo Forster * Based on the hddtemp plugin. * * This program is free software; you can redistribute it and/or modify it @@ -19,57 +20,22 @@ * * Authors: * Flavio Stanchina + * Florian Forster **/ #include "collectd.h" #include "common.h" #include "plugin.h" #include "configfile.h" -#include "utils_debug.h" - -#if HAVE_NETDB_H && HAVE_SYS_SOCKET_H && HAVE_NETINET_IN_H && HAVE_NETINET_TCP_H -# include -# include -# include -# include -# define MBMON_HAVE_READ 1 -#else -# define MBMON_HAVE_READ 0 -#endif + +#include +#include +#include +#include #define MBMON_DEF_HOST "127.0.0.1" #define MBMON_DEF_PORT "411" /* the default for Debian */ -static data_source_t data_source_fanspeed[1] = -{ - {"value", DS_TYPE_GAUGE, 0, NAN} -}; - -static data_set_t fanspeed_ds = -{ - "fanspeed", 1, data_source_fanspeed -}; - -static data_source_t data_source_temperature[1] = -{ - {"value", DS_TYPE_GAUGE, -273.15, NAN} -}; - -static data_set_t temperature_ds = -{ - "temperature", 1, data_source_temperature -}; - -static data_source_t data_source_voltage[1] = -{ - {"voltage", DS_TYPE_GAUGE, NAN, NAN} -}; - -static data_set_t voltage_ds = -{ - "voltage", 1, data_source_voltage -}; - static const char *config_keys[] = { "Host", @@ -78,7 +44,6 @@ static const char *config_keys[] = }; static int config_keys_num = 2; -#if MBMON_HAVE_READ static char *mbmon_host = NULL; static char *mbmon_port = NULL; @@ -125,7 +90,10 @@ static int mbmon_query_daemon (char *buffer, int buffer_size) int ai_return; memset (&ai_hints, '\0', sizeof (ai_hints)); - ai_hints.ai_flags = AI_ADDRCONFIG; + ai_hints.ai_flags = 0; +#ifdef AI_ADDRCONFIG + ai_hints.ai_flags |= AI_ADDRCONFIG; +#endif ai_hints.ai_family = PF_UNSPEC; ai_hints.ai_socktype = SOCK_STREAM; ai_hints.ai_protocol = IPPROTO_TCP; @@ -140,9 +108,12 @@ static int mbmon_query_daemon (char *buffer, int buffer_size) if ((ai_return = getaddrinfo (host, port, &ai_hints, &ai_list)) != 0) { - syslog (LOG_ERR, "mbmon: getaddrinfo (%s, %s): %s", + char errbuf[1024]; + ERROR ("mbmon: getaddrinfo (%s, %s): %s", host, port, - ai_return == EAI_SYSTEM ? strerror (errno) : gai_strerror (ai_return)); + (ai_return == EAI_SYSTEM) + ? sstrerror (errno, errbuf, sizeof (errbuf)) + : gai_strerror (ai_return)); return (-1); } @@ -152,16 +123,20 @@ static int mbmon_query_daemon (char *buffer, int buffer_size) /* create our socket descriptor */ if ((fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol)) < 0) { - syslog (LOG_ERR, "mbmon: socket: %s", - strerror (errno)); + char errbuf[1024]; + ERROR ("mbmon: socket: %s", + sstrerror (errno, errbuf, + sizeof (errbuf))); continue; } /* connect to the mbmon daemon */ if (connect (fd, (struct sockaddr *) ai_ptr->ai_addr, ai_ptr->ai_addrlen)) { - DBG ("mbmon: connect (%s, %s): %s", host, port, - strerror (errno)); + char errbuf[1024]; + INFO ("mbmon: connect (%s, %s): %s", host, port, + sstrerror (errno, errbuf, + sizeof (errbuf))); close (fd); fd = -1; continue; @@ -176,7 +151,7 @@ static int mbmon_query_daemon (char *buffer, int buffer_size) if (fd < 0) { - syslog (LOG_ERR, "mbmon: Could not connect to daemon."); + ERROR ("mbmon: Could not connect to daemon."); return (-1); } @@ -188,11 +163,14 @@ static int mbmon_query_daemon (char *buffer, int buffer_size) { if (status == -1) { + char errbuf[1024]; + if ((errno == EAGAIN) || (errno == EINTR)) continue; - syslog (LOG_ERR, "mbmon: Error reading from socket: %s", - strerror (errno)); + ERROR ("mbmon: Error reading from socket: %s", + sstrerror (errno, errbuf, + sizeof (errbuf))); close (fd); return (-1); } @@ -205,11 +183,11 @@ static int mbmon_query_daemon (char *buffer, int buffer_size) if (buffer_fill >= buffer_size) { buffer[buffer_size - 1] = '\0'; - syslog (LOG_WARNING, "mbmon: Message from mbmon has been truncated."); + WARNING ("mbmon: Message from mbmon has been truncated."); } else if (buffer_fill == 0) { - syslog (LOG_WARNING, "mbmon: Peer has unexpectedly shut down the socket. " + WARNING ("mbmon: Peer has unexpectedly shut down the socket. " "Buffer: `%s'", buffer); close (fd); return (-1); @@ -251,12 +229,12 @@ static void mbmon_submit (const char *type, const char *type_instance, vl.values = values; vl.values_len = 1; - vl.time = time (NULL); - strcpy (vl.host, hostname); - strcpy (vl.plugin, "mbmon"); - strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); + sstrncpy (vl.host, hostname_g, sizeof (vl.host)); + sstrncpy (vl.plugin, "mbmon", sizeof (vl.plugin)); + sstrncpy (vl.type, type, sizeof (vl.type)); + sstrncpy (vl.type_instance, type_instance, sizeof (vl.type_instance)); - plugin_dispatch_values (type, &vl); + plugin_dispatch_values (&vl); } /* void mbmon_submit */ /* Trim trailing whitespace from a string. */ @@ -264,7 +242,7 @@ static void trim_spaces (char *s) { size_t l; - for (l = strlen (s) - 1; (l > 0) && isspace (s[l]); l--) + for (l = strlen (s) - 1; (l > 0) && isspace ((int) s[l]); l--) s[l] = '\0'; } @@ -292,7 +270,7 @@ static int mbmon_read (void) value = strtod (t, &nextc); if ((*nextc != '\n') && (*nextc != '\0')) { - syslog (LOG_ERR, "mbmon: value for `%s' contains invalid characters: `%s'", s, t); + ERROR ("mbmon: value for `%s' contains invalid characters: `%s'", s, t); break; } @@ -326,18 +304,11 @@ static int mbmon_read (void) return (0); } /* void mbmon_read */ -#endif /* MBMON_HAVE_READ */ /* module_register Register collectd plugin. */ void module_register (void) { - plugin_register_data_set (&fanspeed_ds); - plugin_register_data_set (&temperature_ds); - plugin_register_data_set (&voltage_ds); - -#if MBMON_HAVE_READ plugin_register_config ("mbmon", mbmon_config, config_keys, config_keys_num); plugin_register_read ("mbmon", mbmon_read); -#endif /* MBMON_HAVE_READ */ -} +} /* void module_register */