diff --git a/web_ui/frontend/app/cache/metrics/layout.tsx b/web_ui/frontend/app/cache/metrics/layout.tsx
new file mode 100644
index 000000000..10b6d49e5
--- /dev/null
+++ b/web_ui/frontend/app/cache/metrics/layout.tsx
@@ -0,0 +1,2 @@
+import MetricLayout from '@/components/layout/MetricLayout';
+export default MetricLayout;
diff --git a/web_ui/frontend/app/cache/metrics/page.tsx b/web_ui/frontend/app/cache/metrics/page.tsx
new file mode 100644
index 000000000..37d28fd3a
--- /dev/null
+++ b/web_ui/frontend/app/cache/metrics/page.tsx
@@ -0,0 +1,153 @@
+import { Box, Grid, Paper, Typography } from '@mui/material';
+import { green, grey, blue } from '@mui/material/colors';
+
+import {
+ BigMetric,
+ ProjectTable,
+ BigBytesMetric,
+ StorageGraph,
+ TransferRateGraph,
+ CPUGraph,
+ MemoryGraph,
+} from '@/components/metrics';
+
+const Page = () => {
+ return (
+
+
+
+ {[
+ ,
+ ,
+ ,
+ ].map((component, index) => (
+
+ {component}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Page;
diff --git a/web_ui/frontend/app/director/metrics/layout.tsx b/web_ui/frontend/app/director/metrics/layout.tsx
index 331593669..ddb28fc2b 100644
--- a/web_ui/frontend/app/director/metrics/layout.tsx
+++ b/web_ui/frontend/app/director/metrics/layout.tsx
@@ -1,23 +1,12 @@
import { ReactNode } from 'react';
-import { PaddedContent } from '@/components/layout';
-import dynamic from 'next/dynamic';
-
-const GraphProvider = dynamic(
- () => import('../../../components/graphs/GraphContext'),
- { ssr: !!false }
-);
-const GraphOverlay = dynamic(
- () => import('../../../components/graphs/GraphOverlay'),
- { ssr: !!false }
-);
+import { PaddedContent } from '@/components/layout';
+import MetricLayout from '@/components/layout/MetricLayout';
const Layout = ({ children }: { children: ReactNode }) => {
return (
-
- {children}
-
+ {children}
);
};
diff --git a/web_ui/frontend/app/director/metrics/page.tsx b/web_ui/frontend/app/director/metrics/page.tsx
index fafff6fcc..806f181dd 100644
--- a/web_ui/frontend/app/director/metrics/page.tsx
+++ b/web_ui/frontend/app/director/metrics/page.tsx
@@ -1,8 +1,8 @@
import { Grid, Paper } from '@mui/material';
import { green } from '@mui/material/colors';
-import { ProjectTable } from '@/app/origin/metrics/components';
-import { BigBytesMetric } from '@/app/origin/metrics/components/BigNumber';
+import { ProjectTable, BigBytesMetric } from '@/components/metrics';
+
import {
BytesMetricBoxPlot,
MetricBoxPlot,
diff --git a/web_ui/frontend/app/navigation.tsx b/web_ui/frontend/app/navigation.tsx
index 2119b3150..db4abd236 100644
--- a/web_ui/frontend/app/navigation.tsx
+++ b/web_ui/frontend/app/navigation.tsx
@@ -84,6 +84,7 @@ const NavigationConfig: NavigationConfiguration = {
],
cache: [
{ title: 'Dashboard', href: '/cache/', icon: },
+ { title: 'Metrics', href: '/cache/metrics/', icon: },
{ title: 'Config', href: '/config/', icon: },
],
shared: [
diff --git a/web_ui/frontend/app/origin/metrics/components/index.ts b/web_ui/frontend/app/origin/metrics/components/index.ts
deleted file mode 100644
index 6e2e79643..000000000
--- a/web_ui/frontend/app/origin/metrics/components/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './ProjectsTable';
-export * from './TransferRateGraph';
diff --git a/web_ui/frontend/app/origin/metrics/layout.tsx b/web_ui/frontend/app/origin/metrics/layout.tsx
index ce6bf5967..10b6d49e5 100644
--- a/web_ui/frontend/app/origin/metrics/layout.tsx
+++ b/web_ui/frontend/app/origin/metrics/layout.tsx
@@ -1,22 +1,2 @@
-import { ReactNode } from 'react';
-import dynamic from 'next/dynamic';
-
-const GraphProvider = dynamic(
- () => import('../../../components/graphs/GraphContext'),
- { ssr: !!false }
-);
-
-const GraphOverlay = dynamic(
- () => import('../../../components/graphs/GraphOverlay'),
- { ssr: !!false }
-);
-
-const Layout = ({ children }: { children: ReactNode }) => {
- return (
-
- {children}
-
- );
-};
-
-export default Layout;
+import MetricLayout from '@/components/layout/MetricLayout';
+export default MetricLayout;
diff --git a/web_ui/frontend/app/origin/metrics/page.tsx b/web_ui/frontend/app/origin/metrics/page.tsx
index 8810ca95f..54542eb8c 100644
--- a/web_ui/frontend/app/origin/metrics/page.tsx
+++ b/web_ui/frontend/app/origin/metrics/page.tsx
@@ -2,17 +2,14 @@ import { Box, Grid, Paper, Typography } from '@mui/material';
import { green, grey, blue } from '@mui/material/colors';
import {
+ BigMetric,
ProjectTable,
- TransferRateGraph,
-} from '@/app/origin/metrics/components';
-import { CPUGraph } from '@/app/origin/metrics/components/CPUGraph';
-import { MemoryGraph } from '@/app/origin/metrics/components/MemoryGraph';
-import {
BigBytesMetric,
- BigMetric,
- BigNumber,
-} from '@/app/origin/metrics/components/BigNumber';
-import { StorageGraph } from '@/app/origin/metrics/components/StorageGraph';
+ StorageGraph,
+ TransferRateGraph,
+ CPUGraph,
+ MemoryGraph,
+} from '@/components/metrics';
const Page = () => {
return (
diff --git a/web_ui/frontend/components/layout/MetricLayout.tsx b/web_ui/frontend/components/layout/MetricLayout.tsx
new file mode 100644
index 000000000..124f3a5ac
--- /dev/null
+++ b/web_ui/frontend/components/layout/MetricLayout.tsx
@@ -0,0 +1,21 @@
+import { ReactNode } from 'react';
+import dynamic from 'next/dynamic';
+
+const GraphProvider = dynamic(
+ () => import('@/components/graphs/GraphContext'),
+ { ssr: !!false }
+);
+
+const GraphOverlay = dynamic(() => import('@/components/graphs/GraphOverlay'), {
+ ssr: !!false,
+});
+
+const MetricLayout = ({ children }: { children: ReactNode }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export default MetricLayout;
diff --git a/web_ui/frontend/app/origin/metrics/components/BigNumber.tsx b/web_ui/frontend/components/metrics/BigNumber.tsx
similarity index 100%
rename from web_ui/frontend/app/origin/metrics/components/BigNumber.tsx
rename to web_ui/frontend/components/metrics/BigNumber.tsx
diff --git a/web_ui/frontend/app/origin/metrics/components/CPUGraph.tsx b/web_ui/frontend/components/metrics/CPUGraph.tsx
similarity index 100%
rename from web_ui/frontend/app/origin/metrics/components/CPUGraph.tsx
rename to web_ui/frontend/components/metrics/CPUGraph.tsx
diff --git a/web_ui/frontend/app/origin/metrics/components/MemoryGraph.tsx b/web_ui/frontend/components/metrics/MemoryGraph.tsx
similarity index 100%
rename from web_ui/frontend/app/origin/metrics/components/MemoryGraph.tsx
rename to web_ui/frontend/components/metrics/MemoryGraph.tsx
diff --git a/web_ui/frontend/app/origin/metrics/components/ProjectsTable.tsx b/web_ui/frontend/components/metrics/ProjectsTable.tsx
similarity index 97%
rename from web_ui/frontend/app/origin/metrics/components/ProjectsTable.tsx
rename to web_ui/frontend/components/metrics/ProjectsTable.tsx
index 0900488b2..f94511d7d 100644
--- a/web_ui/frontend/app/origin/metrics/components/ProjectsTable.tsx
+++ b/web_ui/frontend/components/metrics/ProjectsTable.tsx
@@ -27,7 +27,7 @@ interface ProjectData {
bytesAccessed: string;
}
-export const ProjectTable = () => {
+const ProjectTable = () => {
const { rate, time, range, resolution } = useContext(GraphContext);
const { data: projectData, error: projectError } = useSWR(
@@ -91,3 +91,5 @@ const getProjectData = async (
return projectData;
};
+
+export { ProjectTable };
diff --git a/web_ui/frontend/app/origin/metrics/components/StorageGraph.tsx b/web_ui/frontend/components/metrics/StorageGraph.tsx
similarity index 100%
rename from web_ui/frontend/app/origin/metrics/components/StorageGraph.tsx
rename to web_ui/frontend/components/metrics/StorageGraph.tsx
diff --git a/web_ui/frontend/app/origin/metrics/components/TransferRateGraph.tsx b/web_ui/frontend/components/metrics/TransferRateGraph.tsx
similarity index 100%
rename from web_ui/frontend/app/origin/metrics/components/TransferRateGraph.tsx
rename to web_ui/frontend/components/metrics/TransferRateGraph.tsx
diff --git a/web_ui/frontend/components/metrics/index.ts b/web_ui/frontend/components/metrics/index.ts
new file mode 100644
index 000000000..c891931a2
--- /dev/null
+++ b/web_ui/frontend/components/metrics/index.ts
@@ -0,0 +1,6 @@
+export * from './BigNumber';
+export { CPUGraph } from './CPUGraph';
+export { MemoryGraph } from './MemoryGraph';
+export { StorageGraph } from './StorageGraph';
+export { TransferRateGraph } from './TransferRateGraph';
+export { ProjectTable } from './ProjectsTable';