def _start_(self): try: with yombo.utils.fopen("automation.txt", "r") as fp_: temp_rules = hjson.loads(fp_.read()) self._rulesRaw = msgpack.loads(msgpack.dumps(temp_rules)) # remove ordered dict. # print "hjosn: %s" % hjson.loads(self._rulesRaw) logger.debug("automation.txt rules RAW: {rules}", rules=self._rulesRaw) except Exception, e: logger.warn("Simple automation is unable to parse 'automation.txt' file: %s." % e) self._rulesRaw = {}
def generate_message(self, exchange_name, source, destination, header_type, headers, body, callback=None): """ When interacting with Yombo AMQP servers, we use a standard messaging layout. The below helps other functions and libraries conform to this standard. This only creates the message, it doesn't send it. Use the publish() function to complete that. **Usage**: .. code-block:: python requestData = { "exchange_name" : "gw_config", "source" : "yombo.gateway.lib.configurationupdate", "destination" : "yombo.server.configs", "callback" : self.amqp_direct_incoming, "body" : { "DataType" : "Object", "Request" : requestContent, }, } request = self.AMQPYombo.generateRequest(**requestData) :param exchange_name: The exchange the request should go to. :type exchange_name: str :param source: Value for the 'source' field. :type source: str :param destination: Value of the 'destination' field. :type destination: str :param callback: A pointer to the function to return results to. This function will receive 4 arguments: sendInfo (Dict) - Various details of the sent packet. deliver (Dict) - Deliver fields as returned by Pika. props (Pika Object) - Message properties, includes headers. msg (dict) - The actual content of the message. :type callback: function :param body: The body contents for the mesage. :type body: dict :return: A dictionary that can be directly returned to Yombo Gateways via AMQP :rtype: dict """ request_msg = { "exchange_name" : exchange_name, "routing_key" : '*', "body" : msgpack.dumps(body), "properties" : { # "correlation_id" : correlation_id, "user_id" : self.user_id, "content_type" : 'application/msgpack', "headers" : { "source" : source + ":" + self.user_id, "destination" : destination, "type" : header_type, "protocol_verion": PROTOCOL_VERSION, }, }, "callback": callback, } # Lets test if we can compress. Set headers as needed. self._Statistics.averages("lib.amqpyombo.sent.size", len(request_msg['body']), bucket_time=15, anon=True) if len(request_msg['body']) > 800: beforeZlib = len(request_msg['body']) request_msg['body'] = zlib.compress(request_msg['body'], 5) # 5 appears to be the best speed/compression ratio - MSchwenk request_msg['properties']['content_encoding'] = "zlib" afterZlib = len(request_msg['body']) self._Statistics.increment("lib.amqpyombo.sent.compressed", bucket_time=15, anon=True) self._Statistics.averages("lib.amqpyombo.sent.compressed.percentage", percentage(afterZlib, beforeZlib), anon=True) else: request_msg['properties']['content_encoding'] = 'text' self._Statistics.increment("lib.amqpyombo.sent.uncompressed", bucket_time=15, anon=True) request_msg['properties']['headers'].update(headers) return request_msg