From ed5290be86127d905b039971a8ecba5b808e2727 Mon Sep 17 00:00:00 2001 From: Christoph Kluge Date: Mon, 14 Jul 2025 18:12:34 +0200 Subject: [PATCH] adds new roofline component for job average based data - clickable, resource sized and duration colored bubbles --- web/frontend/src/Status.root.svelte | 9 +- .../generic/plots/NewBubbleRoofline.svelte | 739 ++++++++++++++++++ web/frontend/src/status/DevelDash.svelte | 164 ++++ 3 files changed, 911 insertions(+), 1 deletion(-) create mode 100644 web/frontend/src/generic/plots/NewBubbleRoofline.svelte create mode 100644 web/frontend/src/status/DevelDash.svelte diff --git a/web/frontend/src/Status.root.svelte b/web/frontend/src/Status.root.svelte index 297e675..ee8cde7 100644 --- a/web/frontend/src/Status.root.svelte +++ b/web/frontend/src/Status.root.svelte @@ -20,6 +20,7 @@ import UsageDash from "./status/UsageDash.svelte"; import NodeDash from "./status/NodeDash.svelte"; import StatisticsDash from "./status/StatisticsDash.svelte"; + import DevelDash from "./status/DevelDash.svelte"; /* Svelte 5 Props */ let { @@ -68,7 +69,13 @@ - + + + + + + + diff --git a/web/frontend/src/generic/plots/NewBubbleRoofline.svelte b/web/frontend/src/generic/plots/NewBubbleRoofline.svelte new file mode 100644 index 0000000..1c89433 --- /dev/null +++ b/web/frontend/src/generic/plots/NewBubbleRoofline.svelte @@ -0,0 +1,739 @@ + + + +{#if roofData != null} +
+{:else} + Cannot render roofline: No data! +{/if} \ No newline at end of file diff --git a/web/frontend/src/status/DevelDash.svelte b/web/frontend/src/status/DevelDash.svelte new file mode 100644 index 0000000..ea00803 --- /dev/null +++ b/web/frontend/src/status/DevelDash.svelte @@ -0,0 +1,164 @@ + + + + + +{#if $initq.data && $jobRoofQuery.data} + {#each $initq.data.clusters.find((c) => c.name == cluster).subClusters as subCluster, i} + + + Classic +
+ {#key $jobRoofQuery.data.jobsMetricStats} + {subCluster.name} Total: {$jobRoofQuery.data.jobsMetricStats.filter( + (data) => data.subCluster == subCluster.name, + ).length} Jobs + data.subCluster == subCluster.name, + ) + )} + /> + {/key} +
+ + + Bubble +
+ {#key $jobRoofQuery.data.jobsMetricStats} + {subCluster.name} Total: {$jobRoofQuery.data.jobsMetricStats.filter( + (data) => data.subCluster == subCluster.name, + ).length} Jobs + data.subCluster == subCluster.name, + ) + )} + jobsData={transformJobsStatsToInfo($jobRoofQuery?.data?.jobsMetricStats.filter( + (data) => data.subCluster == subCluster.name, + ) + )} + /> + {/key} +
+ +
+ {/each} +{/if}