import time
from twisted.internet import defer
from zope.interface import implementer
from tensor.interfaces import ITensorSource
from tensor.objects import Source
from tensor.utils import fork
@implementer(ITensorSource)
[docs]class DarwinRTSP(Source):
"""Makes avprobe requests of a Darwin RTSP sample stream
(sample_100kbit.mp4)
**Configuration arguments:**
:param destination: Host name or IP address to check
:type method: str.
**Metrics:**
:(service name): Time to complete request
You can also override the `hostname` argument to make it match
metrics from that host.
"""
@defer.inlineCallbacks
def get(self):
host = self.config.get('destination', self.hostname)
t0 = time.time()
try:
out, err, code = yield fork('/usr/bin/avprobe',
args=('rtsp://%s/sample_100kbit.mp4' % host, ), timeout=30.0)
except:
code = 1
err = None
t_delta = (time.time() - t0) * 1000
if code == 0:
e = self.createEvent('ok', 'RTSP Request time to %s' % host,
t_delta)
else:
if err:
try:
error = err.strip('\n').split('\n')[-2]
except:
error = err.replace('\n', '-')
else:
error = "Execution error"
e = self.createEvent('critical',
'Unable to stream %s:%s' % (host, error),
t_delta)
defer.returnValue(e)