#!/usr/bin/python # # sfive # # sfive - spreadspace streaming statistics suite is a generic # statistic collection tool for streaming server infrastuctures. # The system collects and stores meta data like number of views # and throughput from a number of streaming servers and stores # it in a global data store. # The data acquisition is designed to be generic and extensible in # order to support different streaming software. # sfive also contains tools and applications to filter and visualize # live and recorded data. # # # Copyright (C) 2014 Christian Pointner # Markus Grueneis # # This file is part of sfive. # # sfive is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3 # as published by the Free Software Foundation. # # sfive is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with sfive. If not, see . # from twisted.internet import reactor from twisted.internet.defer import Deferred from twisted.internet.protocol import Protocol from twisted.web.client import Agent from twisted.web.http_headers import Headers import simplejson as json import datetime class SFiveNGXluaProto(Protocol): def __init__(self, finished): self.data = '' self.finished = finished print 'Started receiving log data' def dataReceived(self, bytes): self.data += bytes lines = self.data.splitlines(True) if len(lines) > 0: if '\n' not in lines[-1] and '\r' not in lines[-1]: self.data = lines[-1] del lines[-1] else: self.data = '' if len(lines) > 0: print '\nlog data received:' for line in lines: print json.loads(line) def connectionLost(self, reason): print 'Finished receiving log data:', reason.getErrorMessage() self.finished.callback(None) agent = Agent(reactor) d = agent.request( 'GET', 'http://calypso.spreadspace.org/sfive', Headers({'User-Agent': ['SFive nginx-lua fetcher']}), None) def cbRequest(response): finished = Deferred() response.deliverBody(SFiveNGXluaProto(finished)) return finished d.addCallback(cbRequest) def cbShutdown(ignored): reactor.stop() d.addBoth(cbShutdown) reactor.run()