def GetPeerStatus(self, request, context): # request parsing channel_name = conf.LOOPCHAIN_DEFAULT_CHANNEL if not request.channel else request.channel logging.debug( f"rs service GetPeerStatus peer_id({request.peer_id}) group_id({request.group_id})" ) # get stub of target peer peer_manager = ObjectManager( ).rs_service.channel_manager.get_peer_manager(channel_name) peer = peer_manager.get_peer(request.peer_id) if peer is not None: peer_stub_manager = peer_manager.get_peer_stub_manager(peer) if peer_stub_manager is not None: try: response = peer_stub_manager.call_in_times( "GetStatus", loopchain_pb2.StatusRequest( request="get peer status from rs", channel=channel_name)) if response is not None: return response except Exception as e: logging.warning(f"fail GetStatus... ({e})") return loopchain_pb2.StatusReply(status="", block_height=0, total_tx=0)
def GetScoreStatus(self, request, context): """Score Service 의 현재 상태를 요청 한다 :param request: :param context: :return: """ logging.debug("Peer GetScoreStatus request : %s", request) score_status = json.loads("{}") channel_name = conf.LOOPCHAIN_DEFAULT_CHANNEL if request.channel == '' else request.channel try: score_status_response = self.peer_service.channel_manager.get_score_container_stub( channel_name).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): """RadioStation의 현재 상태를 요청한다. :param request: :param context: :return: """ logging.debug("RadioStation GetStatus : %s", request) peer_status = ObjectManager().rs_service.common_service.getstatus(None) 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): """Peer 의 현재 상태를 요청한다. :param request: :param context: :return: """ logging.debug("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"], is_leader_complaining=peer_status['leader_complaint'])
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) peer_status = self.peer_service.common_service.getstatus( self.peer_service.channel_manager.get_block_manager(channel_name)) return loopchain_pb2.StatusReply( status=json.dumps(peer_status), block_height=peer_status["block_height"], total_tx=peer_status["total_tx"], is_leader_complaining=peer_status['leader_complaint'])
def GetPeerStatus(self, request, context): # request parsing logging.debug(f"rs service GetPeerStatus peer_id({request.peer_id}) group_id({request.group_id})") # get stub of target peer peer_stub_manager = self.__peer_manager.get_peer_stub_manager(self.__peer_manager.get_peer(request.peer_id)) if peer_stub_manager is not None: try: response = peer_stub_manager.call_in_times( "GetStatus", loopchain_pb2.StatusRequest(request="get peer status from rs")) if response is not None: return response except Exception as e: logging.warning(f"fail GetStatus... ({e})") return loopchain_pb2.StatusReply(status="", block_height=0, total_tx=0)
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): """RadioStation의 현재 상태를 요청한다. :param request: :param context: :return: """ logging.debug("RadioStation GetStatus : %s", request) status_data = { "status": "Service is online: 2", "peer_type": "2", "audience_count": "0", "consensus": str(conf.CONSENSUS_ALGORITHM.name), "peer_id": None, "block_height": 0, "total_tx": 0, "peer_target": None } return loopchain_pb2.StatusReply( status=json.dumps(status_data), block_height=status_data["block_height"], total_tx=status_data["total_tx"])
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) if util.channel_use_icx(channel_name) else StubCollection().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"], is_leader_complaining=status_data['leader_complaint'], peer_id=status_data['peer_id'])