Source code for tensor.sources.riemann

"""
.. module:: riemann
   :platform: Unix
   :synopsis: A source module which provides Riemann servers

.. moduleauthor:: Colin Alston <colin@imcol.in>
"""

import time

from twisted.internet import defer, reactor
from twisted.names import client
from twisted.internet.protocol import Factory

from zope.interface import implementer

from tensor.interfaces import ITensorSource
from tensor.objects import Source, Event
from tensor import utils

from tensor.protocol import riemann


[docs]class RiemannTCPServer(riemann.RiemannProtocol): """ Server implementation of the Riemann protocol """ def __init__(self, source): riemann.RiemannProtocol.__init__(self) self.source = source def stringReceived(self, string): message = self.decodeMessage(string) for event in message.events: self.source.queueBack( Event( event.state, event.service, event.description, event.metric_f, event.ttl, hostname=event.host, evtime=event.time ) )
class RiemannTCPFactory(Factory): def __init__(self, source): self.source = source def buildProtocol(self, addr): return RiemannTCPServer(self.source) @implementer(ITensorSource)
[docs]class RiemannTCP(Source): """Provides a listening server which accepts Riemann metrics and proxies them to our queue. **Configuration arguments:** :param port: Port to listen on (default 5555) :type port: int. """
[docs] def startTimer(self): """Creates a Riemann TCP server instead of a timer """ reactor.listenTCP(int(self.config.get('port', 5555)), RiemannTCPFactory(self))
def get(self): pass