From 3b3f1a185c070624b3b21e81eae4481884212b48 Mon Sep 17 00:00:00 2001 From: Michael Quigley Date: Tue, 28 Jan 2025 14:05:19 -0500 Subject: [PATCH] share metrics modal (#828) --- ui100/src/EnvironmentMetricsModal.tsx | 6 +-- ui100/src/ShareMetricsModal.tsx | 67 +++++++++++++++++++++++++++ ui100/src/SharePanel.tsx | 21 +++++++-- 3 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 ui100/src/ShareMetricsModal.tsx diff --git a/ui100/src/EnvironmentMetricsModal.tsx b/ui100/src/EnvironmentMetricsModal.tsx index 2d2f9bc9..769a5ba9 100644 --- a/ui100/src/EnvironmentMetricsModal.tsx +++ b/ui100/src/EnvironmentMetricsModal.tsx @@ -27,7 +27,7 @@ const EnvironmentMetricsModal = ({ close, isOpen, user, environment }: Environme }) .catch(e => { e.response.json().then(ex => { - console.log("accountMetricsModal", ex.message); + console.log("environmentMetricsModal", ex.message); }); }); metadataApi.getAccountMetrics({envId: String(environment.data.envZId), duration: "168h"}) @@ -36,7 +36,7 @@ const EnvironmentMetricsModal = ({ close, isOpen, user, environment }: Environme }) .catch(e => { e.response.json().then(ex => { - console.log("accountMetricsModal", ex.message); + console.log("environmentMetricsModal", ex.message); }); }); metadataApi.getAccountMetrics({envId: String(environment.data.envZId), duration: "24h"}) @@ -45,7 +45,7 @@ const EnvironmentMetricsModal = ({ close, isOpen, user, environment }: Environme }) .catch(e => { e.response.json().then(ex => { - console.log("accountMetricsModal", ex.message); + console.log("environmentMetricsModal", ex.message); }); }); }, []); diff --git a/ui100/src/ShareMetricsModal.tsx b/ui100/src/ShareMetricsModal.tsx new file mode 100644 index 00000000..87edf9f0 --- /dev/null +++ b/ui100/src/ShareMetricsModal.tsx @@ -0,0 +1,67 @@ +import {User} from "./model/user.ts"; +import {Node} from "@xyflow/react"; +import {useEffect, useState} from "react"; +import {buildMetrics} from "./model/util.ts"; +import {getMetadataApi} from "./model/api.ts"; +import {Box, Grid2, Modal, Typography} from "@mui/material"; +import {modalStyle} from "./styling/theme.ts"; +import MetricsGraph from "./MetricsGraph.tsx"; + +interface ShareMetricsModalProps { + close: () => void; + isOpen: boolean; + user: User; + share: Node; +} + +const ShareMetricsModal = ({ close, isOpen, user, share }: ShareMetricsModalProps) => { + const [metrics30, setMetrics30] = useState(buildMetrics([])); + const [metrics7, setMetrics7] = useState(buildMetrics([])); + const [metrics1, setMetrics1] = useState(buildMetrics([])); + + useEffect(() => { + let metadataApi = getMetadataApi(user); + metadataApi.getShareMetrics({shrToken: share.id}) + .then(d => { + setMetrics30(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("shareMetricsModal", ex.message); + }); + }); + metadataApi.getShareMetrics({shrToken: share.id, duration: "168h"}) + .then(d => { + setMetrics7(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("shareMetricsModal", ex.message); + }); + }); + metadataApi.getShareMetrics({shrToken: share.id, duration: "24h"}) + .then(d => { + setMetrics1(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("shareMetricsModal", ex.message); + }); + }); + }, []); + + return ( + + + + Share Metrics + + + + + + + ); +} + +export default ShareMetricsModal; \ No newline at end of file diff --git a/ui100/src/SharePanel.tsx b/ui100/src/SharePanel.tsx index f823d424..f9b570b5 100644 --- a/ui100/src/SharePanel.tsx +++ b/ui100/src/SharePanel.tsx @@ -2,13 +2,15 @@ import {Node} from "@xyflow/react"; import {Button, Grid2, Tooltip, Typography} from "@mui/material"; import ShareIcon from "@mui/icons-material/Share"; import {Share} from "./api"; -import {useEffect, useState} from "react"; +import React, {useEffect, useState} from "react"; import PropertyTable from "./PropertyTable.tsx"; import useApiConsoleStore from "./model/store.ts"; import DeleteIcon from "@mui/icons-material/Delete"; import ReleaseShareModal from "./ReleaseShareModal.tsx"; import {getMetadataApi} from "./model/api.ts"; import ClipboardText from "./ClipboardText.tsx"; +import MetricsIcon from "@mui/icons-material/QueryStats"; +import ShareMetricsModal from "./ShareMetricsModal.tsx"; interface SharePanelProps { share: Node; @@ -17,12 +19,17 @@ interface SharePanelProps { const SharePanel = ({ share }: SharePanelProps) => { const user = useApiConsoleStore((state) => state.user); const [detail, setDetail] = useState(null); - const [releaseShareOpen, setReleaseShareOpen] = useState(false); - + const [shareMetricsOpen, setShareMetricsOpen] = useState(false); + const openShareMetrics = () => { + setShareMetricsOpen(true); + } + const closeShareMetrics = () => { + setShareMetricsOpen(false); + } + const [releaseShareOpen, setReleaseShareOpen] = useState(false); const openReleaseShare = () => { setReleaseShareOpen(true); } - const closeReleaseShare = () => { setReleaseShareOpen(false); } @@ -88,7 +95,10 @@ const SharePanel = ({ share }: SharePanelProps) => {
A {detail ? detail.shareMode : ''}{detail && detail.reserved ? ', reserved ' : ''} share with the token {share.id}
- + + + + @@ -98,6 +108,7 @@ const SharePanel = ({ share }: SharePanelProps) => { + );