Loading src/components/simulations/console/cduList.tsx +10 −10 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ const columns = [ "Rack Return Temperature (°C)", ]; export function CDUList({ metrics }: { metrics: CoolingCDU[] }) { export function CDUList({ metrics = []}: { metrics?: CoolingCDU[] }) { return ( <div className="col-start-1 col-end-8 row-start-4"> <ConsoleHeader>Power and Temperature</ConsoleHeader> Loading Loading @@ -43,31 +43,31 @@ export function CDUList({ metrics }: { metrics: CoolingCDU[] }) { {index + 1} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.rack_1_power.toFixed(1)} {cdu.rack_1_power?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.rack_2_power.toFixed(1)} {cdu.rack_2_power?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.rack_3_power.toFixed(1)} {cdu.rack_3_power?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.total_power.toFixed(1)} {cdu.total_power?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.total_loss.toFixed(1)} {cdu.total_loss?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-blue-500 dark:border-neutral-900"> {cdu.facility_supply_temp.toFixed(1)} {cdu.facility_supply_temp?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-red-500 dark:border-neutral-900"> {cdu.facility_return_temp.toFixed(1)} {cdu.facility_return_temp?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-blue-500 dark:border-neutral-900"> {cdu.rack_supply_temp.toFixed(1)} {cdu.rack_supply_temp?.toFixed(1)} </div> <div className=" text-red-500"> {cdu.rack_return_temp.toFixed(1)} {cdu.rack_return_temp?.toFixed(1)} </div> </div> ))} Loading src/components/simulations/console/power.tsx +2 −2 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ import { CoolingCEP } from "../../../models/CoolingCEP.model"; import { ConsoleHeader } from "../../shared/simulation/consoleHeader"; import { sumBy } from "lodash" export function Power({ cdus, cep }: { cdus: CoolingCDU[], cep: CoolingCEP }) { export function Power({ cdus = [], cep }: { cdus?: CoolingCDU[], cep?: CoolingCEP }) { const total_power = sumBy(cdus, c => c.total_power) const total_loss = sumBy(cdus, c => c.total_loss) return ( Loading Loading @@ -32,7 +32,7 @@ export function Power({ cdus, cep }: { cdus: CoolingCDU[], cep: CoolingCEP }) { {((total_loss / total_power) * 100).toFixed(2)}% </span> <span className="border-2 border-l-0 border-t-0 border-neutral-400 dark:border-neutral-900"> {cep.pue_output.toFixed(2)} {(cep?.pue_output ?? 0).toFixed(2)} </span> </div> </div> Loading src/components/simulations/console/pressureFlowRate.tsx +9 −18 Original line number Diff line number Diff line import { CoolingCDU } from "../../../models/CoolingCDU.model"; import { ConsoleHeader } from "../../shared/simulation/consoleHeader"; import { sumBy } from "lodash" const statistics = [ { name: "Work Done by CDUPs (kW)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.work_done_by_cdup, 0) ?? 0) / 25, sumBy(metrics, d => d.work_done_by_cdup ?? 0) / 25 }, { name: "Facility Supply Pressure (psig)", value: (metrics: CoolingCDU[]) => (metrics?.reduce( (prev, curr) => prev + curr.facility_supply_pressure, 0, ) ?? 0) / 25, sumBy(metrics, d => d.facility_supply_pressure ?? 0) / 25, }, { name: "Facility Return Pressure (psig)", value: (metrics: CoolingCDU[]) => (metrics?.reduce( (prev, curr) => prev + curr.facility_return_pressure, 0, ) ?? 0) / 25, sumBy(metrics, d => d.facility_return_pressure ?? 0) / 25, }, { name: "Facility Flowrate (gpm)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.facility_flowrate, 0) ?? 0) / 25, sumBy(metrics, d => d.facility_flowrate ?? 0) / 25, }, { name: "Rack Supply Pressure (psig)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.rack_supply_pressure, 0) ?? 0) / 25, sumBy(metrics, d => d.rack_supply_pressure ?? 0) / 25, }, { name: "Rack Return Pressure (psig)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.rack_return_pressure, 0) ?? 0) / 25, sumBy(metrics, d => d.rack_return_pressure ?? 0) / 25, }, { name: "Rack Flowrate (gpm)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.rack_flowrate, 0) ?? 0) / 25, sumBy(metrics, d => d.rack_flowrate ?? 0) / 25, }, ]; export function PressureFlowRate({ metrics }: { metrics: CoolingCDU[] }) { export function PressureFlowRate({ metrics = [] }: { metrics?: CoolingCDU[] }) { return ( <div className="col-start-1 col-end-8 row-start-2 row-end-4"> <ConsoleHeader>Pressure and Flow Rates</ConsoleHeader> Loading src/models/CoolingCDU.model.ts +11 −11 Original line number Diff line number Diff line Loading @@ -12,15 +12,15 @@ export interface CoolingCDU { rack_3_loss: number; total_loss: number; work_done_by_cdup: number; rack_return_temp: number; rack_supply_temp: number; rack_supply_pressure: number; rack_return_pressure: number; rack_flowrate: number; facility_return_temp: number; facility_supply_temp: number; facility_supply_pressure: number; facility_return_pressure: number; facility_flowrate: number; work_done_by_cdup?: number; rack_return_temp?: number; rack_supply_temp?: number; rack_supply_pressure?: number; rack_return_pressure?: number; rack_flowrate?: number; facility_return_temp?: number; facility_supply_temp?: number; facility_supply_pressure?: number; facility_return_pressure?: number; facility_flowrate?: number; } src/routes/simulations.$simulationId.console.tsx +10 −10 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ function SimulationConsoleView() { summarize: !currentTimestamp, }) const { data: cdus } = useReplay({ const { data: cdus, isLoading: cdusIsLoading } = useReplay({ sim: sim, query: (params) => simulationCoolingCDUQueryOptions(simulationId, params), timestamp: currentTimestamp, Loading @@ -42,7 +42,7 @@ function SimulationConsoleView() { summarize: !currentTimestamp, }) const { data: cep } = useReplay({ const { data: cep, isLoading: cepIsLoading } = useReplay({ sim: sim, query: (params) => simulationCoolingCEPQueryOptions(simulationId, params), timestamp: currentTimestamp, Loading @@ -50,7 +50,7 @@ function SimulationConsoleView() { summarize: !currentTimestamp, }) const { data: jobs } = useJobReplay({ const { data: jobs, isLoading: jobsIsLoading } = useJobReplay({ sim: sim, timestamp: currentTimestamp, stepInterval: search.playbackInterval, Loading @@ -62,17 +62,17 @@ function SimulationConsoleView() { {(sim && sim.progress_date == sim.start) ? ( <Message>No data available {sim.state == 'running' ? 'yet' : ''}</Message> ) : (<> {cdus ? ( <PressureFlowRate metrics={cdus.cdus} /> {!cdusIsLoading ? ( <PressureFlowRate metrics={cdus?.cdus} /> ): (<LoadingSpinner/>)} {jobs ? ( {!jobsIsLoading ? ( <JobQueue jobs={jobs} /> ) : (<LoadingSpinner/>)} {cdus ? ( <CDUList metrics={cdus.cdus} /> {!cdusIsLoading ? ( <CDUList metrics={cdus?.cdus} /> ) : (<LoadingSpinner/>)} {cdus && cep ? ( <Power cdus={cdus.cdus} cep={cep}/> {!cdusIsLoading && !cepIsLoading ? ( <Power cdus={cdus?.cdus} cep={cep}/> ) : (<LoadingSpinner/>)} {schedulerStatistics ? ( <Scheduler statistics={schedulerStatistics} /> Loading Loading
src/components/simulations/console/cduList.tsx +10 −10 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ const columns = [ "Rack Return Temperature (°C)", ]; export function CDUList({ metrics }: { metrics: CoolingCDU[] }) { export function CDUList({ metrics = []}: { metrics?: CoolingCDU[] }) { return ( <div className="col-start-1 col-end-8 row-start-4"> <ConsoleHeader>Power and Temperature</ConsoleHeader> Loading Loading @@ -43,31 +43,31 @@ export function CDUList({ metrics }: { metrics: CoolingCDU[] }) { {index + 1} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.rack_1_power.toFixed(1)} {cdu.rack_1_power?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.rack_2_power.toFixed(1)} {cdu.rack_2_power?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.rack_3_power.toFixed(1)} {cdu.rack_3_power?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.total_power.toFixed(1)} {cdu.total_power?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-green-600 dark:border-neutral-900 dark:text-green-500"> {cdu.total_loss.toFixed(1)} {cdu.total_loss?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-blue-500 dark:border-neutral-900"> {cdu.facility_supply_temp.toFixed(1)} {cdu.facility_supply_temp?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-red-500 dark:border-neutral-900"> {cdu.facility_return_temp.toFixed(1)} {cdu.facility_return_temp?.toFixed(1)} </div> <div className="border-r-2 border-neutral-400 text-blue-500 dark:border-neutral-900"> {cdu.rack_supply_temp.toFixed(1)} {cdu.rack_supply_temp?.toFixed(1)} </div> <div className=" text-red-500"> {cdu.rack_return_temp.toFixed(1)} {cdu.rack_return_temp?.toFixed(1)} </div> </div> ))} Loading
src/components/simulations/console/power.tsx +2 −2 Original line number Diff line number Diff line Loading @@ -3,7 +3,7 @@ import { CoolingCEP } from "../../../models/CoolingCEP.model"; import { ConsoleHeader } from "../../shared/simulation/consoleHeader"; import { sumBy } from "lodash" export function Power({ cdus, cep }: { cdus: CoolingCDU[], cep: CoolingCEP }) { export function Power({ cdus = [], cep }: { cdus?: CoolingCDU[], cep?: CoolingCEP }) { const total_power = sumBy(cdus, c => c.total_power) const total_loss = sumBy(cdus, c => c.total_loss) return ( Loading Loading @@ -32,7 +32,7 @@ export function Power({ cdus, cep }: { cdus: CoolingCDU[], cep: CoolingCEP }) { {((total_loss / total_power) * 100).toFixed(2)}% </span> <span className="border-2 border-l-0 border-t-0 border-neutral-400 dark:border-neutral-900"> {cep.pue_output.toFixed(2)} {(cep?.pue_output ?? 0).toFixed(2)} </span> </div> </div> Loading
src/components/simulations/console/pressureFlowRate.tsx +9 −18 Original line number Diff line number Diff line import { CoolingCDU } from "../../../models/CoolingCDU.model"; import { ConsoleHeader } from "../../shared/simulation/consoleHeader"; import { sumBy } from "lodash" const statistics = [ { name: "Work Done by CDUPs (kW)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.work_done_by_cdup, 0) ?? 0) / 25, sumBy(metrics, d => d.work_done_by_cdup ?? 0) / 25 }, { name: "Facility Supply Pressure (psig)", value: (metrics: CoolingCDU[]) => (metrics?.reduce( (prev, curr) => prev + curr.facility_supply_pressure, 0, ) ?? 0) / 25, sumBy(metrics, d => d.facility_supply_pressure ?? 0) / 25, }, { name: "Facility Return Pressure (psig)", value: (metrics: CoolingCDU[]) => (metrics?.reduce( (prev, curr) => prev + curr.facility_return_pressure, 0, ) ?? 0) / 25, sumBy(metrics, d => d.facility_return_pressure ?? 0) / 25, }, { name: "Facility Flowrate (gpm)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.facility_flowrate, 0) ?? 0) / 25, sumBy(metrics, d => d.facility_flowrate ?? 0) / 25, }, { name: "Rack Supply Pressure (psig)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.rack_supply_pressure, 0) ?? 0) / 25, sumBy(metrics, d => d.rack_supply_pressure ?? 0) / 25, }, { name: "Rack Return Pressure (psig)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.rack_return_pressure, 0) ?? 0) / 25, sumBy(metrics, d => d.rack_return_pressure ?? 0) / 25, }, { name: "Rack Flowrate (gpm)", value: (metrics: CoolingCDU[]) => (metrics?.reduce((prev, curr) => prev + curr.rack_flowrate, 0) ?? 0) / 25, sumBy(metrics, d => d.rack_flowrate ?? 0) / 25, }, ]; export function PressureFlowRate({ metrics }: { metrics: CoolingCDU[] }) { export function PressureFlowRate({ metrics = [] }: { metrics?: CoolingCDU[] }) { return ( <div className="col-start-1 col-end-8 row-start-2 row-end-4"> <ConsoleHeader>Pressure and Flow Rates</ConsoleHeader> Loading
src/models/CoolingCDU.model.ts +11 −11 Original line number Diff line number Diff line Loading @@ -12,15 +12,15 @@ export interface CoolingCDU { rack_3_loss: number; total_loss: number; work_done_by_cdup: number; rack_return_temp: number; rack_supply_temp: number; rack_supply_pressure: number; rack_return_pressure: number; rack_flowrate: number; facility_return_temp: number; facility_supply_temp: number; facility_supply_pressure: number; facility_return_pressure: number; facility_flowrate: number; work_done_by_cdup?: number; rack_return_temp?: number; rack_supply_temp?: number; rack_supply_pressure?: number; rack_return_pressure?: number; rack_flowrate?: number; facility_return_temp?: number; facility_supply_temp?: number; facility_supply_pressure?: number; facility_return_pressure?: number; facility_flowrate?: number; }
src/routes/simulations.$simulationId.console.tsx +10 −10 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ function SimulationConsoleView() { summarize: !currentTimestamp, }) const { data: cdus } = useReplay({ const { data: cdus, isLoading: cdusIsLoading } = useReplay({ sim: sim, query: (params) => simulationCoolingCDUQueryOptions(simulationId, params), timestamp: currentTimestamp, Loading @@ -42,7 +42,7 @@ function SimulationConsoleView() { summarize: !currentTimestamp, }) const { data: cep } = useReplay({ const { data: cep, isLoading: cepIsLoading } = useReplay({ sim: sim, query: (params) => simulationCoolingCEPQueryOptions(simulationId, params), timestamp: currentTimestamp, Loading @@ -50,7 +50,7 @@ function SimulationConsoleView() { summarize: !currentTimestamp, }) const { data: jobs } = useJobReplay({ const { data: jobs, isLoading: jobsIsLoading } = useJobReplay({ sim: sim, timestamp: currentTimestamp, stepInterval: search.playbackInterval, Loading @@ -62,17 +62,17 @@ function SimulationConsoleView() { {(sim && sim.progress_date == sim.start) ? ( <Message>No data available {sim.state == 'running' ? 'yet' : ''}</Message> ) : (<> {cdus ? ( <PressureFlowRate metrics={cdus.cdus} /> {!cdusIsLoading ? ( <PressureFlowRate metrics={cdus?.cdus} /> ): (<LoadingSpinner/>)} {jobs ? ( {!jobsIsLoading ? ( <JobQueue jobs={jobs} /> ) : (<LoadingSpinner/>)} {cdus ? ( <CDUList metrics={cdus.cdus} /> {!cdusIsLoading ? ( <CDUList metrics={cdus?.cdus} /> ) : (<LoadingSpinner/>)} {cdus && cep ? ( <Power cdus={cdus.cdus} cep={cep}/> {!cdusIsLoading && !cepIsLoading ? ( <Power cdus={cdus?.cdus} cep={cep}/> ) : (<LoadingSpinner/>)} {schedulerStatistics ? ( <Scheduler statistics={schedulerStatistics} /> Loading