diff options
Diffstat (limited to 'glances/exports/glances_riemann/__init__.py')
-rw-r--r-- | glances/exports/glances_riemann/__init__.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/glances/exports/glances_riemann/__init__.py b/glances/exports/glances_riemann/__init__.py new file mode 100644 index 00000000..78c39eca --- /dev/null +++ b/glances/exports/glances_riemann/__init__.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# +# This file is part of Glances. +# +# SPDX-FileCopyrightText: 2022 Nicolas Hennion <nicolas@nicolargo.com> +# +# SPDX-License-Identifier: LGPL-3.0-only +# + +"""Riemann interface class.""" + +import socket +from numbers import Number + +from glances.logger import logger +from glances.exports.export import GlancesExport + +# Import bernhard for Riemann +import bernhard + + +class Export(GlancesExport): + + """This class manages the Riemann export module.""" + + def __init__(self, config=None, args=None): + """Init the Riemann export IF.""" + super(Export, self).__init__(config=config, args=args) + + # Mandatory configuration keys (additional to host and port) + # N/A + + # Optional configuration keys + # N/A + + # Load the Riemann configuration + self.export_enable = self.load_conf('riemann', mandatories=['host', 'port'], options=[]) + if not self.export_enable: + exit('Missing RIEMANN config') + + # Get the current hostname + self.hostname = socket.gethostname() + + # Init the Riemann client + self.client = self.init() + + def init(self): + """Init the connection to the Riemann server.""" + if not self.export_enable: + return None + try: + client = bernhard.Client(host=self.host, port=self.port) + return client + except Exception as e: + logger.critical("Connection to Riemann failed : %s " % e) + return None + + def export(self, name, columns, points): + """Write the points in Riemann.""" + for i in range(len(columns)): + if not isinstance(points[i], Number): + continue + else: + data = {'host': self.hostname, 'service': name + " " + columns[i], 'metric': points[i]} + logger.debug(data) + try: + self.client.send(data) + except Exception as e: + logger.error("Cannot export stats to Riemann (%s)" % e) |