diff --git a/includes/functions.php b/includes/functions.php index b9da4a670..d7597c8ae 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -1252,10 +1252,30 @@ 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 80785f100..f0fa6bdf8 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 776f79457..c1d6b461c 100644 --- a/includes/polling/netstats-snmp.inc.php +++ b/includes/polling/netstats-snmp.inc.php @@ -48,16 +48,7 @@ if ($device['os'] != 'Snom') { $data_array = snmpwalk_cache_oid($device, 'snmp', array(), 'SNMPv2-MIB'); - $fields = array(); - foreach ($oids as $oid) { - if (is_numeric($data_array[0][$oid])) { - $value = $data_array[0][$oid]; - } - else { - $value = 'U'; - } - $fields[$oid] = $value; - } + $fields = $data_array[0]; if (isset($data_array[0]['snmpInPkts']) && isset($data_array[0]['snmpOutPkts'])) { if (!file_exists($rrd_file)) {