diff --git a/explorer-nextjs/src/app/(pages)/nym-node/[id]/page.tsx b/explorer-nextjs/src/app/(pages)/nym-node/[id]/page.tsx index d480874feb..621043d6fd 100644 --- a/explorer-nextjs/src/app/(pages)/nym-node/[id]/page.tsx +++ b/explorer-nextjs/src/app/(pages)/nym-node/[id]/page.tsx @@ -35,6 +35,8 @@ export default async function NymNode({ const observatoryNymNodes: IObservatoryNode[] = await observatoryResponse.json(); + console.log("observatoryNymNodes :>> ", observatoryNymNodes); + if (!observatoryNymNodes) { return null; } @@ -69,20 +71,22 @@ export default async function NymNode({ - + {observatoryNymNode.bonding_address && ( + + )} {observatoryNymNode && ( @@ -95,7 +99,7 @@ export default async function NymNode({ )} - {observatoryNymNode && ( + {observatoryNymNode.rewarding_details && ( )} - - - + {observatoryNymNode.rewarding_details && ( + + + + )} {observatoryNymNode && ( { const { nodeInfo } = props; + const [gatewayProbeResult, setGatewayProbeResult] = + useState(); + const nodeRoles = getNodeRoles(nodeInfo.description.declared_role); const NodeRoles = nodeRoles.map((role) => ( @@ -39,18 +141,6 @@ export const QualityIndicatorsCard = (props: IQualityIndicatorsCardProps) => { )); - function calculateQualityOfServiceStars(quality: number): number { - if (quality < 0.3) { - return 1; - } - if (quality < 0.5) { - return 2; - } - if (quality < 0.7) { - return 3; - } - return 4; - } const qualityOfServiceStars = nodeInfo?.uptime ? calculateQualityOfServiceStars(nodeInfo?.uptime) : 1; @@ -58,6 +148,33 @@ export const QualityIndicatorsCard = (props: IQualityIndicatorsCardProps) => { const nodeIsMixNodeOnly = NodeRoles.length === 1 && nodeRoles[0] === "Mix Node"; + useEffect(() => { + // Fetch data if the node has certain roles + if ( + nodeRoles.includes("Entry Node") || + nodeRoles.includes("Exit IPR Node") || + nodeRoles.includes("Exit NR Node") + ) { + const fetchData = async () => { + try { + const response = await fetch( + `https://mainnet-node-status-api.nymtech.cc/v2/gateways/${nodeInfo.identity_key}`, + ); + const data: GatewayStatus = await response.json(); + setGatewayProbeResult(data.last_probe_result); + } catch (error) { + console.error("Error fetching data:", error); + } + }; + + fetchData(); + } + }, [nodeRoles, nodeInfo.identity_key]); + + const configScoreStars = gatewayProbeResult + ? calculateConfigScoreStars(gatewayProbeResult) + : 0; + return ( { } /> - {nodeIsMixNodeOnly && ( - } - /> - )} + } + /> {!nodeIsMixNodeOnly && ( } + value={} /> )} {!nodeIsMixNodeOnly && (