#!/usr/bin/env bash set -euo pipefail echo "[1/10] Creating Monitoring Workspace..." mkdir -p services/monitoring mkdir -p hooks mkdir -p components/monitoring echo "[2/10] Installing..." npm install chart.js react-chartjs-2 cat > services/monitoring/client.js <<'EOC' import api from "../api"; const monitoring={ overview:()=>api.get("/api/monitoring/overview"), metrics:()=>api.get("/api/monitoring/metrics"), system:()=>api.get("/api/system"), logs:()=>api.get("/api/logs"), agents:()=>api.get("/api/agents"), containers:()=>api.get("/api/docker/containers"), pods:()=>api.get("/api/kubernetes/pods"), health:()=>api.get("/health") }; export default monitoring; EOC cat > hooks/useMonitoring.js <<'EOC' "use client"; import {useEffect,useState} from "react"; import monitoring from "../services/monitoring/client"; export default function useMonitoring(interval=5000){ const [data,setData]=useState({}); const [loading,setLoading]=useState(true); async function refresh(){ setLoading(true); try{ const [ overview, metrics, system, health ]=await Promise.all([ monitoring.overview(), monitoring.metrics(), monitoring.system(), monitoring.health() ]); setData({ overview:overview.data, metrics:metrics.data, system:system.data, health:health.data }); }finally{ setLoading(false); } } useEffect(()=>{ refresh(); const id=setInterval(refresh,interval); return()=>clearInterval(id); },[interval]); return{ loading, data, refresh }; } EOC cat > components/monitoring/MonitoringWorkspace.jsx <<'EOC' "use client"; import useMonitoring from "../../hooks/useMonitoring"; export default function MonitoringWorkspace(){ const {loading,data}=useMonitoring(); return(
{loading ? "Loading..." : JSON.stringify(data,null,2)}