Mercurial > code > home > repos > light9
changeset 1493:4294ed82ee16
move collector_loadtest and arrange for collector to be able to run the test itself, but that last part isn't working. you can run collector and collector_loadtest in two shells, though
Ignore-this: 9f32a0cb0ba3c1b29ccbe7330ed15bf4
author | drewp@bigasterisk.com |
---|---|
date | Mon, 13 Jun 2016 20:04:11 +0000 |
parents | ce97f298bfb8 |
children | ea9e8f581eea |
files | bin/collector bin/collector_loadtest.py |
diffstat | 2 files changed, 58 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/bin/collector Mon Jun 13 20:02:49 2016 +0000 +++ b/bin/collector Mon Jun 13 20:04:11 2016 +0000 @@ -1,7 +1,7 @@ #!bin/python from __future__ import division from rdflib import Graph, URIRef, Literal -from twisted.internet import reactor +from twisted.internet import reactor, utils from twisted.web.server import Site from txzmq import ZmqEndpoint, ZmqFactory, ZmqPullConnection import json @@ -80,28 +80,17 @@ log.info('serving http on %s, zmq on %s', networking.collector.port, networking.collectorZmq.port) if doLoadTest: - loadTest() - - -def loadTest(): - from light9.effect.sequencer import sendToCollector - import time - session = "loadtest%s" % time.time() - offset = 0 - for i in range(2000): - reactor.callLater(offset, sendToCollector, "http://dash:8200/live/", session, - [["http://light9.bigasterisk.com/device/backlight1","http://light9.bigasterisk.com/color","#ffffff"], - ["http://light9.bigasterisk.com/device/backlight2","http://light9.bigasterisk.com/color","#ffffff"], - ["http://light9.bigasterisk.com/device/backlight3","http://light9.bigasterisk.com/color","#ffffff"], - ["http://light9.bigasterisk.com/device/backlight4","http://light9.bigasterisk.com/color","#ffffff"], - ["http://light9.bigasterisk.com/device/backlight5","http://light9.bigasterisk.com/color","#ffffff"], - ["http://light9.bigasterisk.com/device/down2","http://light9.bigasterisk.com/color","#ffffff"], - ["http://light9.bigasterisk.com/device/down3","http://light9.bigasterisk.com/color","#ffffff"], - ["http://light9.bigasterisk.com/device/down4","http://light9.bigasterisk.com/color","#ffffff"], - ["http://light9.bigasterisk.com/device/backlight5","http://light9.bigasterisk.com/uv",0.011]]) - offset += .005 - - reactor.callLater(offset, reactor.stop) + # in a subprocess since we don't want this client to be + # cooperating with the main event loop and only sending + # requests when there's free time + def afterWarmup(): + log.info('running collector_loadtest') + d = utils.getProcessValue('bin/python', ['bin/collector_loadtest.py']) + def done(*a): + log.info('loadtest done') + reactor.stop() + d.addCallback(done) + reactor.callLater(2, afterWarmup) def main(): parser = optparse.OptionParser()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/collector_loadtest.py Mon Jun 13 20:04:11 2016 +0000 @@ -0,0 +1,46 @@ +import sys +sys.path.append('bin') +from run_local import log +from light9.effect.sequencer import sendToCollector, sendToCollectorZmq +from light9.namespaces import L9, DEV +from twisted.internet import reactor +import time +import logging +log.setLevel(logging.DEBUG) +def loadTest(): + print "scheduling loadtest" + n = 2500 + times = [None] * n + session = "loadtest%s" % time.time() + offset = 0 + for i in range(n): + def send(i): + if i % 100 == 0: + log.info('sendToCollector %s', i) + d = sendToCollector("http://localhost:999999/", session, + [[DEV["backlight1"], L9["color"], "#ffffff"], + [DEV["backlight2"], L9["color"], "#ffffff"], + [DEV["backlight3"], L9["color"], "#ffffff"], + [DEV["backlight4"], L9["color"], "#ffffff"], + [DEV["backlight5"], L9["color"], "#ffffff"], + [DEV["down2"], L9["color"], "#ffffff"], + [DEV["down3"], L9["color"], "#ffffff"], + [DEV["down4"], L9["color"], "#ffffff"], + [DEV["houseSide"], L9["level"], .8], + [DEV["backlight5"], L9["uv"], 0.011]]) + def ontime(dt, i=i): + times[i] = dt + d.addCallback(ontime) + reactor.callLater(offset, send, i) + offset += .002 + + def done(): + print "loadtest done" + with open('/tmp/times', 'w') as f: + f.write(''.join('%s\n' % t for t in times)) + reactor.stop() + reactor.callLater(offset+.5, done) + reactor.run() + +if __name__ == '__main__': + loadTest()