mirror of
https://github.com/nicolargo/glances.git
synced 2025-01-03 07:03:40 +03:00
Merge branch 'issue1166' into develop
This commit is contained in:
commit
858232b24f
4
NEWS
4
NEWS
@ -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:
|
||||
|
||||
|
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user