diff options
Diffstat (limited to 'glances/exports/glances_influxdb.py')
-rw-r--r-- | glances/exports/glances_influxdb.py | 86 |
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: |