Merge branch 'issue1166' into develop

This commit is contained in:
nicolargo 2017-10-17 21:32:36 +02:00
commit 858232b24f
2 changed files with 18 additions and 36 deletions

4
NEWS
View File

@ -10,6 +10,7 @@ Enhancements and new features:
* A way to have only REST API available and disable WEB GUI access #1149
* Docker module doesn't export details about stopped containers #1152
* Add a light mode for the console UI #1165
* Refactor InfluxDB (API is now stable) #1166
Bugs corrected:
@ -19,7 +20,8 @@ Bugs corrected:
Backward-incompatible changes:
* Support for Docker API < 2.0 is deprecated (docker plugins)
* Support for Docker API < 2.0 is deprecated (Docker plugins)
* Support for InfluxDB < 0.9 is deprecated (InfluxDB exporter)
News command line options:

View File

@ -26,16 +26,9 @@ from glances.exports.glances_export import GlancesExport
from influxdb import InfluxDBClient
from influxdb.client import InfluxDBClientError
from influxdb.influxdb08 import InfluxDBClient as InfluxDBClient08
from influxdb.influxdb08.client import InfluxDBClientError as InfluxDBClientError08
# Constants for tracking specific behavior
INFLUXDB_08 = '0.8'
INFLUXDB_09PLUS = '0.9+'
class Export(GlancesExport):
"""This class manages the InfluxDB export module."""
def __init__(self, config=None, args=None):
@ -75,18 +68,7 @@ class Export(GlancesExport):
password=self.password,
database=self.db)
get_all_db = [i['name'] for i in db.get_list_database()]
self.version = INFLUXDB_09PLUS
except InfluxDBClientError:
# https://github.com/influxdb/influxdb-python/issues/138
logger.info("Trying fallback to InfluxDB v0.8")
db = InfluxDBClient08(host=self.host,
port=self.port,
username=self.user,
password=self.password,
database=self.db)
get_all_db = [i['name'] for i in db.get_list_database()]
self.version = INFLUXDB_08
except InfluxDBClientError08 as e:
except InfluxDBClientError as e:
logger.critical("Cannot connect to InfluxDB database '%s' (%s)" % (self.db, e))
sys.exit(2)
@ -99,29 +81,27 @@ class Export(GlancesExport):
return db
def _normalize(self, name, columns, points):
"""Normalize data for the InfluxDB's data model."""
for i, _ in enumerate(points):
try:
# Convert all int to float (mandatory for InfluxDB>0.9.2)
# Correct issue#750 and issue#749
points[i] = float(points[i])
except (TypeError, ValueError) as e:
logger.debug("InfluxDB error during stat convertion %s=%s (%s)" % (columns[i], points[i], e))
return [{'measurement': name,
'tags': self.parse_tags(self.tags),
'fields': dict(zip(columns, points))}]
def export(self, name, columns, points):
"""Write the points to the InfluxDB server."""
logger.debug("Export {} stats to InfluxDB".format(name))
# Manage prefix
if self.prefix is not None:
name = self.prefix + '.' + name
# Create DB input
if self.version == INFLUXDB_08:
data = [{'name': name, 'columns': columns, 'points': [points]}]
else:
# Convert all int to float (mandatory for InfluxDB>0.9.2)
# Correct issue#750 and issue#749
for i, _ in enumerate(points):
try:
points[i] = float(points[i])
except (TypeError, ValueError) as e:
logger.debug("InfluxDB error during stat convertion %s=%s (%s)" % (columns[i], points[i], e))
data = [{'measurement': name,
'tags': self.parse_tags(self.tags),
'fields': dict(zip(columns, points))}]
# Write input to the InfluxDB database
try:
self.client.write_points(data)
self.client.write_points(self._normalize(name, columns, points))
except Exception as e:
logger.error("Cannot export {} stats to InfluxDB ({})".format(name, e))