import React from "react"; import { useStatus } from "../../src/core/hooks"; import { Heading, Text, Flex, Spacer, chakra, Spinner } from "@chakra-ui/react"; import { getLayout, getLayoutProps } from "../../src/layouts/InfoPageLayout"; const Status = () => { const healthyStatusText = "Available"; const downStatusText = "Unavailable"; const healthyStatusColor = "green.900"; const downStatusColor = "red.600"; const shortTimestamp = (rawTimestamp) => { return rawTimestamp.replace(/^.+T/, "").replace(/\..+/, ""); }; const { serverListStatusCache, crawlersStatusCache, dbServerStatusCache, latestBlockDBStatusCache, } = useStatus(); const moonstreamapiStatus = serverListStatusCache?.data?.filter( (i) => i.status.name === "moonstreamapi" )[0]; const moonstreamCrawlersStatus = serverListStatusCache?.data?.filter( (i) => i.status.name === "moonstream_crawlers" )[0]; const nodeEthereumAStatus = serverListStatusCache?.data?.filter( (i) => i.status.name === "node_ethereum_a" )[0]; const nodeEthereumAGeth = serverListStatusCache?.data?.filter( (i) => i.status.name === "node_ethereum_a_geth" )[0]; const nodeEthereumBStatus = serverListStatusCache?.data?.filter( (i) => i.status.name === "node_ethereum_b" )[0]; const nodeEthereumBGeth = serverListStatusCache?.data?.filter( (i) => i.status.name === "node_ethereum_b_geth" )[0]; const nodePolygonAStatus = serverListStatusCache?.data?.filter( (i) => i.status.name === "node_polygon_a" )[0]; const nodePolygonAGeth = serverListStatusCache?.data?.filter( (i) => i.status.name === "node_polygon_a_geth" )[0]; const nodePolygonBStatus = serverListStatusCache?.data?.filter( (i) => i.status.name === "node_polygon_b" )[0]; const nodePolygonBGeth = serverListStatusCache?.data?.filter( (i) => i.status.name === "node_polygon_b_geth" )[0]; const StatusRow = (props) => { console.log(props.cache.data); return ( {props.title} {!props.cache.isLoading && props.children} {props.cache.isLoading && } ); }; return ( <> {`Status page`} {moonstreamapiStatus?.status.body.status == "ok" ? healthyStatusText : downStatusText}
{crawlersStatusCache?.data?.ethereum_txpool_timestamp ? shortTimestamp( crawlersStatusCache?.data?.ethereum_txpool_timestamp ) : downStatusText} {crawlersStatusCache?.data?.ethereum_trending_timestamp ? shortTimestamp( crawlersStatusCache?.data?.ethereum_trending_timestamp ) : downStatusText}
{nodeEthereumAStatus?.status.body.status == "ok" ? healthyStatusText : downStatusText} {nodeEthereumAGeth?.status.body.current_block ? nodeEthereumAGeth.status.body.current_block : 0}
{nodeEthereumBStatus?.status.body.status == "ok" ? healthyStatusText : downStatusText} {nodeEthereumBGeth?.status.body.current_block ? nodeEthereumBGeth.status.body.current_block : 0}
{nodePolygonAStatus?.status.body.status == "ok" ? healthyStatusText : downStatusText} {nodePolygonAGeth?.status.body.current_block ? nodePolygonAGeth.status.body.current_block : 0}
{nodePolygonBStatus?.status.body.status == "ok" ? healthyStatusText : downStatusText} {nodePolygonBGeth?.status.body.current_block ? nodePolygonBGeth.status.body.current_block : 0}
{dbServerStatusCache?.data?.status == "ok" ? healthyStatusText : downStatusText} {latestBlockDBStatusCache?.data?.block_number ? latestBlockDBStatusCache.data.block_number : 0}
); }; Status.getLayout = getLayout; export async function getStaticProps() { const metaTags = { title: "Moonstream: Status page", description: "Status of moonstream.to services", keywords: "blockchain, crypto, data, trading, smart contracts, ethereum, solana, transactions, defi, finance, decentralized, analytics, product, whitepapers", url: "https://www.moonstream.to/status", }; const layoutProps = getLayoutProps(); layoutProps.props.metaTags = { ...layoutProps.props.metaTags, ...metaTags }; return { ...layoutProps }; } export default Status;