summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: f7e26c2)
raw | patch | inline | side by side (parent: f7e26c2)
author | Florian Forster <octo@collectd.org> | |
Sat, 5 Nov 2016 21:32:49 +0000 (22:32 +0100) | ||
committer | Florian Forster <octo@collectd.org> | |
Sun, 6 Nov 2016 21:20:29 +0000 (22:20 +0100) |
Fixes: #2025
src/apcups.c | patch | blob | history |
diff --git a/src/apcups.c b/src/apcups.c
index 281bf9803bdd6e6a84086b152f14b623961337b7..eb1f0622989b9793acc66cde043cb43e484808b3 100644 (file)
--- a/src/apcups.c
+++ b/src/apcups.c
/*
* Private data types
*/
-struct apc_detail_s
+typedef struct
{
- double linev;
- double loadpct;
- double bcharge;
- double timeleft;
- double outputv;
- double itemp;
- double battv;
- double linefreq;
-};
+ gauge_t linev;
+ gauge_t loadpct;
+ gauge_t bcharge;
+ gauge_t timeleft;
+ gauge_t outputv;
+ gauge_t itemp;
+ gauge_t battv;
+ gauge_t linefreq;
+} apc_detail_t;
/*
* Private variables
/* Get and print status from apcupsd NIS server */
static int apc_query_server (char *host, int port,
- struct apc_detail_s *apcups_detail)
+ apc_detail_t *apcups_detail)
{
int n;
char recvline[1024];
char *tokptr;
char *toksaveptr;
- char *key;
- double value;
_Bool retry = 1;
int status;
tokptr = strtok_r (recvline, " :\t", &toksaveptr);
while (tokptr != NULL)
{
- key = tokptr;
+ char *key = tokptr;
if ((tokptr = strtok_r (NULL, " :\t", &toksaveptr)) == NULL)
continue;
- value = atof (tokptr);
+
+ gauge_t value;
+ if (strtogauge (tokptr, &value) != 0)
+ continue;
PRINT_VALUE (key, value);
return (0);
}
-static void apc_submit_generic (char *type, char *type_inst, double value)
+static void apc_submit_generic (char *type, char *type_inst, gauge_t value)
{
value_t values[1];
value_list_t vl = VALUE_LIST_INIT;
+ if (isnan (value))
+ return;
+
values[0].gauge = value;
vl.values = values;
plugin_dispatch_values (&vl);
}
-static void apc_submit (struct apc_detail_s *apcups_detail)
+static void apc_submit (apc_detail_t const *apcups_detail)
{
apc_submit_generic ("voltage", "input", apcups_detail->linev);
apc_submit_generic ("voltage", "output", apcups_detail->outputv);
static int apcups_read (void)
{
- struct apc_detail_s apcups_detail;
- int status;
-
- apcups_detail.linev = -1.0;
- apcups_detail.outputv = -1.0;
- apcups_detail.battv = -1.0;
- apcups_detail.loadpct = -1.0;
- apcups_detail.bcharge = -1.0;
- apcups_detail.timeleft = NAN;
- apcups_detail.itemp = -300.0;
- apcups_detail.linefreq = -1.0;
-
- status = apc_query_server (conf_host == NULL
+ apc_detail_t apcups_detail = {
+ .linev = NAN,
+ .outputv = NAN,
+ .battv = NAN,
+ .loadpct = NAN,
+ .bcharge = NAN,
+ .timeleft = NAN,
+ .itemp = NAN,
+ .linefreq = NAN,
+ };
+
+ int status = apc_query_server (conf_host == NULL
? APCUPS_DEFAULT_HOST
: conf_host,
conf_port, &apcups_detail);
-
- /*
- * if we did not connect then do not bother submitting
- * zeros. We want rrd files to have NAN.
- */
if (status != 0)
{
DEBUG ("apcups plugin: apc_query_server (%s, %i) = %i",
- conf_host == NULL
- ? APCUPS_DEFAULT_HOST
- : conf_host,
+ conf_host == NULL ? APCUPS_DEFAULT_HOST : conf_host,
conf_port, status);
- return (-1);
+ return (status);
}
apc_submit (&apcups_detail);