def GetScoreStatus(self, request, context): """Score Service 의 현재 상태를 요청 한다 :param request: :param context: :return: """ logging.debug("Peer GetScoreStatus request : %s", request) score_status = json.loads("{}") try: score_status_response = self.peer_service.stub_to_score_service.call( "Request", loopchain_pb2.Message(code=message_code.Request.status) ) logging.debug("Get Score Status : " + str(score_status_response)) if score_status_response.code == message_code.Response.success: score_status = json.loads(score_status_response.meta) except Exception as e: logging.debug("Score Service Already stop by other reason. %s", e) return loopchain_pb2.StatusReply( status=json.dumps(score_status), block_height=0, total_tx=0)
def GetStatus(self, request, context): """Peer 의 현재 상태를 요청한다. :param request: :param context: :return: """ logging.debug("Inner Channel::Peer GetStatus : %s", request) peer_status = self.peer_service.common_service.getstatus(self.peer_service.block_manager) return loopchain_pb2.StatusReply( status=json.dumps(peer_status), block_height=peer_status["block_height"], total_tx=peer_status["total_tx"])
def GetScoreStatus(self, request, context): """Score Service 의 현재 상태를 요청 한다 :param request: :param context: :return: """ logging.debug("Peer GetScoreStatus request : %s", request) channel_name = conf.LOOPCHAIN_DEFAULT_CHANNEL if request.channel == '' else request.channel channel_stub = StubCollection().channel_stubs[channel_name] score_status = channel_stub.sync_task().get_score_status() return loopchain_pb2.StatusReply(status=score_status, block_height=0, total_tx=0)
def GetStatus(self, request, context): """Request current status of Peer :param request: :param context: :return: """ channel_name = conf.LOOPCHAIN_DEFAULT_CHANNEL if request.channel == '' else request.channel try: channel_stub = StubCollection().channel_stubs[channel_name] except KeyError: raise ChannelStatusError(f"Invalid channel({channel_name})") status_data: typing.Optional[dict] = None if request.request == 'block_sync': try: status_data = typing.cast(dict, channel_stub.sync_task().get_status()) except BaseException as e: utils.logger.error(f"Peer GetStatus(block_sync) Exception : {e}") else: status_data = self.__get_status_cache(channel_name, time_in_seconds=math.trunc(time.time())) if status_data is None: raise ChannelStatusError(f"Fail get status data from channel({channel_name})") status_data = copy.deepcopy(status_data) stubs = { "peer": StubCollection().peer_stub, "channel": StubCollection().channel_stubs.get(channel_name), "score": StubCollection().icon_score_stubs.get(channel_name) } mq_status_data = {} mq_down = False for key, stub in stubs.items(): message_count = -1 message_error = None try: mq_info = stub.sync_info().queue_info() message_count = mq_info.method.message_count except AttributeError: message_error = "Stub is not initialized." except Exception as e: message_error = f"{type(e).__name__}, {e}" mq_status_data[key] = {} mq_status_data[key]["message_count"] = message_count if message_error: mq_status_data[key]["error"] = message_error mq_down = True status_data["mq"] = mq_status_data if mq_down: reason = status_code.get_status_reason(status_code.Service.mq_down) status_data["status"] = "Service is offline: " + reason return loopchain_pb2.StatusReply( status=json.dumps(status_data), block_height=status_data["block_height"], total_tx=status_data["total_tx"], unconfirmed_block_height=status_data["unconfirmed_block_height"], is_leader_complaining=status_data['leader_complaint'], peer_id=status_data['peer_id'])
def GetStatus(self, request, context): """Peer 의 현재 상태를 요청한다. :param request: :param context: :return: """ channel_name = conf.LOOPCHAIN_DEFAULT_CHANNEL if request.channel == '' else request.channel logging.debug("Peer GetStatus : %s", request) try: channel_stub = StubCollection().channel_stubs[channel_name] callback = partial(self.__status_update, channel_name) future = asyncio.run_coroutine_threadsafe( channel_stub.async_task().get_status(), self.peer_service.inner_service.loop) future.add_done_callback(callback) except BaseException as e: logging.error(f"Peer GetStatus Exception : {e}") status_data = self.__get_status_data(channel_name) if status_data is None: raise ChannelStatusError( f"Fail get status data from channel({channel_name})") status_data = copy.deepcopy(status_data) stubs = { "peer": StubCollection().peer_stub, "channel": StubCollection().channel_stubs.get(channel_name), "score": StubCollection().icon_score_stubs.get(channel_name) } mq_status_data = {} mq_down = False for key, stub in stubs.items(): message_count = -1 message_error = None try: mq_info = stub.sync_info().queue_info() message_count = mq_info.method.message_count except AttributeError: message_error = "Stub is not initialized." except Exception as e: message_error = f"{type(e).__name__}, {e}" mq_status_data[key] = {} mq_status_data[key]["message_count"] = message_count if message_error: mq_status_data[key]["error"] = message_error mq_down = True status_data["mq"] = mq_status_data if mq_down: reason = status_code.get_status_reason(status_code.Service.mq_down) status_data["status"] = "Service is offline: " + reason return loopchain_pb2.StatusReply( status=json.dumps(status_data), block_height=status_data["block_height"], total_tx=status_data["total_tx"], unconfirmed_block_height=status_data["unconfirmed_block_height"], is_leader_complaining=status_data['leader_complaint'], peer_id=status_data['peer_id'])