implement wsperfmaster mode

This commit is contained in:
Tobias Oberstein 2012-03-13 01:18:45 +01:00
parent aec0caf9b9
commit cbe7a8c333
3 changed files with 39 additions and 60 deletions

View File

@ -21,3 +21,4 @@ import wstest
import echo import echo
import testee import testee
import wsperfcontrol import wsperfcontrol
import wsperfmaster

View File

@ -19,32 +19,20 @@
import sys, json, pprint import sys, json, pprint
from twisted.python import log from twisted.python import log
from twisted.internet import reactor
from twisted.web.server import Site
from twisted.web.static import File
from autobahn.websocket import WebSocketServerFactory, \
WebSocketServerProtocol, \
listenWS
from autobahn.wamp import exportRpc, \
WampServerFactory, \
WampServerProtocol
from autobahn.util import newid, utcnow from autobahn.util import newid, utcnow
from autobahn.websocket import HttpException
from autobahn.httpstatus import HTTP_STATUS_CODE_BAD_REQUEST from autobahn.httpstatus import HTTP_STATUS_CODE_BAD_REQUEST
from autobahn.websocket import HttpException
from autobahn.websocket import WebSocketServerFactory, WebSocketServerProtocol
from autobahn.wamp import WampServerFactory, WampServerProtocol, exportRpc
URI_RPC = "http://wsperf.org/api#" URI_RPC = "http://wsperf.org/api#"
URI_EVENT = "http://wsperf.org/event#" URI_EVENT = "http://wsperf.org/event#"
# https://github.com/zaphoyd/websocketpp/wiki/wsperf class WsPerfMasterProtocol(WebSocketServerProtocol):
# wsperf -c -u ws://localhost:9090 --ident=%COMPUTERNAME% --num_threads=0 --reconnect=1
class WsPerfProtocol(WebSocketServerProtocol):
WSPERF_PROTOCOL_ERROR = 3000 WSPERF_PROTOCOL_ERROR = 3000
WSPERF_CMD = """message_test:uri=%(uri)s;token=%(token)s;size=%(size)d;count=%(count)d;quantile_count=%(quantile_count)d;timeout=%(timeout)d;binary=%(binary)s;sync=%(sync)s;rtts=%(rtts)s;correctness=%(correctness)s;""" WSPERF_CMD = """message_test:uri=%(uri)s;token=%(token)s;size=%(size)d;count=%(count)d;quantile_count=%(quantile_count)d;timeout=%(timeout)d;binary=%(binary)s;sync=%(sync)s;rtts=%(rtts)s;correctness=%(correctness)s;"""
@ -141,9 +129,9 @@ class WsPerfProtocol(WebSocketServerProtocol):
self.protocolError("unexpected binary message") self.protocolError("unexpected binary message")
class WsPerfFactory(WebSocketServerFactory): class WsPerfMasterFactory(WebSocketServerFactory):
protocol = WsPerfProtocol protocol = WsPerfMasterProtocol
def startFactory(self): def startFactory(self):
self.slavesToProtos = {} self.slavesToProtos = {}
@ -212,7 +200,7 @@ class WsPerfFactory(WebSocketServerFactory):
#del self.runs[runId] #del self.runs[runId]
class WsPerfUiProtocol(WampServerProtocol): class WsPerfMasterUiProtocol(WampServerProtocol):
@exportRpc @exportRpc
def runCase(self, caseDef): def runCase(self, caseDef):
@ -227,9 +215,9 @@ class WsPerfUiProtocol(WampServerProtocol):
self.registerForPubSub(URI_EVENT, True) self.registerForPubSub(URI_EVENT, True)
class WsPerfUiFactory(WampServerFactory): class WsPerfMasterUiFactory(WampServerFactory):
protocol = WsPerfUiProtocol protocol = WsPerfMasterUiProtocol
def slaveConnected(self, id, host, port, version, num_workers, ident): def slaveConnected(self, id, host, port, version, num_workers, ident):
self._dispatchEvent(URI_EVENT + "slaveConnected", {'id': id, self._dispatchEvent(URI_EVENT + "slaveConnected", {'id': id,
@ -254,38 +242,3 @@ class WsPerfUiFactory(WampServerFactory):
'workerId': workerId, 'workerId': workerId,
'result': result} 'result': result}
self._dispatchEvent(URI_EVENT + "caseResult", event) self._dispatchEvent(URI_EVENT + "caseResult", event)
if __name__ == '__main__':
log.startLogging(sys.stdout)
## WAMP Server for wsperf slaves
##
wsperf = WsPerfFactory("ws://localhost:9090")
wsperf.debug = False
wsperf.debugWsPerf = False
listenWS(wsperf)
## Web Server for UI static files
##
webdir = File("static")
web = Site(webdir)
reactor.listenTCP(8080, web)
## WAMP Server for UI
##
wsperfUi = WsPerfUiFactory("ws://localhost:9091")
wsperfUi.debug = False
wsperfUi.debugWamp = False
listenWS(wsperfUi)
## Connect servers
##
wsperf.uiFactory = wsperfUi
wsperfUi.slaveFactory = wsperf
## Run everything ..
##
reactor.run()

View File

@ -29,6 +29,7 @@ from autobahn.fuzzing import FuzzingClientFactory, FuzzingServerFactory
from echo import EchoClientFactory, EchoServerFactory from echo import EchoClientFactory, EchoServerFactory
from testee import TesteeClientFactory, TesteeServerFactory from testee import TesteeClientFactory, TesteeServerFactory
from wsperfcontrol import WsPerfControlFactory from wsperfcontrol import WsPerfControlFactory
from wsperfmaster import WsPerfMasterFactory, WsPerfMasterUiFactory
class WsTestOptions(usage.Options): class WsTestOptions(usage.Options):
@ -36,15 +37,12 @@ class WsTestOptions(usage.Options):
'echoclient', 'echoclient',
'broadcastclient', 'broadcastclient',
'broadcastserver', 'broadcastserver',
'fuzzingserver', 'fuzzingserver',
'fuzzingclient', 'fuzzingclient',
'testeeserver', 'testeeserver',
'testeeclient', 'testeeclient',
'wsperfcontrol', 'wsperfcontrol',
'wsperfmaster', 'wsperfmaster',
'wampserver', 'wampserver',
'wampclient'] 'wampclient']
@ -201,6 +199,33 @@ def run():
connectWS(factory, createWssContext(o, factory)) connectWS(factory, createWssContext(o, factory))
elif mode == 'wsperfmaster':
## WAMP Server for wsperf slaves
##
wsperf = WsPerfMasterFactory("ws://localhost:9090")
wsperf.debug = False
wsperf.debugWsPerf = False
listenWS(wsperf)
## Web Server for UI static files
##
webdir = File(pkg_resources.resource_filename("wstest", "web/wsperfmaster"))
web = Site(webdir)
reactor.listenTCP(8080, web)
## WAMP Server for UI
##
wsperfUi = WsPerfMasterUiFactory("ws://localhost:9091")
wsperfUi.debug = False
wsperfUi.debugWamp = False
listenWS(wsperfUi)
## Connect servers
##
wsperf.uiFactory = wsperfUi
wsperfUi.slaveFactory = wsperf
else: else:
raise Exception("not yet implemented") raise Exception("not yet implemented")