示例#1
0
class Aggreagator:
    """  doc """
    def __init__(self, validatormsg):
        self.msg = validatormsg
        self.datastore = DataStore("test.db")

    @property
    def verifymsg(self):
        """ doc """
        try:
            assert isinstance(self.msg, dict)
            assert "header" in self.msg and len(self.msg["header"]) > 0
            assert "payload" in self.msg and len(self.msg["payload"]) > 0
        except AssertionError:
            print("verify msg failed")
            return False
        return True

    def get_header_payload(self):
        return (self.msg["header"], self.msg["payload"])

    def verify_if_message_in_queue(self, corrid, tablename):
        query_str = "select * from {} where correlation_id=:1".format(
            tablename)
        # ret=self.datastore.select_data("select * from validator where correlation_id=:1",(corrid,))
        ret = self.datastore.select_data(query_str, (corrid, ))
        # print(ret)
        return (len(ret), ret)

    def process_validator_msg(self):
        print(current_process().name)
        if not self.verifymsg:
            return False
        (header, payload) = self.get_header_payload()
        ret, _ = self.verify_if_message_in_queue(header["correlation_id"],
                                                 "validator")
        if not ret:
            try:
                self.datastore.insert(
                    "insert into validator values (?,?,?,?,?,?,?)", [
                        None,
                        str(time.time()), header["correlation_id"],
                        header["username"], header["ticket_num"],
                        header["type"],
                        json.dumps(payload)
                    ])

            except:
                errorStack = traceback.format_exc()
                print(errorStack.split('\n'))
                # print('ERROR ' + errorStack.split('\n')[-2])
                return False
        else:
            print("Message already exist in the table")
            # FIXME - may be we have to delete the old message and insert the new one
            return False

    def process_requestupdater_msg(self):
        """
        ret_validator_upd:status of the validator func
        ret_reqUpdator_upd: status of request updater
        (1, True)=self.process_requestupdater_msg()
        1=
        :return:
        """
        if not self.verifymsg:
            return False
        ret_reqUpdator_upd = False
        ret_validator_upd = False
        final_msg = None

        (header, payload) = self.get_header_payload()

        ret_reqUpdator_upd = self.insert_request_update_table(header, payload)

        if ret_reqUpdator_upd:
            print("message from Requester updated is inserted into the table")
            ret_validator_upd, data = self.verify_if_message_in_queue(
                header["correlation_id"], "validator")

            if ret_validator_upd:
                if ret_validator_upd == 1:
                    print("message in validator queue we can proceed")
                    final_msg = self.get_final_msg(data)
                    return (ret_validator_upd, ret_reqUpdator_upd, final_msg)
                    print(final_msg)
                elif ret_validator_upd > 1:
                    print("more than 1 message for correlation id {}".format(
                        header["correlation_id"]))
                    final_msg = self.get_final_msg(data)
                    return (ret_validator_upd, ret_reqUpdator_upd, final_msg)

            else:
                print(
                    """message not in validator queue for the corresponaing message received from request upater"""
                )
                return (ret_validator_upd, ret_reqUpdator_upd)
        else:
            print("Request updater msg insert failed")
            return (ret_validator_upd, ret_reqUpdator_upd)
        return (ret_validator_upd, ret_reqUpdator_upd)
        # FIXME - does it have to return a tuple of BOOLEAN or just a BOOLEAN

    def insert_request_update_table(self, header, payload):
        try:
            self.datastore.insert(
                "insert into requester_updater values (?,?,?,?,?,?,?,?)", [
                    None,
                    str(time.time()), header["correlation_id"],
                    header["username"], header["ticket_num"], header["type"],
                    header["status"],
                    json.dumps(payload)
                ])
        except Exception as e:
            print(e)
            return False
        return True

    def get_final_msg(self, data):
        _msg = data[0][0]
        _final_msg = {}
        _header = {}
        _header["correlation_id"] = _msg[2]
        _header["username"] = _msg[3]
        _header["ticket_num"] = _msg[4]
        _header["type"] = _msg[5]
        payload = json.loads(_msg[6])
        _final_msg["header"] = _header
        _final_msg["payload"] = payload
        return _final_msg

    def CheckingQueueForMessage(self):
        # fixme - write logic for looking each message in the Queue
        pass

    def get_status_of_db(self):
        # fixme - write logic for checking if db is available (and same to be written in datastore)
        pass