summaryrefslogtreecommitdiffstats
path: root/glances/exports/glances_influxdb.py
diff options
context:
space:
mode:
Diffstat (limited to 'glances/exports/glances_influxdb.py')
-rw-r--r--glances/exports/glances_influxdb.py86
1 files changed, 55 insertions, 31 deletions
diff --git a/glances/exports/glances_influxdb.py b/glances/exports/glances_influxdb.py
index 60b9c1ee..36a3395f 100644
--- a/glances/exports/glances_influxdb.py
+++ b/glances/exports/glances_influxdb.py
@@ -20,14 +20,21 @@
"""InfluxDB interface class."""
# Import sys libs
-from influxdb import InfluxDBClient, client
import sys
+try:
+ from configparser import NoOptionError, NoSectionError
+except ImportError: # Python 2
+ from ConfigParser import NoOptionError, NoSectionError
# Import Glances lib
from glances.core.glances_logging import logger
-from ConfigParser import NoSectionError, NoOptionError
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
+
class Export(GlancesExport):
@@ -38,11 +45,12 @@ class Export(GlancesExport):
GlancesExport.__init__(self, config=config, args=args)
# Load the InfluxDB configuration file
- self.influxdb_host = None
- self.influxdb_port = None
- self.influxdb_user = None
- self.influxdb_password = None
- self.influxdb_db = None
+ self.host = None
+ self.port = None
+ self.user = None
+ self.password = None
+ self.db = None
+ self.prefix = None
self.export_enable = self.load_conf()
if not self.export_enable:
sys.exit(2)
@@ -51,15 +59,15 @@ class Export(GlancesExport):
self.client = self.init()
def load_conf(self, section="influxdb"):
- """Load the InfluxDb configuration in the Glances configuration file"""
+ """Load the InfluxDb configuration in the Glances configuration file."""
if self.config is None:
return False
try:
- self.influxdb_host = self.config.get_raw_option(section, "host")
- self.influxdb_port = self.config.get_raw_option(section, "port")
- self.influxdb_user = self.config.get_raw_option(section, "user")
- self.influxdb_password = self.config.get_raw_option(section, "password")
- self.influxdb_db = self.config.get_raw_option(section, "db")
+ self.host = self.config.get_value(section, 'host')
+ self.port = self.config.get_value(section, 'port')
+ self.user = self.config.get_value(section, 'user')
+ self.password = self.config.get_value(section, 'password')
+ self.db = self.config.get_value(section, 'db')
except NoSectionError:
logger.critical("No InfluxDB configuration found")
return False
@@ -68,39 +76,55 @@ class Export(GlancesExport):
return False
else:
logger.debug("Load InfluxDB from the Glances configuration file")
+ # Prefix is optional
+ try:
+ self.prefix = self.config.get_value(section, 'prefix')
+ except NoOptionError:
+ pass
return True
def init(self):
- """Init the connection to the InfluxDB server"""
+ """Init the connection to the InfluxDB server."""
if not self.export_enable:
return None
- db = InfluxDBClient(self.influxdb_host,
- self.influxdb_port,
- self.influxdb_user,
- self.influxdb_password,
- self.influxdb_db)
+
try:
- get_all_db = db.get_database_list()[0].values()
- except client.InfluxDBClientError as e:
- logger.critical("Can not connect to InfluxDB database '%s' (%s)" % (self.influxdb_db, e))
+ db = InfluxDBClient(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()]
+ 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()]
+ except InfluxDBClientError08 as e:
+ logger.critical("Cannot connect to InfluxDB database '%s' (%s)" % (self.db, e))
sys.exit(2)
- if self.influxdb_db in get_all_db:
+ if self.db in get_all_db:
logger.info(
"Stats will be exported to InfluxDB server: {0}".format(db._baseurl))
else:
- logger.critical("InfluxDB database '%s' did not exist. Please create it" % self.influxdb_db)
+ logger.critical("InfluxDB database '%s' did not exist. Please create it" % self.db)
sys.exit(2)
return db
def export(self, name, columns, points):
- """Write the points to the InfluxDB server"""
- data = [
- {
- "name": name,
- "columns": columns,
- "points": [points]
- }]
+ """Write the points to the InfluxDB server."""
+ # Manage prefix
+ if self.prefix is not None:
+ name = self.prefix + '.' + name
+ # logger.info(self.prefix)
+ # Create DB input
+ data = [{'name': name, 'columns': columns, 'points': [points]}]
+ # Write input to the InfluxDB database
try:
self.client.write_points(data)
except Exception as e: