Example #1
0
class InfluxDBOutput(Thread):
    output_name = 'influxdb'

    def __init__(self, host, port, username, password, database, prefetch=10, proto='http'):
        Thread.__init__(self)
        self.prefetch = prefetch
        self.proto = proto
        self.host = host
        self.port = port

        if self.proto == 'http':
            self.client = InfluxDBClient(host, port, username, password, database)
        elif self.proto == 'udp':
            self.client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        else:
            raise ValueError('unknown protocol: %s' % (self.proto, ))

    def set_in_queue(self, queue):
        self._queue = queue

    def run(self):
        metrics = []
        while True:
            metrics += self._queue.get()

            if len(metrics) >= self.prefetch:
                try:
                    if self.proto == 'http':
                        self.client.write_points(metrics)
                    elif self.proto == 'udp':
                        self.client.sendto(json.dumps(metrics), (self.host, self.port))
                except Exception as err:
                    logger.warning('error while processing event: %s' % (str(err), ))
                finally:
                    metrics = []