diff --git a/frontend/pages/status/index.js b/frontend/pages/status/index.js new file mode 100644 index 00000000..d15e2e9b --- /dev/null +++ b/frontend/pages/status/index.js @@ -0,0 +1,191 @@ +import React, { useEffect, useState, useLayoutEffect } from "react" +import { useStatus } from "../../src/core/hooks"; +import { + Heading, + Text, + Flex, + Link, + Spacer, + Stack, + chakra, + useMediaQuery, + useBreakpointValue +} from "@chakra-ui/react" +import { AWS_ASSETS_PATH } from "../../src/core/constants" + +const assets = { + background720: `${AWS_ASSETS_PATH}/product-background-720x405.png`, + background1920: `${AWS_ASSETS_PATH}/product-background-720x405.png`, + background2880: `${AWS_ASSETS_PATH}/product-background-720x405.png`, + background3840: `${AWS_ASSETS_PATH}/product-background-720x405.png` +} + +const Status = () => { + const { status } = useStatus(); + + const [background, setBackground] = useState("background720") + const [backgroundLoaded720, setBackgroundLoaded720] = useState(false) + const [backgroundLoaded1920, setBackgroundLoaded1920] = useState(false) + const [backgroundLoaded2880, setBackgroundLoaded2880] = useState(false) + const [backgroundLoaded3840, setBackgroundLoaded3840] = useState(false) + + const [ + isLargerThan720px, + isLargerThan1920px, + isLargerThan2880px, + isLargerThan3840px + ] = useMediaQuery([ + "(min-width: 720px)", + "(min-width: 1920px)", + "(min-width: 2880px)", + "(min-width: 3840px)" + ]) + + useEffect(() => { + assets[ + "background720" + ] = `${AWS_ASSETS_PATH}/product-background-720x405.png` + assets[ + "background1920" + ] = `${AWS_ASSETS_PATH}/product-background-1920x1080.png` + assets[ + "background2880" + ] = `${AWS_ASSETS_PATH}/product-background-2880x1620.png` + assets[ + "background3840" + ] = `${AWS_ASSETS_PATH}/product-background-3840x2160.png` + + const statusRes = status() + console.log(statusRes) + }, []) + + useLayoutEffect(() => { + if (backgroundLoaded3840) { + setBackground("background3840") + } else if (backgroundLoaded2880) { + setBackground("background2880") + } else if (backgroundLoaded1920) { + setBackground("background1920") + } else { + setBackground("background720") + } + }, [ + isLargerThan720px, + isLargerThan1920px, + isLargerThan2880px, + isLargerThan3840px, + backgroundLoaded720, + backgroundLoaded1920, + backgroundLoaded2880, + backgroundLoaded3840 + ]) + + useLayoutEffect(() => { + const imageLoader720 = new Image() + imageLoader720.src = `${AWS_ASSETS_PATH}/product-background-720x405.png` + imageLoader720.onload = () => { + setBackgroundLoaded720(true) + } + }, []) + + useLayoutEffect(() => { + const imageLoader1920 = new Image() + imageLoader1920.src = `${AWS_ASSETS_PATH}/product-background-1920x1080.png` + imageLoader1920.onload = () => { + setBackgroundLoaded1920(true) + } + }, []) + + useLayoutEffect(() => { + const imageLoader2880 = new Image() + imageLoader2880.src = `${AWS_ASSETS_PATH}/product-background-2880x1620.png` + imageLoader2880.onload = () => { + setBackgroundLoaded2880(true) + } + }, []) + + useLayoutEffect(() => { + const imageLoader3840 = new Image() + imageLoader3840.src = `${AWS_ASSETS_PATH}/product-background-3840x2160.png` + imageLoader3840.onload = () => { + setBackgroundLoaded3840(true) + } + }, []) + + const margin = useBreakpointValue({ + base: "1%", + sm: "2%", + md: "3%", + lg: "15%", + xl: "20%", + "2xl": "25%" + }) + + return ( + + + + {`Status page`} + + + + Backend server + + Available + +
+ + Crawlers server + + Available + + + Latest block in Geth + + 321321 + + + Txpool latest record ts + + 32 + + + Trending latest record ts + + 32 + +
+ + Database server + + Available + + + Latest block in Database + + 123123 + +
+
+
+ ) +} + +export default Status diff --git a/frontend/sample.env b/frontend/sample.env index d2031fd0..8a67384e 100644 --- a/frontend/sample.env +++ b/frontend/sample.env @@ -1,3 +1,4 @@ export NEXT_PUBLIC_MIXPANEL_TOKEN="" export NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="" -export NEXT_PUBLIC_MOONSTREAM_API_URL=http://localhost:7481 \ No newline at end of file +export NEXT_PUBLIC_MOONSTREAM_API_URL="http://localhost:7481" +export NEXT_PUBLIC_MOONSTREAM_DB_URL="http://localhost:5432" diff --git a/frontend/src/core/hooks/useStatus.js b/frontend/src/core/hooks/useStatus.js new file mode 100644 index 00000000..948d2659 --- /dev/null +++ b/frontend/src/core/hooks/useStatus.js @@ -0,0 +1,22 @@ +import { useMutation } from "react-query" +import { useToast } from "./" +import { AuthService } from "../../core/services" + +const useStatus = () => { + const toast = useToast() + + const { + mutate: status + } = useMutation(AuthService.status, { + onError: (error) => { + toast(error, "error") + }, + onSuccess: () => { + toast("Status got", "success") + } + }) + + return { status } +} + +export default useStatus diff --git a/frontend/src/core/services/auth.service.js b/frontend/src/core/services/auth.service.js index 23478c86..6e11da23 100644 --- a/frontend/src/core/services/auth.service.js +++ b/frontend/src/core/services/auth.service.js @@ -1,8 +1,16 @@ import { http } from "../utils"; const API_URL = process.env.NEXT_PUBLIC_MOONSTREAM_API_URL; +const DB_URL = process.env.NEXT_PUBLIC_MOONSTREAM_DB_URL; export const AUTH_URL = `${API_URL}/users`; +export const status = () => { + return http({ + method: "GET", + url: `${DB_URL}/block/latest`, + }); +}; + export const login = ({ username, password, token_note }) => { const data = new FormData(); data.append("username", username);