From a988e83df77c434b04be98a2cdde1fc15dc30be1 Mon Sep 17 00:00:00 2001 From: David Bell Date: Tue, 12 Apr 2016 10:01:20 +0100 Subject: [PATCH] Version 2 of sending the correct data to influx. Also catching the exception that would stop updates working. --- includes/functions.php | 24 +++++++++++++++++++++--- includes/influxdb.inc.php | 12 ++++++++++-- includes/polling/netstats-snmp.inc.php | 2 +- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/includes/functions.php b/includes/functions.php index b9da4a670b..66985ecd9f 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -1252,10 +1252,28 @@ function function_check($function) { return function_exists($function); } -function force_influx_data($type,$data) { - if ($type == 'f' || $type == 'float') { - return(sprintf("%.1f",$data)); +function force_influx_data($data) { + /* + * It is not trivial to detect if something is a float or an integer, and + * therefore may cause breakages on inserts. + * Just setting every number to a float gets around this, but may introduce + * inefficiencies. + * I've left the detection statement in there for a possible change in future, + * but currently everything just gets set to a float. + */ + + if (is_numeric($data)) { + // If it is an Integer + if (ctype_digit($data)) { + return floatval($data); + // Else it is a float + } else { + return floatval($data); + } + } else { + return $data; } + }// end force_influx_data /** diff --git a/includes/influxdb.inc.php b/includes/influxdb.inc.php index 80785f1001..f0fa6bdf8b 100644 --- a/includes/influxdb.inc.php +++ b/includes/influxdb.inc.php @@ -58,7 +58,10 @@ function influx_update($device,$measurement,$tags=array(),$fields) { $tmp_tags[$k] = $v; } foreach ($fields as $k => $v) { - $tmp_fields[$k] = force_influx_data('f',$v); + $tmp_fields[$k] = force_influx_data($v); + if( $tmp_fields[$k] === null) { + unset($tmp_fields[$k]); + } } d_echo("\nInfluxDB data:\n"); @@ -76,7 +79,12 @@ function influx_update($device,$measurement,$tags=array(),$fields) { $tmp_fields // optional additional fields ) ); - $result = $influxdb->writePoints($points); + try { + $result = $influxdb->writePoints($points); + } catch (Exception $e) { + d_echo("Caught exception: ", $e->getMessage(), "\n"); + d_echo($e->getTrace()); + } } else { print $console_color->convert('[%gInfluxDB Disabled%n] ', false); diff --git a/includes/polling/netstats-snmp.inc.php b/includes/polling/netstats-snmp.inc.php index 776f79457a..6732de3936 100644 --- a/includes/polling/netstats-snmp.inc.php +++ b/includes/polling/netstats-snmp.inc.php @@ -54,7 +54,7 @@ if ($device['os'] != 'Snom') { $value = $data_array[0][$oid]; } else { - $value = 'U'; + $value = null; } $fields[$oid] = $value; }