add init context to nodeOverview, add additional key for plot rerender

This commit is contained in:
Christoph Kluge
2025-09-10 18:01:33 +02:00
parent d03e5b4562
commit 935fb238a4

View File

@@ -11,6 +11,7 @@
--> -->
<script> <script>
import { getContext } from "svelte";
import { queryStore, gql, getContextClient } from "@urql/svelte"; import { queryStore, gql, getContextClient } from "@urql/svelte";
import { Row, Col, Card, Spinner } from "@sveltestrap/sveltestrap"; import { Row, Col, Card, Spinner } from "@sveltestrap/sveltestrap";
import { checkMetricDisabled } from "../generic/utils.js"; import { checkMetricDisabled } from "../generic/utils.js";
@@ -27,6 +28,7 @@
} = $props(); } = $props();
/* Const Init */ /* Const Init */
const initialized = getContext("initialized");
const client = getContextClient(); const client = getContextClient();
/* Derived */ /* Derived */
@@ -72,11 +74,11 @@
}, },
})); }));
const mappedData = $derived(handleQueryData($nodesQuery?.data)); const mappedData = $derived(handleQueryData($initialized, $nodesQuery?.data));
const filteredData = $derived(mappedData.filter((h) => h.host.includes(hostnameFilter))); const filteredData = $derived(mappedData.filter((h) => h.host.includes(hostnameFilter)));
/* Functions */ /* Functions */
function handleQueryData(queryData) { function handleQueryData(isInitialized, queryData) {
let rawData = [] let rawData = []
if (queryData) { if (queryData) {
rawData = queryData.nodeMetrics.filter((h) => { rawData = queryData.nodeMetrics.filter((h) => {
@@ -96,11 +98,7 @@
data: h.metrics.filter( data: h.metrics.filter(
(m) => m?.name == selectedMetric && m.scope == "node", (m) => m?.name == selectedMetric && m.scope == "node",
), ),
disabled: checkMetricDisabled( disabled: isInitialized ? checkMetricDisabled(selectedMetric, cluster, h.subCluster) : null,
selectedMetric,
cluster,
h.subCluster,
),
})) }))
.sort((a, b) => a.host.localeCompare(b.host)) .sort((a, b) => a.host.localeCompare(b.host))
} }
@@ -124,6 +122,7 @@
{:else if filteredData?.length > 0} {:else if filteredData?.length > 0}
<!-- PlotGrid flattened into this component --> <!-- PlotGrid flattened into this component -->
<Row cols={{ xs: 1, sm: 2, md: 3, lg: ccconfig.plot_view_plotsPerRow}}> <Row cols={{ xs: 1, sm: 2, md: 3, lg: ccconfig.plot_view_plotsPerRow}}>
{#key selectedMetric}
{#each filteredData as item (item.host)} {#each filteredData as item (item.host)}
<Col class="px-1"> <Col class="px-1">
<h4 style="width: 100%; text-align: center;"> <h4 style="width: 100%; text-align: center;">
@@ -133,16 +132,16 @@
>{item.host} ({item.subCluster})</a >{item.host} ({item.subCluster})</a
> >
</h4> </h4>
{#key item?.disabled} {#if item.disabled === true}
{#if item?.disabled === true}
<Card body class="mx-3" color="info" <Card body class="mx-3" color="info"
>Metric disabled for subcluster <code >Metric disabled for subcluster <code
>{selectedMetric}:{item.subCluster}</code >{selectedMetric}:{item.subCluster}</code
></Card ></Card
> >
{:else if item?.disabled === false} {:else if item.disabled === false}
<!-- "No Data"-Warning included in MetricPlot-Component --> <!-- "No Data"-Warning included in MetricPlot-Component -->
<!-- #key: X-axis keeps last selected timerange otherwise --> <!-- #key: X-axis keeps last selected timerange otherwise -->
{#key item.data[0].metric.series[0].data.length}
<MetricPlot <MetricPlot
timestep={item.data[0].metric.timestep} timestep={item.data[0].metric.timestep}
series={item.data[0].metric.series} series={item.data[0].metric.series}
@@ -151,15 +150,15 @@
subCluster={item.subCluster} subCluster={item.subCluster}
forNode forNode
/> />
{:else}
<Card body class="mx-3"
>Metric Query Empty: Please Reload Page <code
>{selectedMetric}:{item.subCluster}</code
></Card
>
{/if}
{/key} {/key}
{:else if item.disabled === null}
<Card body class="mx-3" color="info">
Global Metric List Not Initialized
Can not determine {selectedMetric} availability: Please Reload Page
</Card>
{/if}
</Col> </Col>
{/each} {/each}
{/key}
</Row> </Row>
{/if} {/if}