예제 #1
0
파일: pdsapi.py 프로젝트: WuxV/tianjimgr-v2
def send(message):
    ip = config.safe_get('network', 'listen-ip')
    port = config.safe_get('network', 'listen-port')

    # 准备数据
    data = message.SerializeToString()
    data = struct.pack('I', len(data)) + data

    # 发包
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((ip, int(port)))
    sock.send(data)

    # 收包
    try:
        data = ""
        while True:
            data += sock.recv(1024)
            if len(data) >= (pkSize + struct.unpack('I', data[:pkSize])[0]):
                break
    except Exception as e:
        MESSAGE("Recv data error : %s" % e)
        abort(500)
    sock.close()

    # 解析包
    response = msg_pds.Message()
    response.ParseFromString(data[pkSize:len(data)])
    if not response.HasField('rc'):
        MESSAGE("Response miss rc field")
        abort(500)
    return response
예제 #2
0
def send(message):
    ip = config.safe_get('network', 'listen-ip')
    port = config.safe_get('network', 'listen-port')

    # 准备数据
    data = message.SerializeToString()
    data = struct.pack('I', len(data)) + data

    # 发包
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((ip, int(port)))
    sock.send(data)
    data = ""
    while True:
        data += sock.recv(1024)
        if len(data) >= (pkSize + struct.unpack('I', data[:pkSize])[0]):
            break
    sock.close()

    # 解析包
    response = msg_pds.Message()
    response.ParseFromString(data[pkSize:len(data)])
    if not response.HasField('rc'):
        assert (0)
    return str(response).strip()
예제 #3
0
def MakeRequest(machine_type, origin_message=None):
    message = msg_pds.Message()
    message.head.message_type = machine_type
    if origin_message == None:
        message.head.session = str(uuid.uuid1())
        message.head.flowno = 1
    else:
        message.head.session = origin_message.head.session
        message.head.flowno = origin_message.head.flowno + 1
    return message
예제 #4
0
    def dataReceived(self, data):
        pkSize = len(struct.pack('I', 0))

        self.data += data
        if len(self.data) < pkSize:
            # print "pkSize pass"
            return
        dataLen = struct.unpack('I', self.data[:pkSize])[0]

        if len(self.data) < dataLen:
            # print "dataLen pass"
            return

        request = pds.Message()
        request.ParseFromString(self.data[pkSize:pkSize + dataLen])
        return self.handleData(request)
예제 #5
0
    def _send(self, message):
        # 准备数据
        data = message.SerializeToString()
        assert (len(data) < MAX_LEN)
        data = struct.pack('I', len(data)) + data

        # 发包
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.connect((self.srv['ip'], self.srv['port']))
        sock.send(data)

        # 收包
        data = ""
        while True:
            data += sock.recv(1024)
            if len(data) >= (pkSize + struct.unpack('I', data[:pkSize])[0]):
                break
        sock.close()

        # 解析包
        response = msg_pds.Message()
        response.ParseFromString(data[pkSize:len(data)])
        return response
예제 #6
0
    def send(self, message):
        if self.srv['cli_config']['debug'] == True:
            out = "====================== Request ======================\n"
            out += str(message).strip()
            OUT_INFO(out)

        # 尝试次数
        try_times = 1
        info = ""
        response = msg_pds.Message()

        class RequestStateType:
            INIT = 0
            NOT_MASTER = 1
            TIMEOUT = 2
            SOCKET_ERROR = 3
            UNEXPECTED = 4

        # REQUEST_STATE_TYPE = enum.Enum('INIT', 'NOT_MASTER', 'TIMEOUT', 'SOCKET_ERROR', 'UNEXPECTED')
        REQUEST_STATE_TYPE = RequestStateType()
        while (try_times >= 0):
            try:
                request_state = REQUEST_STATE_TYPE.INIT
                response = self._send(message)
                break
            except socket.timeout as e:
                request_state = REQUEST_STATE_TYPE.TIMEOUT
                break
            except socket.error as e:
                try_times -= 1
                request_state = REQUEST_STATE_TYPE.SOCKET_ERROR
                continue
            except Exception as e:
                try_times -= 1
                if self.srv['cli_config']['debug'] == True:
                    OUT_DEBUG(str(e))
                request_state = REQUEST_STATE_TYPE.UNEXPECTED

        if request_state == REQUEST_STATE_TYPE.NOT_MASTER:
            out = "Connection Error : Cann't get MDS info, please try again or 30 seconds later"
            OUT_ERROR(out)
            sys.exit(1)
        elif request_state == REQUEST_STATE_TYPE.TIMEOUT:
            out = "Command Timeout : Please try again or try again later."
            OUT_ERROR(out)
            sys.exit(1)
        elif request_state == REQUEST_STATE_TYPE.SOCKET_ERROR:
            out = "Connection Refused : MDS service is starting ?"
            OUT_ERROR(out)
            sys.exit(1)
        elif request_state == REQUEST_STATE_TYPE.UNEXPECTED or not response.HasField(
                'head') or not response.HasField('rc'):
            out = "=======================================================================\n"
            out += "* If you see this tip, it means that an unexpected error occurred !!! *\n"
            out += "* Please contact your supplier for help.                              *\n"
            out += "======================================================================="
            OUT_ERROR(out)
            sys.exit(1)

        if self.srv['cli_config']['json'] == True:
            OUT_INFO(json.dumps(protobuf_json.pb2json(response), indent=4))
            sys.exit(0)

        if self.srv['cli_config']['debug'] == True:
            out = "====================== Response ======================\n"
            out += "%s\n" % str(response).strip()
            out += "======================================================"
            OUT_INFO(out)

        return response