Beispiel #1
0
        def save_token_request(signed_blind_token):

            print("[RequestHandler - request_sign_blind_token - save_token_request] Saving the register token request of \n    "
                  "user_id='%s' for ballot_id='%s' with signed_blind_ballot='%s...'" % (user_id, ballot_id, str(signed_blind_token)[0:20]) )

            # We should save our processed request.
            hash = SHA256.new()
            hash.update(str(blind_token).encode())
            blind_token_hash = hash.hexdigest()

            defer = databasequery.insert_into_register_token_blind_token_hash_user_id_ballot_id(blind_token_hash, user_id, ballot_id)

            # Cool, saving worked. Return singed token to user.

            def return_result(ignored):
                print("[RequestHandler - request_sign_blind_token - returnResult] Computation completed, returning signed token to the client. ")

                # Pickle the signed token to return over the wire
                encoded_signed_blind_token = pickle.dumps(signed_blind_token)

                return { 'ok' : encoded_signed_blind_token }

            def return_result_errback(failure):
                print("[RequestHandler - request_sign_blind_token - return_result_errback] There was an error saving the token.")
                raise failure.raiseException()

            defer.addCallback(return_result).addErrback(return_result_errback)

            return defer
Beispiel #2
0
 def queryCallback(l):
     p = string.join([ 
                       ], "<br>")
     request.write( "<html>")
     request.write(title_string)
     request.write("Patients:<p>")
     request.write("<ul>")
     print l
     for (pid,pname,did) in l:
         request.write('<li>PID: %(rpid)s Name: %(pname)s'
                       % { 'rpid': renderPatientID(pid), 'pname': pname })
         if did:
             request.write(' Device: %s' % renderDeviceID(did))
     request.write("</ul>")
     request.write("""<form method="post" action="/patients/newdevice">
                   </form>
     """)
     if 1:
         request.write('</html>')
         request.finish()
     else:
         query = ("select deviceid from patient, patientdevice where patient.patientid='%s' and patientdevice.patientid = patient.patientid" % self.patientid)
         print query
         defer = dbpool.runQuery(query)
         defer.addCallback(queryDevicesCallback)
Beispiel #3
0
 def runQueryPatientRequest(self):
     deviceid = self.headers['did']
     (ipaddr, udpport) = self.addr
     if self.headers.has_key('dtype'):
         dtype = self.headers['dtype']
     else:
         dtype = '<unknown>'
     def updateDevice():
         query = "replace into device (deviceid, dtype, ipaddr) values ('%s', '%s', '%s')" % (deviceid, dtype, ipaddr)
         if verbose: print 'updateDevice: ', query
         defer = dbpool.runQuery(query)
         defer.addCallback(self.nullCallback)
     def queryCallback(l):
         if (len(l) > 0):
             (pid, name) = l[0]
             response = '200 OK\r\n' + 'PID: ' + pid + '\r\nName: ' + name + '\r\n'
             if verbose: print 'queryCallback response=', response
             port.write(response, self.addr)
         updateDevice()
         return
     query = ("select patient.patientid, name from patient, patientdevice where patientdevice.deviceid='%s' and patientdevice.patientid = patient.patientid"
              % (deviceid, ))
     if verbose: print query
     defer = dbpool.runQuery(query)
     defer.addCallback(queryCallback)
Beispiel #4
0
    def test_writeSequence(self):
        """
        Write a sequence of L{bytes} to a L{DatagramProtocol}.
        """
        class SimpleDatagramProtocol(DatagramProtocol):
            def __init__(self):
                self.defer = Deferred()

            def datagramReceived(self, data, addr):
                self.defer.callback(data)

        reactor = self.buildReactor()
        protocol = SimpleDatagramProtocol()
        defer = protocol.defer
        port = self.getListeningPort(reactor, protocol)
        address = port.getHost()
        dataToWrite = (b"some", b"bytes", b"to", b"write")

        def gotData(data):
            self.assertEqual(b"".join(dataToWrite), data)

        defer.addCallback(gotData)
        defer.addErrback(err)
        defer.addCallback(lambda ignored: reactor.stop())
        port.writeSequence(dataToWrite, ("127.0.0.1", address.port))
        self.runReactor(reactor)
Beispiel #5
0
	def checkCPU( self ):
		if ( self.state == 0 or self.p_transport is None or self.p_transport.pid is None ):
			print 'checkCPU: no child process atm'
			return
		defer = utils.getProcessOutput( '/bin/bash', [ '-c', 'cat /proc/%d/status | grep SleepAVG' % self.p_transport.pid ] )
		defer.addCallback( self.sleepAVGReply )
		defer.setTimeout( 2, self.sleepAVGTimeout )		
Beispiel #6
0
 def service_handle_request(self):
     # get the accessor object for this service
     ac = provenance_accessor.ProvenanceAccessor()
     # call autosuggest method of accessor - this returns a tuple: a defered and a string!
     defer = ac.get_provenanceInfo()
     # add callback to do the output when finishing
     defer.addCallback(self.output_callback)
Beispiel #7
0
	def service_handle_request(self):
		# get the accessor object for this service
		ac = provenance_accessor.ProvenanceAccessor()
		# call autosuggest method of accessor - this returns a tuple: a defered and a string!
		defer = ac.get_provenanceInfo()
		# add callback to do the output when finishing
		defer.addCallback(self.output_callback)
Beispiel #8
0
	def next(self):
		# if we have something in the queue, and an available reducer, take care of it
		if len(self.queue)>0 and self.count < self.pool_size:
			url, success, err, headers = self.queue.pop(0)

			def succeed(*args, **kwargs):
				log.debug("ClientQueue: success, queue size %d, reqs out %d" % (len(self.queue), self.count))
				self.count -= 1
				try:
					success(*args, **kwargs)
				except Exception, e:
					log.err("Exception '%s' in ClientQueue callback; moving on" % str(e))
				self.next()

			def fail(*args, **kwargs):
				log.debug("ClientQueue: failure, queue size %d, reqs out %d" % (len(self.queue), self.count))
				self.count -= 1
				try:
					err(*args, **kwargs)
				except:
					log.err("Exception in ClientQueue errback; moving on")
				self.next()

			self.count += 1
			defer = getPageWithHeaders(url, headers=headers).deferred
			defer.addCallback(succeed)
			defer.addErrback(fail)
    def test_writeSequence(self):
        """
        Write a sequence of L{bytes} to a L{DatagramProtocol}.
        """

        class SimpleDatagramProtocol(DatagramProtocol):
            def __init__(self):
                self.defer = Deferred()

            def datagramReceived(self, data, addr):
                self.defer.callback(data)

        reactor = self.buildReactor()
        protocol = SimpleDatagramProtocol()
        defer = protocol.defer
        port = self.getListeningPort(reactor, protocol)
        address = port.getHost()
        dataToWrite = (b"some", b"bytes", b"to", b"write")

        def gotData(data):
            self.assertEqual(b"".join(dataToWrite), data)

        defer.addCallback(gotData)
        defer.addErrback(err)
        defer.addCallback(lambda ignored: reactor.stop())
        port.writeSequence(dataToWrite, ("127.0.0.1", address.port))
        self.runReactor(reactor)
Beispiel #10
0
 def runRegisterDeviceRequest(self):
     deviceid = self.headers['did']
     ipaddr = self.headers['ip']
     dtype = self.headers['type']
     expires = self.headers['expires']
     query = ("replace into device (deviceid, ipaddr, dtype, expires) values ('%s', '%s', '%s', date_add(NOW(), interval %d second))"
              % (deviceid, ipaddr, dtype, expires))
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(self.dbCallback)
Beispiel #11
0
 def servicesCallback(l):
     request.write('<a href="/services"><h2>Services</h2></a><p>')
     request.write('<ul>')
     for (did, sname, stype, ipaddr, port) in l:
         request.write('<li> %s on %s (%s:%s:%s)' % (renderSType(sname), renderDeviceID(did), stype, ipaddr, port))
     request.write('</ul>')
     query = "select patient.name, patient.patientid, patientdevice.deviceid, dtype from patient left join patientdevice on patientdevice.patientid = patient.patientid left join device on patientdevice.deviceid = device.deviceid"
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(patientsCallback)
Beispiel #12
0
 def runRegisterServiceRequest(self):
     print 'runRegisterServiceRequest'
     deviceid = self.headers['did']
     sname = self.headers['svn']
     stype = self.headers['svt']
     port = self.headers['svp']
     query = ("replace into service (sname, stype, deviceid, port, expires) values ('%s', '%s', '%s', '%s', date_add(NOW(), interval %d second))"
              % (sname, stype, deviceid, port, 3600))
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(self.dbCallback)
Beispiel #13
0
    def update_last_user_level(self, user_id, request):
        """内部接口:更新战力排行榜中第50名用户的等级"""
        timer = Timer(user_id)

        req = mission_pb2.UpdateLastUserLevelReq()
        req.ParseFromString(request)

        defer = mission_business.update_last_user_level()
        defer.addCallback(self._update_last_user_level_succeed, req, timer)
        defer.addErrback(self._update_last_user_level_failed, req, timer)
        return defer
Beispiel #14
0
 def checkCPU(self):
     if (self.state == 0 or self.p_transport is None
             or self.p_transport.pid is None):
         print 'checkCPU: no child process atm'
         return
     defer = utils.getProcessOutput('/bin/bash', [
         '-c',
         'cat /proc/%d/status | grep SleepAVG' % self.p_transport.pid
     ])
     defer.addCallback(self.sleepAVGReply)
     defer.setTimeout(2, self.sleepAVGTimeout)
Beispiel #15
0
    def add(self, ip, port, checks=None):
        defer = self.request(method='add',
                             data={
                                 'proxy': '{}:{}'.format(ip, port),
                             })
        if checks:
            defer.addCallback(
                lambda x: self.add_proxy_check_callback(x, checks))
        yield defer

        return True
Beispiel #16
0
    def finish_mission(self, user_id, request):
        timer = Timer(user_id)

        req = mission_pb2.FinishMissionReq()
        req.ParseFromString(request)

        defer = DataBase().get_data(user_id)
        defer.addCallback(self._calc_finish_mission, req, timer)
        defer.addCallback(self._finish_mission_succeed, req, timer)
        defer.addErrback(self._finish_mission_failed, req, timer)

        return defer
Beispiel #17
0
    def requestAvatarId(self, credentials):
        publickey = base64.b64encode(credentials.blob)
        print publickey
        # SQL Injection ...
        defer = self.dbpool.runQuery(
            "SELECT account FROM publickeys WHERE publickey = '%s'" %
            publickey)
        defer.addCallback(self._cbRequestAvatarId, credentials)
        defer.addErrback(self._ebRequestAvatarId)

        # return "sqale" とか変えすと認証無条件で通る
        return defer
Beispiel #18
0
 def render_POST(self, request):
     pname = request.args['pname'][0]
     pid = request.args['pid'][0]
     print 'args=', request.args
     print 'request.received_headers', request.received_headers
     def nprPostCallback(l):
         request.write('<html>Patient <a href="/patients/%s">%s</a> added.</html>' % (pid, pname))
         request.finish()
     query = "insert into patient (patientid, name) values ('%s', '%s')" % (pid, pname)
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(nprPostCallback)
     return server.NOT_DONE_YET
Beispiel #19
0
 def perspective_getSubmissions(self):
     """Return all submissions by user"""
     def _cbGotSubmissions(submissions):
         subs_full = [] # List of (timestamp, problem_no, result)
         for problem_subs in submissions:
             if problem_subs:
                 for prob, lang, ts, result in problem_subs:
                     subs_full.append((ts, prob, lang, result))
         subs_full.sort()
         return subs_full
     defer = self.profile.getSubmissions(self.id)
     defer.addCallback(_cbGotSubmissions)
     return defer
Beispiel #20
0
    def addUpdateListCallbacks(self, success=None, failure=None, both=False):
        if 'updateList' in self.defers:
            defer = self.defers['updateList']

            if not both:
                if isinstance(success, types.FunctionType):
                    defer.addCallback(success)

                if isinstance(failure, types.FunctionType):
                    defer.addErrback(failure)

            else:
                if isinstance(success, types.FunctionType):
                    defer.addBoth(success)
Beispiel #21
0
 def devicesCallback(l):
     request.write('<html>')
     request.write('<head><META HTTP-EQUIV=Refresh CONTENT=\"10; URL=/\">')
     request.write('<body>')
     request.write(title_string)
     request.write('<a href="/devices"><h2>Devices</h2></a><p></html>')
     request.write('<ul>')
     for (did, dtype, ipaddr) in l:
         request.write('<li> %s: (%s) at %s' % (renderDeviceID(did), dtype, ipaddr))
     request.write('</ul>')
     query = ("select device.deviceid, sname, stype, ipaddr, port from service, device where service.deviceid = device.deviceid")
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(servicesCallback)
Beispiel #22
0
 def render_GET(self, request):
     def queryCallback(l):
         request.write("<html>")
         request.write(title_string)
         request.write("Service %s<br>\r\n" % self.sname)
         for (sname, stype, deviceid, ipaddr, port, status) in l:
             request.write('Service %s on device %s (%s:%s:%s) status is %s<br>\r\n'
                           % (sname, deviceid, stype, ipaddr, port, status) )
         request.write("</html>")
         request.finish()
     query = ("select sname, stype, service.deviceid, ipaddr, port, status from service, device where service.deviceid = device.deviceid and sname='%s'" % self.sname)
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(queryCallback)
     return server.NOT_DONE_YET
Beispiel #23
0
 def render_GET(self, request):
     def queryCallback(l):
         p = string.join([ 'PID: ' + renderPatientID(pid) + ' Name: ' + name for (pid, name) in l], "<br>")
         request.write( "<html>")
         request.write(title_string)
         request.write("Patients:<br>")
         request.write(p)
         request.write('<p><a href="/patients/add">Add patient</a>')
         request.write("</html>")
         request.finish()
     query = ("select patientid, name from patient")
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(queryCallback)
     return server.NOT_DONE_YET
Beispiel #24
0
 def render_GET(self, request):
     def queryCallback(l):
         print l
         request.write("<html>")
         request.write(title_string)
         request.write("Device %s<br>" % (self.name))
         p = string.join([ 'DID: %s Type: %s Address: %s <br>' % (renderDeviceID(did), dtype, ipaddr)
                           for (did, dtype, ipaddr) in l], "\r\n")
         request.write(p)
         request.write('</html>\r\n')
         request.finish()
     query = ("select deviceid, dtype, ipaddr from device where deviceid='%s'" % self.name)
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(queryCallback)
     return server.NOT_DONE_YET
Beispiel #25
0
 def runQueryServiceRequest(self):
     result_columns = ('sname', 'stype', 'ipaddr', 'port', 'service.status')
     result_headers = ('SVN', 'SVT', 'IP', 'Port', 'Status')
     def queryServiceCallback(l):
         for res in l:
             response = string.join([ '%s: %s\r\n' % (hn, cv) for (hn, cv) in zip(result_headers, res) ], '')
             print 'queryServiceCallback response=', response
             port.write('200 OK\r\n' + response, self.addr)
         return
     query = 'select %s from service, device where service.deviceid=device.deviceid ' % string.join(result_columns, ',')
     for (hn, cn) in (('svn', 'sname'), ('svt', 'stype'), ('did', 'deviceid'), ('pid', 'patientid')):
         if self.headers.has_key(hn) and self.headers[hn] != '*':
             query = query + ('and %s = "%s" ' % (cn, self.headers[hn]))
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(queryServiceCallback)
Beispiel #26
0
 def render_GET(self, request):
     def queryCallback(l):
         print l
         request.write("<html><head><META HTTP-EQUIV=Refresh CONTENT=\"10; URL=/devices/\"></head>")
         request.write(title_string)
         request.write("<body>Devices:<br>")
         for (did, dtype, ipaddr) in l:
             request.write( 'DID: <a %(rdid)s Type: %(dtype)s Address: %(ipaddr)s <br>'
                            % { 'rdid': renderDeviceID(did), 'dtype': dtype, 'ipaddr': ipaddr} )
         request.write('\r\n</html>\r\n')
         request.finish()
     query = ("select deviceid, dtype, ipaddr from device")
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(queryCallback)
     return server.NOT_DONE_YET
Beispiel #27
0
	def service_handle_request(self):
		""" entrypoint for GET requests to native autosuggest api """
		
		# init an instance of input parser to extract GET input data
		ip = ioparseformat.InputParser()
		
		# extract get info
		idict = ip.parseUnstructuredGetData(self.request)	# 
		urid = idict.get('id')
		ranked = idict.get('ranked')
		checked = idict.get('checked')
		# get the accessor object for this service
		ac = registry_accessor.RegistryAccessor()
		# call autosuggest method of accessor - this returns a tuple: a defered and a string!
		defer = ac.get_presentationInfo(urid=urid,ranked=ranked,checked=checked)
		# add callback to do the output when finishing
		defer.addCallback(self.output_callback)
Beispiel #28
0
    def runRegisterServiceAttributesRequest(self):
        deviceid = self.headers['did']
        sname = self.headers['svn']
        port = self.headers['svp']
        stype = self.headers['svt']
        status = self.headers['status']
        expires = self.headers['expires']

        begin_query = 'update service set '
        end_query = " where deviceid='%s' and port=%d'" % (deviceid, port)
        updates = []
        for k, v in [('sname', sname), ('stype', stype), ('status', status)]:
            if v:
                updates.append( "%s='%s'" % (k, v))
        query = begin_query + string.join(updates, ', ') + end_query
        print query
        defer = dbpool.runQuery(query)
        defer.addCallback(self.dbCallback)
Beispiel #29
0
 def render_GET(self, request):
     def queryCallback(l):
         request.write("<html>")
         request.write(title_string)
         request.write("Services:<br>")
         for (sname, stype, deviceid, ipaddr, port, status) in l:
             dict = { 'sname': sname, 'deviceid': deviceid, 'stype': stype,
                      'ipaddr': ipaddr, 'port': port, 'status': status }
             request.write('Service <a href="/services/%(sname)s">%(sname)s</a>' % dict)
             request.write('\t on device <a href="/devices/%(deviceid)s" (%(stype)s:%(ipaddr)s:%(port)s)' % dict)
             request.write(' status is %(status)s<br>\r\n' % dict)
         request.write("</html>")
         request.finish()
     query = ("select sname, stype, service.deviceid, ipaddr, port, status from service, device where service.deviceid = device.deviceid")
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(queryCallback)
     return server.NOT_DONE_YET
Beispiel #30
0
	def service_handle_request(self):
		""" entrypoint for GET requests to native autosuggest api """
		
		# init an instance of input parser to extract GET input data
		ip = ioparseformat.InputParser()
		
		# extract get info
		idict = ip.parseUnstructuredGetData(self.request)	# this returns a flat dict of key-value pairs
		term = idict.get('term')	# this will return None if no such key
		maxitems = idict.get('maxitems')	# NOTE: accessor is not requested to honor the maxitems option!
		ranked = idict.get('ranked')	#if true, then results should be ranked according to their backlinks. 
		checked = idict.get('checked')	# get the node filter
		# get the accessor object for this service
		ac = dbpedia_accessor.DbpediaAccessor()
		# call autosuggest method of accessor - this returns a tuple: a defered and a string!
		defer = ac.get_suggestions(term=term,maxitems=maxitems,ranked=ranked,checked=checked)
		# add callback to do the output when finishing
		defer.addCallback(self.output_callback)
Beispiel #31
0
    def render_GET(self, request):
        def patientsCallback(l):
            request.write('<a href="/patients"><h2>Patients</h2></a><p></html>')
            request.write('<ul>')
            for (name, pid, did, dtype) in l:
                request.write('<li> %s: %s' % (renderPatientID(pid), name))
                if did:
                    request.write(' on %s device %s' % (dtype, renderDeviceID(did)))
            request.write('</ul>')
            request.write('</body>')
            request.write('</html>')
            request.finish()

        def servicesCallback(l):
            request.write('<a href="/services"><h2>Services</h2></a><p>')
            request.write('<ul>')
            for (did, sname, stype, ipaddr, port) in l:
                request.write('<li> %s on %s (%s:%s:%s)' % (renderSType(sname), renderDeviceID(did), stype, ipaddr, port))
            request.write('</ul>')
            query = "select patient.name, patient.patientid, patientdevice.deviceid, dtype from patient left join patientdevice on patientdevice.patientid = patient.patientid left join device on patientdevice.deviceid = device.deviceid"
            print query
            defer = dbpool.runQuery(query)
            defer.addCallback(patientsCallback)

        def devicesCallback(l):
            request.write('<html>')
            request.write('<head><META HTTP-EQUIV=Refresh CONTENT=\"10; URL=/\">')
            request.write('<body>')
            request.write(title_string)
            request.write('<a href="/devices"><h2>Devices</h2></a><p></html>')
            request.write('<ul>')
            for (did, dtype, ipaddr) in l:
                request.write('<li> %s: (%s) at %s' % (renderDeviceID(did), dtype, ipaddr))
            request.write('</ul>')
            query = ("select device.deviceid, sname, stype, ipaddr, port from service, device where service.deviceid = device.deviceid")
            print query
            defer = dbpool.runQuery(query)
            defer.addCallback(servicesCallback)

        query = ("select deviceid, dtype, ipaddr from device")
        print query
        defer = dbpool.runQuery(query)
        defer.addCallback(devicesCallback)
        return server.NOT_DONE_YET
Beispiel #32
0
    def service_handle_request(self):
        """ entrypoint for GET requests to native autosuggest api """

        # init an instance of input parser to extract GET input data
        ip = ioparseformat.InputParser()

        # extract get info
        idict = ip.parseUnstructuredGetData(self.request)  #
        urid = idict.get('id')
        ranked = idict.get('ranked')
        checked = idict.get('checked')
        # get the accessor object for this service
        ac = registry_accessor.RegistryAccessor()
        # call autosuggest method of accessor - this returns a tuple: a defered and a string!
        defer = ac.get_presentationInfo(urid=urid,
                                        ranked=ranked,
                                        checked=checked)
        # add callback to do the output when finishing
        defer.addCallback(self.output_callback)
Beispiel #33
0
 def render_GET(self, request):
     def nprCallback(l):
         print 'nprCallback', l
         request.write("<html>")
         request.write(title_string)
         request.write("""<h1>New Patient</h1>
                       <form method="post" action="/patients/add">
                       <table>
                       <tr><td>Patient Name<td><input type="text" name="pname"></input></tr>
                       <tr><td>Patient ID<td><input type="text" name="pid"></input></tr>
                       </table>
                       <input type="submit" name="Add">
                       </form>
                       """)
         request.finish()
     query = 'select deviceid from device'
     print query
     defer = dbpool.runQuery(query)
     defer.addCallback(nprCallback)
     return server.NOT_DONE_YET
def main():
    # Blackboard
    bb = btree.BlackBoard()
    
    # Start benchmark ###################################
    start = btree.Sequence(bb)
    start.add(ConnectRelay())
    
    if START_BT: start.add(AllocateDomains())
    
    start.add(ConfigureGlassfish())
    
    pl = btree.ParallelNode()
    start.add(pl)
    pl.add(StartGlassfish())
    if INIT_DB: pl.add(StartDatabase())
    
    start.add(StartRain())
    start.add(ConnectRain())
    start.add(TriggerRain())
    start.add(startController())
    
    # Stop benchmark ####################################
    stop = btree.Sequence(bb)
    stop.add(ConnectRelay())
    stop.add(StopGlassfishRain())
    
    # Execute Behavior Trees ############################
    if START_BT:
        print 'Running start bt'
        defer = start.execute()
    else:
        print 'Running stop bt'
        defer = stop.execute()
        
    # Finished callback to clean up          
    defer.addCallback(finished)
    
    # Start the Twisted reactor
    reactor.run()
Beispiel #35
0
 def sentIcqMessage(self, user, message):
     defer = self.sendMessage(user, message=message, wantAck=1, offline=1)
     defer.addCallback(self.onMessageSent)
     return defer
Beispiel #36
0
 def updateDevice():
     query = "replace into device (deviceid, dtype, ipaddr) values ('%s', '%s', '%s')" % (deviceid, dtype, ipaddr)
     if verbose: print 'updateDevice: ', query
     defer = dbpool.runQuery(query)
     defer.addCallback(self.nullCallback)
def main():
    logger.log(sonarlog.SYNC, 'starting BTree')
    
    # Blackboard with hosts manager
    bb = btree.BlackBoard()
    bb.hosts = hosts.RelayHosts()
    
    # Use the domain setup type configuration in the domains module to fill hosts
    for entry in conf_domains.initial_domains_setup_types:
        bb.hosts.add_host(*entry)
    
    # Add load drivers to hosts
    bb.hosts.add_host('load0', 'load')
    bb.hosts.add_host('load1', 'load')
    
    # Start benchmark ###################################
    start = btree.Sequence(bb)
    
    # Log sync marker
    start.add(behaviors.SyncMarker('start of startup sequence'))
    
    # Stop everything
    start.add(behaviors.ShutdownAllDomains())
    
    # Add bheaviors to start and initialize the domains
    start.add(behaviors.AllocateDomains(controller))
    
    # Connect with all relay services
    start.add(behaviors.ConnectRelay())
    
    # Configure glassfish
    start.add(behaviors.ConfigureGlassfish())
    
    # Start Glassfish and Database
    pl = btree.ParallelNode(bb)
    pl.add(behaviors.StartGlassfish())
    pl.add(behaviors.StartDatabase())
    start.add(pl)
    
    # Start Rain and connect with its control service
    start.add(behaviors.StartRain())
    start.add(behaviors.ConnectRain())
    
    # Start controller
    start.add(behaviors.StartController(controller))
    
    # Trigger load generation in Rain
    start.add(behaviors.TriggerRain())
    
    # Stop benchmark ####################################
    stop = btree.Sequence(bb)
    stop.add(behaviors.ConnectRelay())
    stop.add(behaviors.StopGlassfishRain())
    
    # Execute Behavior Trees ############################
    if START_BT:
        print 'Running start BTree'
        defer = start.execute()
    else:
        print 'Running stop BTree'
        defer = stop.execute()
        
    # Finished callback to clean up          
    defer.addCallback(finished)

    # Start the Twisted reactor
    reactor.run()