From e94b2505414e78d0f6c464b821082430cda25384 Mon Sep 17 00:00:00 2001 From: Christoph Kluge Date: Thu, 26 Jun 2025 12:29:48 +0200 Subject: [PATCH] Migrate nodeList subcomponents --- web/frontend/src/generic/PlotGrid.svelte | 22 ++++----- .../generic/select/DoubleRangeSlider.svelte | 5 +++ .../src/systems/nodelist/NodeInfo.svelte | 35 +++++++++------ .../src/systems/nodelist/NodeListRow.svelte | 45 ++++++++++--------- 4 files changed, 62 insertions(+), 45 deletions(-) diff --git a/web/frontend/src/generic/PlotGrid.svelte b/web/frontend/src/generic/PlotGrid.svelte index 213041e..3647344 100644 --- a/web/frontend/src/generic/PlotGrid.svelte +++ b/web/frontend/src/generic/PlotGrid.svelte @@ -6,18 +6,18 @@ - `items [Any]`: List of plot components to render --> - diff --git a/web/frontend/src/generic/select/DoubleRangeSlider.svelte b/web/frontend/src/generic/select/DoubleRangeSlider.svelte index 0022673..7554bdf 100644 --- a/web/frontend/src/generic/select/DoubleRangeSlider.svelte +++ b/web/frontend/src/generic/select/DoubleRangeSlider.svelte @@ -18,6 +18,7 @@ Changes #2: Rewritten for Svelte 5, removed bodyHandler --> diff --git a/web/frontend/src/systems/nodelist/NodeListRow.svelte b/web/frontend/src/systems/nodelist/NodeListRow.svelte index 7adb282..571ca63 100644 --- a/web/frontend/src/systems/nodelist/NodeListRow.svelte +++ b/web/frontend/src/systems/nodelist/NodeListRow.svelte @@ -18,10 +18,14 @@ import MetricPlot from "../../generic/plots/MetricPlot.svelte"; import NodeInfo from "./NodeInfo.svelte"; - export let cluster; - export let nodeData; - export let selectedMetrics; + /* Svelte 5 Props */ + let { + cluster, + nodeData, + selectedMetrics, + } = $props(); + /* Const Init */ const client = getContextClient(); const paging = { itemsPerPage: 50, page: 1 }; const sorting = { field: "startTime", type: "col", order: "DESC" }; @@ -30,7 +34,6 @@ { node: { contains: nodeData.host } }, { state: ["running"] }, ]; - const nodeJobsQuery = gql` query ( $filter: [JobFilter!]! @@ -53,13 +56,19 @@ } `; - $: nodeJobsData = queryStore({ - client: client, - query: nodeJobsQuery, - variables: { paging, sorting, filter }, - }); + /* Derived */ + const nodeJobsData = $derived(queryStore({ + client: client, + query: nodeJobsQuery, + variables: { paging, sorting, filter }, + }) + ); - // Helper + let extendedLegendData = $derived($nodeJobsData?.data ? buildExtendedLegend() : null); + let refinedData = $derived(nodeData?.metrics ? sortAndSelectScope(nodeData.metrics) : null); + let dataHealth = $derived(refinedData.filter((rd) => rd.disabled === false).map((enabled) => (enabled.data.metric.series.length > 0))); + + /* Functions */ const selectScope = (nodeMetrics) => nodeMetrics.reduce( (a, b) => @@ -89,15 +98,8 @@ } }); - let refinedData; - let dataHealth; - $: if (nodeData?.metrics) { - refinedData = sortAndSelectScope(nodeData?.metrics) - dataHealth = refinedData.filter((rd) => rd.disabled === false).map((enabled) => (enabled.data.metric.series.length > 0)) - } - - let extendedLegendData = null; - $: if ($nodeJobsData?.data) { + function buildExtendedLegend() { + let pendingExtendedLegendData = null // Build Extended for allocated nodes [Commented: Only Build extended Legend For Shared Nodes] if ($nodeJobsData.data.jobs.count >= 1) { // "&& !$nodeJobsData.data.jobs.items[0].exclusive)" const accSet = Array.from(new Set($nodeJobsData.data.jobs.items @@ -107,11 +109,11 @@ ) )).flat(2) - extendedLegendData = {} + pendingExtendedLegendData = {}; for (const accId of accSet) { const matchJob = $nodeJobsData.data.jobs.items.find((i) => i.resources.find((r) => r.accelerators.includes(accId))) const matchUser = matchJob?.user ? matchJob.user : null - extendedLegendData[accId] = { + pendingExtendedLegendData[accId] = { user: (scrambleNames && matchUser) ? scramble(matchUser) : (matchUser ? matchUser : '-'), @@ -120,6 +122,7 @@ } // Theoretically extendable for hwthreadIDs } + return pendingExtendedLegendData; }