def callback(self, ch, method, properties, body): global binding_keys, queueName, credentials, UNIT_ID ch.basic_ack(delivery_tag=method.delivery_tag) result = None try: logging.debug("Received " + str(body)) message = pickle.loads(body) if not message.type == MessageType.Test: raise ValueError("Received message type " + str(message.type) + " instead of MessageType.Test=" + str(MessageType.Test)) test = message.content result = TestResult(systemID=SYSTEM_NAME, username=USERNAME, testID=test.name, executionID=test.executionID, executorUnit=test.executorUnit, targetUnit=test.targetUnit) testName = test.name logging.debug("META " + str(test.meta)) logging.debug("TEST " + str(test.test)) logging.debug("Delivery ACK. Defining test") exec("def " + testName + "(): \n" + test.test) possibles = globals().copy() possibles.update(locals()) method = possibles.get(testName) method_result = method() result.successful = method_result.successful result.details = method_result.details result.meta = method_result.meta except Exception as e: logging.debug(e) if not result: result = TestResult(testID="GeneralFailure", executionID="0", executorUnit=None) result.meta["type"] = "Test Invocation Failure" result.successfull = False result.details = str(e) result.meta["origin.uuid"] = UNIT_UUID result.meta["origin.id"] = UNIT_ID message = Message(type=MessageType.TestResult, content=result) self.sendMessage(HEALTH_CENTRAL_QUEUE_IP, SYSTEM_NAME, UNIT_ID, SYSTEM_NAME + "." + UNIT_UUID + ".results", credentials, UNIT_UUID + "-Results", pickle.dumps(message))
def exit_handler(self, HEALTH_CENTRAL_QUEUE_IP, SYSTEM_NAME, credentials, queueName, unitDetails): logging.debug("Shutting down...") iAmDeadMesssage = Message(type=MessageType.UnitInstanceInformation, content=unitDetails) stringMessage = pickle.dumps(iAmDeadMesssage) # send I am dead message self.sendMessage(HEALTH_CENTRAL_QUEUE_IP, SYSTEM_NAME, SYSTEM_NAME,SYSTEM_NAME+ ".lifecycle.dead", credentials, "dead", stringMessage) # delete tests and results queues connection = pika.BlockingConnection( pika.ConnectionParameters(HEALTH_CENTRAL_QUEUE_IP, virtual_host=SYSTEM_NAME, credentials=credentials)) channel = connection.channel() logging.debug("Deleting used queue " + queueName) channel.queue_delete(queue=queueName + "-Results") channel.queue_delete(queue=queueName + "-Tests") logging.debug("Deleted queue " + queueName) connection.close()
args = sys.argv logging.basicConfig(filename="./executor_" + UNIT_UUID + ".log", level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s') logging.info("Started test executor for " + UNIT_UUID) #remove pika chatter logging.getLogger('pika').setLevel(logging.WARNING) queueName = str(UNIT_UUID) + "-Tests" binding_keys = [SYSTEM_NAME + "." + UNIT_UUID + ".tests"] credentials = pika.PlainCredentials(USERNAME, PASSWORD) #start logging performance p = SimplePerformanceLogger("./performance_" + UNIT_UUID + ".csv") p.logPerformance(5) # send I am alive message unitDetails = UnitInstanceInfo(id=UNIT_ID, uuid=UNIT_UUID, type=UNIT_TYPE, system=SYSTEM_NAME, username=USERNAME, password=PASSWORD) iAmAliveMesssage = Message(type=MessageType.UnitInstanceInformation, content=unitDetails) stringMessage = pickle.dumps(iAmAliveMesssage) logging.debug("Sending I am alive message " + stringMessage) executor = TestExecutor(HEALTH_CENTRAL_QUEUE_IP, SYSTEM_NAME, UNIT_ID, binding_keys, credentials, queueName, unitDetails) executor.sendMessage(HEALTH_CENTRAL_QUEUE_IP, SYSTEM_NAME, SYSTEM_NAME, SYSTEM_NAME+ ".lifecycle.alive", credentials, "alive", stringMessage) # listen to messages # listen to messages signal.signal(signal.SIGTERM, executor.exit_sig_handler) #service stop signal.signal(signal.SIGINT, executor.exit_sig_handler) # ctr-c executor.listenToMessages(HEALTH_CENTRAL_QUEUE_IP, SYSTEM_NAME, UNIT_ID, binding_keys, credentials, queueName)