mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-07-07 17:00:36 +02:00
svelte state_referenced_locally warning fixes
- change to derived where possible - suppress warning elsewhere - discussion here: sveltejs/svelte/issues/17289
This commit is contained in:
@@ -43,11 +43,14 @@
|
|||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
// By default, look at the jobs of the last 6 hours:
|
// By default, look at the jobs of the last 6 hours:
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
if (filterPresets?.startTime == null) {
|
if (filterPresets?.startTime == null) {
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
if (filterPresets == null) filterPresets = {};
|
if (filterPresets == null) filterPresets = {};
|
||||||
let now = new Date(Date.now());
|
let now = new Date(Date.now());
|
||||||
let hourAgo = new Date(now);
|
let hourAgo = new Date(now);
|
||||||
hourAgo.setHours(hourAgo.getHours() - 6);
|
hourAgo.setHours(hourAgo.getHours() - 6);
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
filterPresets.startTime = {
|
filterPresets.startTime = {
|
||||||
from: hourAgo.toISOString(),
|
from: hourAgo.toISOString(),
|
||||||
to: now.toISOString(),
|
to: now.toISOString(),
|
||||||
|
|||||||
@@ -53,7 +53,9 @@
|
|||||||
const views = [
|
const views = [
|
||||||
{
|
{
|
||||||
title: "My Jobs",
|
title: "My Jobs",
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
requiredRole: roles.user,
|
requiredRole: roles.user,
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
href: `/monitoring/user/${username}`,
|
href: `/monitoring/user/${username}`,
|
||||||
icon: "bar-chart-line",
|
icon: "bar-chart-line",
|
||||||
perCluster: false,
|
perCluster: false,
|
||||||
@@ -61,7 +63,9 @@
|
|||||||
menu: "none",
|
menu: "none",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
title: jobsTitle.get(authlevel),
|
title: jobsTitle.get(authlevel),
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
requiredRole: roles.user,
|
requiredRole: roles.user,
|
||||||
href: `/monitoring/jobs/`,
|
href: `/monitoring/jobs/`,
|
||||||
icon: "card-list",
|
icon: "card-list",
|
||||||
@@ -71,6 +75,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Tags",
|
title: "Tags",
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
requiredRole: roles.user,
|
requiredRole: roles.user,
|
||||||
href: "/monitoring/tags/",
|
href: "/monitoring/tags/",
|
||||||
icon: "tags",
|
icon: "tags",
|
||||||
@@ -79,7 +84,9 @@
|
|||||||
menu: "Jobs",
|
menu: "Jobs",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
title: usersTitle.get(authlevel),
|
title: usersTitle.get(authlevel),
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
requiredRole: roles.manager,
|
requiredRole: roles.manager,
|
||||||
href: "/monitoring/users/",
|
href: "/monitoring/users/",
|
||||||
icon: "people",
|
icon: "people",
|
||||||
@@ -88,7 +95,9 @@
|
|||||||
menu: "Groups",
|
menu: "Groups",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
title: projectsTitle.get(authlevel),
|
title: projectsTitle.get(authlevel),
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
requiredRole: roles.manager,
|
requiredRole: roles.manager,
|
||||||
href: "/monitoring/projects/",
|
href: "/monitoring/projects/",
|
||||||
icon: "journals",
|
icon: "journals",
|
||||||
@@ -98,6 +107,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Nodes",
|
title: "Nodes",
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
requiredRole: roles.support,
|
requiredRole: roles.support,
|
||||||
href: "/monitoring/systems/",
|
href: "/monitoring/systems/",
|
||||||
icon: "hdd-rack",
|
icon: "hdd-rack",
|
||||||
@@ -107,6 +117,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Analysis",
|
title: "Analysis",
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
requiredRole: roles.support,
|
requiredRole: roles.support,
|
||||||
href: "/monitoring/analysis/",
|
href: "/monitoring/analysis/",
|
||||||
icon: "graph-up",
|
icon: "graph-up",
|
||||||
@@ -116,6 +127,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Status",
|
title: "Status",
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
requiredRole: roles.admin,
|
requiredRole: roles.admin,
|
||||||
href: "/monitoring/status/",
|
href: "/monitoring/status/",
|
||||||
icon: "clipboard-data",
|
icon: "clipboard-data",
|
||||||
|
|||||||
@@ -52,6 +52,7 @@
|
|||||||
|
|
||||||
/* Const Init */
|
/* Const Init */
|
||||||
// Important: init() needs to be first const declaration or contextclient will not be initialized before "const client = ..."
|
// Important: init() needs to be first const declaration or contextclient will not be initialized before "const client = ..."
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
const { query: initq } = init(`
|
const { query: initq } = init(`
|
||||||
job(id: "${dbid}") {
|
job(id: "${dbid}") {
|
||||||
id, jobId, user, project, cluster, startTime,
|
id, jobId, user, project, cluster, startTime,
|
||||||
|
|||||||
@@ -37,7 +37,6 @@
|
|||||||
/* Const Init */
|
/* Const Init */
|
||||||
const { query: initq } = init();
|
const { query: initq } = init();
|
||||||
const ccconfig = getContext("cc-config");
|
const ccconfig = getContext("cc-config");
|
||||||
const presetProject = filterPresets?.project ? filterPresets.project : ""
|
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let filterComponent = $state(); // see why here: https://stackoverflow.com/questions/58287729/how-can-i-export-a-function-from-a-svelte-component-that-changes-a-value-in-the
|
let filterComponent = $state(); // see why here: https://stackoverflow.com/questions/58287729/how-can-i-export-a-function-from-a-svelte-component-that-changes-a-value-in-the
|
||||||
@@ -51,13 +50,16 @@
|
|||||||
let showCompare = $state(false);
|
let showCompare = $state(false);
|
||||||
let isMetricsSelectionOpen = $state(false);
|
let isMetricsSelectionOpen = $state(false);
|
||||||
let sorting = $state({ field: "startTime", type: "col", order: "DESC" });
|
let sorting = $state({ field: "startTime", type: "col", order: "DESC" });
|
||||||
let selectedCluster = $state(filterPresets?.cluster ? filterPresets.cluster : null);
|
|
||||||
let metrics = $state(filterPresets.cluster
|
/* Derived */
|
||||||
|
const presetProject = $derived(filterPresets?.project ? filterPresets.project : "");
|
||||||
|
let selectedCluster = $derived(filterPresets?.cluster ? filterPresets.cluster : null);
|
||||||
|
let metrics = $derived(filterPresets.cluster
|
||||||
? ccconfig[`metricConfig_jobListMetrics:${filterPresets.cluster}`] ||
|
? ccconfig[`metricConfig_jobListMetrics:${filterPresets.cluster}`] ||
|
||||||
ccconfig.metricConfig_jobListMetrics
|
ccconfig.metricConfig_jobListMetrics
|
||||||
: ccconfig.metricConfig_jobListMetrics
|
: ccconfig.metricConfig_jobListMetrics
|
||||||
);
|
);
|
||||||
let showFootprint = $state(filterPresets.cluster
|
let showFootprint = $derived(filterPresets.cluster
|
||||||
? !!ccconfig[`jobList_showFootprint:${filterPresets.cluster}`]
|
? !!ccconfig[`jobList_showFootprint:${filterPresets.cluster}`]
|
||||||
: !!ccconfig.jobList_showFootprint
|
: !!ccconfig.jobList_showFootprint
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -37,12 +37,6 @@
|
|||||||
filterPresets
|
filterPresets
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* Validate Type */
|
|
||||||
console.assert(
|
|
||||||
type == "USER" || type == "PROJECT",
|
|
||||||
"Invalid list type provided!",
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Const Init */
|
/* Const Init */
|
||||||
const {} = init();
|
const {} = init();
|
||||||
const client = getContextClient();
|
const client = getContextClient();
|
||||||
|
|||||||
@@ -54,11 +54,6 @@
|
|||||||
const nowEpoch = Date.now();
|
const nowEpoch = Date.now();
|
||||||
const paging = { itemsPerPage: 50, page: 1 };
|
const paging = { itemsPerPage: 50, page: 1 };
|
||||||
const sorting = { field: "startTime", type: "col", order: "DESC" };
|
const sorting = { field: "startTime", type: "col", order: "DESC" };
|
||||||
const filter = [
|
|
||||||
{ cluster: { eq: cluster } },
|
|
||||||
{ node: { contains: hostname } },
|
|
||||||
{ state: ["running"] },
|
|
||||||
];
|
|
||||||
const client = getContextClient();
|
const client = getContextClient();
|
||||||
const nodeMetricsQuery = gql`
|
const nodeMetricsQuery = gql`
|
||||||
query ($cluster: String!, $nodes: [String!], $from: Time!, $to: Time!) {
|
query ($cluster: String!, $nodes: [String!], $from: Time!, $to: Time!) {
|
||||||
@@ -111,11 +106,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let from = $state(presetFrom ? presetFrom : new Date(nowEpoch - (4 * 3600 * 1000)));
|
let from = $state(presetFrom ? presetFrom : new Date(nowEpoch - (4 * 3600 * 1000)));
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let to = $state(presetTo ? presetTo : new Date(nowEpoch));
|
let to = $state(presetTo ? presetTo : new Date(nowEpoch));
|
||||||
let systemUnits = $state({});
|
let systemUnits = $state({});
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
const filter = $derived([
|
||||||
|
{ cluster: { eq: cluster } },
|
||||||
|
{ node: { contains: hostname } },
|
||||||
|
{ state: ["running"] },
|
||||||
|
]);
|
||||||
const nodeMetricsData = $derived(queryStore({
|
const nodeMetricsData = $derived(queryStore({
|
||||||
client: client,
|
client: client,
|
||||||
query: nodeMetricsQuery,
|
query: nodeMetricsQuery,
|
||||||
|
|||||||
@@ -51,7 +51,6 @@
|
|||||||
/* Const Init */
|
/* Const Init */
|
||||||
const { query: initq } = init();
|
const { query: initq } = init();
|
||||||
const client = getContextClient();
|
const client = getContextClient();
|
||||||
const displayNodeOverview = (displayType === 'OVERVIEW');
|
|
||||||
const ccconfig = getContext("cc-config");
|
const ccconfig = getContext("cc-config");
|
||||||
const initialized = getContext("initialized");
|
const initialized = getContext("initialized");
|
||||||
const globalMetrics = getContext("globalMetrics");
|
const globalMetrics = getContext("globalMetrics");
|
||||||
@@ -66,7 +65,9 @@
|
|||||||
let timeoutId = null;
|
let timeoutId = null;
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let to = $state(presetTo || new Date(Date.now()));
|
let to = $state(presetTo || new Date(Date.now()));
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let from = $state(presetFrom || new Date(nowDate.setHours(nowDate.getHours() - 4)));
|
let from = $state(presetFrom || new Date(nowDate.setHours(nowDate.getHours() - 4)));
|
||||||
let selectedResolution = $state(resampleConfig ? resampleDefault : 0);
|
let selectedResolution = $state(resampleConfig ? resampleDefault : 0);
|
||||||
let hostnameFilter = $state("");
|
let hostnameFilter = $state("");
|
||||||
@@ -75,6 +76,7 @@
|
|||||||
let isMetricsSelectionOpen = $state(false);
|
let isMetricsSelectionOpen = $state(false);
|
||||||
|
|
||||||
/* Derived States */
|
/* Derived States */
|
||||||
|
const displayNodeOverview = $derived((displayType === 'OVERVIEW'));
|
||||||
const systemMetrics = $derived($initialized ? [...globalMetrics.filter((gm) => gm?.availability.find((av) => av.cluster == cluster))] : []);
|
const systemMetrics = $derived($initialized ? [...globalMetrics.filter((gm) => gm?.availability.find((av) => av.cluster == cluster))] : []);
|
||||||
const presetSystemUnits = $derived(loadUnits(systemMetrics));
|
const presetSystemUnits = $derived(loadUnits(systemMetrics));
|
||||||
let selectedMetric = $derived.by(() => {
|
let selectedMetric = $derived.by(() => {
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let pendingChange = $state("none");
|
let pendingChange = $state("none");
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let tagmap = $state(presetTagmap);
|
let tagmap = $state(presetTagmap);
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
|
|||||||
@@ -64,17 +64,7 @@
|
|||||||
let isSortingOpen = $state(false);
|
let isSortingOpen = $state(false);
|
||||||
let isMetricsSelectionOpen = $state(false);
|
let isMetricsSelectionOpen = $state(false);
|
||||||
let sorting = $state({ field: "startTime", type: "col", order: "DESC" });
|
let sorting = $state({ field: "startTime", type: "col", order: "DESC" });
|
||||||
let selectedCluster = $state(filterPresets?.cluster ? filterPresets.cluster : null);
|
|
||||||
let selectedHistogramsBuffer = $state({ all: (ccconfig['userView_histogramMetrics'] || []) })
|
let selectedHistogramsBuffer = $state({ all: (ccconfig['userView_histogramMetrics'] || []) })
|
||||||
let metrics = $state(filterPresets.cluster
|
|
||||||
? ccconfig[`metricConfig_jobListMetrics:${filterPresets.cluster}`] ||
|
|
||||||
ccconfig.metricConfig_jobListMetrics
|
|
||||||
: ccconfig.metricConfig_jobListMetrics
|
|
||||||
);
|
|
||||||
let showFootprint = $state(filterPresets.cluster
|
|
||||||
? !!ccconfig[`jobList_showFootprint:${filterPresets.cluster}`]
|
|
||||||
: !!ccconfig.jobList_showFootprint
|
|
||||||
);
|
|
||||||
|
|
||||||
// Histogram Vars
|
// Histogram Vars
|
||||||
let isHistogramSelectionOpen = $state(false);
|
let isHistogramSelectionOpen = $state(false);
|
||||||
@@ -88,7 +78,17 @@
|
|||||||
// let filterBuffer = $state([]);
|
// let filterBuffer = $state([]);
|
||||||
// let matchedCompareJobs = $state(0);
|
// let matchedCompareJobs = $state(0);
|
||||||
|
|
||||||
/* Derived Vars */
|
/* Derived */
|
||||||
|
let selectedCluster = $derived(filterPresets?.cluster ? filterPresets.cluster : null);
|
||||||
|
let metrics = $derived(filterPresets.cluster
|
||||||
|
? ccconfig[`metricConfig_jobListMetrics:${filterPresets.cluster}`] ||
|
||||||
|
ccconfig.metricConfig_jobListMetrics
|
||||||
|
: ccconfig.metricConfig_jobListMetrics
|
||||||
|
);
|
||||||
|
let showFootprint = $derived(filterPresets.cluster
|
||||||
|
? !!ccconfig[`jobList_showFootprint:${filterPresets.cluster}`]
|
||||||
|
: !!ccconfig.jobList_showFootprint
|
||||||
|
);
|
||||||
let selectedHistograms = $derived(selectedCluster ? selectedHistogramsBuffer[selectedCluster] : selectedHistogramsBuffer['all']);
|
let selectedHistograms = $derived(selectedCluster ? selectedHistogramsBuffer[selectedCluster] : selectedHistogramsBuffer['all']);
|
||||||
let stats = $derived(
|
let stats = $derived(
|
||||||
queryStore({
|
queryStore({
|
||||||
|
|||||||
@@ -49,11 +49,13 @@
|
|||||||
/* State Init */
|
/* State Init */
|
||||||
let isHistogramConfigOpen = $state(false);
|
let isHistogramConfigOpen = $state(false);
|
||||||
let isScatterPlotConfigOpen = $state(false);
|
let isScatterPlotConfigOpen = $state(false);
|
||||||
let metricsInHistograms = $state(presetMetricsInHistograms);
|
|
||||||
let metricsInScatterplots = $state(presetMetricsInScatterplots);
|
|
||||||
let selectedMetric1 = $state(null);
|
let selectedMetric1 = $state(null);
|
||||||
let selectedMetric2 = $state(null);
|
let selectedMetric2 = $state(null);
|
||||||
|
|
||||||
|
/* Derived */
|
||||||
|
let metricsInHistograms = $derived(presetMetricsInHistograms);
|
||||||
|
let metricsInScatterplots = $derived(presetMetricsInScatterplots);
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
function updateConfiguration(data) {
|
function updateConfiguration(data) {
|
||||||
updateConfigurationMutation({
|
updateConfigurationMutation({
|
||||||
|
|||||||
@@ -28,8 +28,8 @@
|
|||||||
updateSetting
|
updateSetting
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* State Init */
|
/* Derived */
|
||||||
let activeRow = $state(JSON.stringify(config?.plotConfiguration_colorScheme));
|
let activeRow = $derived(JSON.stringify(config?.plotConfiguration_colorScheme));
|
||||||
|
|
||||||
/* Const Init */
|
/* Const Init */
|
||||||
const colorSchemes = {
|
const colorSchemes = {
|
||||||
|
|||||||
@@ -89,6 +89,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let filters = $state({
|
let filters = $state({
|
||||||
dbId: filterPresets.dbId || [],
|
dbId: filterPresets.dbId || [],
|
||||||
jobId: filterPresets.jobId || "",
|
jobId: filterPresets.jobId || "",
|
||||||
|
|||||||
@@ -64,10 +64,10 @@
|
|||||||
let plotSync = uPlot.sync("compareJobsView");
|
let plotSync = uPlot.sync("compareJobsView");
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let filter = $state([...filterBuffer] || []);
|
|
||||||
let tableJobIDFilter = $state("");
|
let tableJobIDFilter = $state("");
|
||||||
|
|
||||||
/* Derived*/
|
/* Derived*/
|
||||||
|
let filter = $derived([...filterBuffer] || []);
|
||||||
const compareData = $derived(queryStore({
|
const compareData = $derived(queryStore({
|
||||||
client: client,
|
client: client,
|
||||||
query: compareQuery,
|
query: compareQuery,
|
||||||
|
|||||||
@@ -99,13 +99,13 @@
|
|||||||
/* State Init */
|
/* State Init */
|
||||||
let headerPaddingTop = $state(0);
|
let headerPaddingTop = $state(0);
|
||||||
let jobs = $state([]);
|
let jobs = $state([]);
|
||||||
let filter = $state([...filterBuffer]);
|
|
||||||
let page = $state(1);
|
let page = $state(1);
|
||||||
let itemsPerPage = $state(usePaging ? (ccconfig?.jobList_jobsPerPage || 10) : 10);
|
let itemsPerPage = $state(usePaging ? (ccconfig?.jobList_jobsPerPage || 10) : 10);
|
||||||
let triggerMetricRefresh = $state(false);
|
let triggerMetricRefresh = $state(false);
|
||||||
let tableWidth = $state(0);
|
let tableWidth = $state(0);
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
let filter = $derived([...filterBuffer]);
|
||||||
let paging = $derived({ itemsPerPage, page });
|
let paging = $derived({ itemsPerPage, page });
|
||||||
const plotWidth = $derived.by(() => {
|
const plotWidth = $derived.by(() => {
|
||||||
return Math.floor(
|
return Math.floor(
|
||||||
|
|||||||
@@ -34,9 +34,9 @@
|
|||||||
const clusters = getContext("clusters");
|
const clusters = getContext("clusters");
|
||||||
const initialized = getContext("initialized");
|
const initialized = getContext("initialized");
|
||||||
|
|
||||||
/* State Init */
|
/* Derived */
|
||||||
let pendingCluster = $state(presetCluster);
|
let pendingCluster = $derived(presetCluster);
|
||||||
let pendingPartition = $state(presetPartition);
|
let pendingPartition = $derived(presetPartition);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Modal {isOpen} toggle={() => (isOpen = !isOpen)}>
|
<Modal {isOpen} toggle={() => (isOpen = !isOpen)}>
|
||||||
|
|||||||
@@ -31,14 +31,13 @@
|
|||||||
setFilter
|
setFilter
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* State Init */
|
/* Derived */
|
||||||
let pendingDuration = $state(presetDuration);
|
let pendingDuration = $derived(presetDuration);
|
||||||
let lessState = $state(secsToHoursAndMins(presetDuration?.lessThan));
|
let lessState = $derived(secsToHoursAndMins(presetDuration?.lessThan));
|
||||||
let moreState = $state(secsToHoursAndMins(presetDuration?.moreThan));
|
let moreState = $derived(secsToHoursAndMins(presetDuration?.moreThan));
|
||||||
let fromState = $state(secsToHoursAndMins(presetDuration?.from));
|
let fromState = $derived(secsToHoursAndMins(presetDuration?.from));
|
||||||
let toState = $state(secsToHoursAndMins(presetDuration?.to));
|
let toState = $derived(secsToHoursAndMins(presetDuration?.to));
|
||||||
|
|
||||||
/* Derived Init */
|
|
||||||
const lessDisabled = $derived(
|
const lessDisabled = $derived(
|
||||||
moreState.hours !== 0 ||
|
moreState.hours !== 0 ||
|
||||||
moreState.mins !== 0 ||
|
moreState.mins !== 0 ||
|
||||||
|
|||||||
@@ -28,8 +28,8 @@
|
|||||||
setFilter,
|
setFilter,
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* State Init */
|
/* Derived */
|
||||||
let energyState = $state(presetEnergy);
|
let energyState = $derived(presetEnergy);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Modal {isOpen} toggle={() => (isOpen = !isOpen)}>
|
<Modal {isOpen} toggle={() => (isOpen = !isOpen)}>
|
||||||
|
|||||||
@@ -67,10 +67,10 @@
|
|||||||
"single_user",
|
"single_user",
|
||||||
];
|
];
|
||||||
|
|
||||||
/* State Init */
|
/* Derived */
|
||||||
let pendingStates = $state([...presetStates]);
|
let pendingStates = $derived([...presetStates]);
|
||||||
let pendingShared = $state(presetShared);
|
let pendingShared = $derived(presetShared);
|
||||||
let pendingSchedule = $state(presetSchedule);
|
let pendingSchedule = $derived(presetSchedule);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -79,18 +79,19 @@
|
|||||||
let maxNumNodes = $state(128);
|
let maxNumNodes = $state(128);
|
||||||
let maxNumHWThreads = $state(0);
|
let maxNumHWThreads = $state(0);
|
||||||
let maxNumAccelerators = $state(0);
|
let maxNumAccelerators = $state(0);
|
||||||
// Pending
|
|
||||||
let pendingNumNodes = $state(presetNumNodes);
|
|
||||||
let pendingNumHWThreads = $state(presetNumHWThreads);
|
|
||||||
let pendingNumAccelerators = $state(presetNumAccelerators);
|
|
||||||
let pendingNamedNode = $state(presetNamedNode);
|
|
||||||
let pendingNodeMatch = $state(presetNodeMatch);
|
|
||||||
// Changable States
|
|
||||||
let nodesState = $state(presetNumNodes);
|
|
||||||
let threadState = $state(presetNumHWThreads);
|
|
||||||
let accState = $state(presetNumAccelerators);
|
|
||||||
|
|
||||||
/* Derived States */
|
/* Derived States */
|
||||||
|
// Pending
|
||||||
|
let pendingNumNodes = $derived(presetNumNodes);
|
||||||
|
let pendingNumHWThreads = $derived(presetNumHWThreads);
|
||||||
|
let pendingNumAccelerators = $derived(presetNumAccelerators);
|
||||||
|
let pendingNamedNode = $derived(presetNamedNode);
|
||||||
|
let pendingNodeMatch = $derived(presetNodeMatch);
|
||||||
|
// Changable States
|
||||||
|
let nodesState = $derived(presetNumNodes);
|
||||||
|
let threadState = $derived(presetNumHWThreads);
|
||||||
|
let accState = $derived(presetNumAccelerators);
|
||||||
|
|
||||||
const clusters = $derived(getContext("clusters"));
|
const clusters = $derived(getContext("clusters"));
|
||||||
const initialized = $derived(getContext("initialized"));
|
const initialized = $derived(getContext("initialized"));
|
||||||
// Is Selection Active
|
// Is Selection Active
|
||||||
|
|||||||
@@ -48,12 +48,11 @@
|
|||||||
const resetFrom = { date: format(ago, "yyyy-MM-dd"), time: format(ago, "HH:mm")};
|
const resetFrom = { date: format(ago, "yyyy-MM-dd"), time: format(ago, "HH:mm")};
|
||||||
const resetTo = { date: format(now, "yyyy-MM-dd"), time: format(now, "HH:mm")};
|
const resetTo = { date: format(now, "yyyy-MM-dd"), time: format(now, "HH:mm")};
|
||||||
|
|
||||||
/* State Init */
|
/* Derived */
|
||||||
let pendingStartTime = $state(presetStartTime);
|
let pendingStartTime = $derived(presetStartTime);
|
||||||
let fromState = $state(fromRFC3339(presetStartTime?.from, resetFrom));
|
let fromState = $derived(fromRFC3339(presetStartTime?.from, resetFrom));
|
||||||
let toState = $state(fromRFC3339(presetStartTime?.to, resetTo));
|
let toState = $derived(fromRFC3339(presetStartTime?.to, resetTo));
|
||||||
|
|
||||||
/* Derived Init*/
|
|
||||||
const rangeSelect = $derived(pendingStartTime?.range ? pendingStartTime.range : "")
|
const rangeSelect = $derived(pendingStartTime?.range ? pendingStartTime.range : "")
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
|
|||||||
@@ -35,8 +35,11 @@
|
|||||||
const initialized = $derived(getContext("initialized"))
|
const initialized = $derived(getContext("initialized"))
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let pendingTags = $state(presetTags);
|
|
||||||
let searchTerm = $state("");
|
let searchTerm = $state("");
|
||||||
|
|
||||||
|
/* Derived */
|
||||||
|
let pendingTags = $derived(presetTags);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Modal {isOpen} toggle={() => (isOpen = !isOpen)}>
|
<Modal {isOpen} toggle={() => (isOpen = !isOpen)}>
|
||||||
|
|||||||
@@ -18,12 +18,12 @@
|
|||||||
onRefresh
|
onRefresh
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* State Init */
|
|
||||||
let refreshInterval = $state(initially ? initially * 1000 : null);
|
|
||||||
|
|
||||||
/* Var Init */
|
/* Var Init */
|
||||||
let refreshIntervalId = null;
|
let refreshIntervalId = null;
|
||||||
|
|
||||||
|
/* Derived */
|
||||||
|
let refreshInterval = $derived(initially ? initially * 1000 : null);
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
function refreshIntervalChanged() {
|
function refreshIntervalChanged() {
|
||||||
if (refreshIntervalId != null) clearInterval(refreshIntervalId);
|
if (refreshIntervalId != null) clearInterval(refreshIntervalId);
|
||||||
|
|||||||
@@ -45,8 +45,6 @@
|
|||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* Const Init */
|
/* Const Init */
|
||||||
const isAdmin = (roles && authlevel == roles.admin);
|
|
||||||
const isSupport = (roles && authlevel == roles.support);
|
|
||||||
const client = getContextClient();
|
const client = getContextClient();
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
@@ -54,12 +52,14 @@
|
|||||||
let allTags = getContext("tags")
|
let allTags = getContext("tags")
|
||||||
let newTagType = $state("");
|
let newTagType = $state("");
|
||||||
let newTagName = $state("");
|
let newTagName = $state("");
|
||||||
let newTagScope = $state(username);
|
|
||||||
let filterTerm = $state("");
|
let filterTerm = $state("");
|
||||||
let pendingChange = $state(false);
|
let pendingChange = $state(false);
|
||||||
let isOpen = $state(false);
|
let isOpen = $state(false);
|
||||||
|
|
||||||
/* Derived Init */
|
/* Derived */
|
||||||
|
let newTagScope = $derived(username);
|
||||||
|
const isAdmin = $derived((roles && authlevel == roles.admin));
|
||||||
|
const isSupport = $derived((roles && authlevel == roles.support));
|
||||||
const allTagsFiltered = $derived(($initialized, jobTags, fuzzySearchTags(filterTerm, allTags))); // $init und JobTags only for triggering react
|
const allTagsFiltered = $derived(($initialized, jobTags, fuzzySearchTags(filterTerm, allTags))); // $init und JobTags only for triggering react
|
||||||
const usedTagsFiltered = $derived(matchJobTags(jobTags, allTagsFiltered, 'used', isAdmin, isSupport));
|
const usedTagsFiltered = $derived(matchJobTags(jobTags, allTagsFiltered, 'used', isAdmin, isSupport));
|
||||||
const unusedTagsFiltered = $derived(matchJobTags(jobTags, allTagsFiltered, 'unused', isAdmin, isSupport));
|
const unusedTagsFiltered = $derived(matchJobTags(jobTags, allTagsFiltered, 'unused', isAdmin, isSupport));
|
||||||
|
|||||||
@@ -26,14 +26,16 @@
|
|||||||
|
|
||||||
/* Var Init */
|
/* Var Init */
|
||||||
let user = "";
|
let user = "";
|
||||||
let project = presetProject ? presetProject : "";
|
|
||||||
let jobName = "";
|
let jobName = "";
|
||||||
let timeoutId = null;
|
let timeoutId = null;
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let mode = $state(presetProject ? "jobName" : "project");
|
|
||||||
let term = $state("");
|
let term = $state("");
|
||||||
|
|
||||||
|
/* Derived */
|
||||||
|
let project = $derived(presetProject ? presetProject : "");
|
||||||
|
let mode = $derived(presetProject ? "jobName" : "project");
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
function modeChanged() {
|
function modeChanged() {
|
||||||
if (mode == "user") {
|
if (mode == "user") {
|
||||||
|
|||||||
@@ -37,13 +37,7 @@
|
|||||||
|
|
||||||
/* Const Init */
|
/* Const Init */
|
||||||
const client = getContextClient();
|
const client = getContextClient();
|
||||||
const jobId = job.id;
|
|
||||||
const cluster = getContext("clusters");
|
const cluster = getContext("clusters");
|
||||||
const scopes = (job.numNodes == 1)
|
|
||||||
? (job.numAcc >= 1)
|
|
||||||
? ["core", "accelerator"]
|
|
||||||
: ["core"]
|
|
||||||
: ["node"];
|
|
||||||
const resampleConfig = getContext("resampling") || null;
|
const resampleConfig = getContext("resampling") || null;
|
||||||
const resampleDefault = resampleConfig ? Math.max(...resampleConfig.resolutions) : 0;
|
const resampleDefault = resampleConfig ? Math.max(...resampleConfig.resolutions) : 0;
|
||||||
const query = gql`
|
const query = gql`
|
||||||
@@ -84,6 +78,15 @@
|
|||||||
let thresholdStates = $state({});
|
let thresholdStates = $state({});
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
const jobId = $derived(job?.id);
|
||||||
|
const scopes = $derived.by(() => {
|
||||||
|
if (job.numNodes == 1) {
|
||||||
|
if (job.numAcc >= 1) return ["core", "accelerator"];
|
||||||
|
else return ["core"];
|
||||||
|
} else {
|
||||||
|
return ["node"];
|
||||||
|
};
|
||||||
|
});
|
||||||
let isSelected = $derived(previousSelect);
|
let isSelected = $derived(previousSelect);
|
||||||
let metricsQuery = $derived(queryStore({
|
let metricsQuery = $derived(queryStore({
|
||||||
client: client,
|
client: client,
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
// UPLOT SCALES INIT //
|
// UPLOT SCALES INIT //
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
if (forResources) {
|
if (forResources) {
|
||||||
const resSeries = [
|
const resSeries = [
|
||||||
{
|
{
|
||||||
@@ -136,8 +137,11 @@
|
|||||||
|
|
||||||
// UPLOT OPTIONS //
|
// UPLOT OPTIONS //
|
||||||
const opts = {
|
const opts = {
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
width,
|
width,
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
height,
|
height,
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
title,
|
title,
|
||||||
plugins: [legendAsTooltipPlugin()],
|
plugins: [legendAsTooltipPlugin()],
|
||||||
series: plotSeries,
|
series: plotSeries,
|
||||||
@@ -147,6 +151,7 @@
|
|||||||
space: 25, // Tick Spacing
|
space: 25, // Tick Spacing
|
||||||
rotate: 30,
|
rotate: 30,
|
||||||
show: true,
|
show: true,
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
label: xlabel,
|
label: xlabel,
|
||||||
values(self, splits) {
|
values(self, splits) {
|
||||||
return splits.map(s => xticks[s]);
|
return splits.map(s => xticks[s]);
|
||||||
@@ -164,16 +169,19 @@
|
|||||||
scale: "y",
|
scale: "y",
|
||||||
grid: { show: true },
|
grid: { show: true },
|
||||||
labelFont: "sans-serif",
|
labelFont: "sans-serif",
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
label: ylabel + (yunit ? ` (${yunit})` : ''),
|
label: ylabel + (yunit ? ` (${yunit})` : ''),
|
||||||
values: (u, vals) => vals.map((v) => formatNumber(v)),
|
values: (u, vals) => vals.map((v) => formatNumber(v)),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
bands: forResources ? [] : plotBands,
|
bands: forResources ? [] : plotBands,
|
||||||
padding: [5, 10, 0, 0],
|
padding: [5, 10, 0, 0],
|
||||||
hooks: {
|
hooks: {
|
||||||
draw: [
|
draw: [
|
||||||
(u) => {
|
(u) => {
|
||||||
// Draw plot type label:
|
// Draw plot type label:
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let textl = forResources ? "Job Resources by Type" : "Metric Min/Avg/Max for Job Duration";
|
let textl = forResources ? "Job Resources by Type" : "Metric Min/Avg/Max for Job Duration";
|
||||||
let textr = "Earlier <- StartTime -> Later";
|
let textr = "Earlier <- StartTime -> Later";
|
||||||
u.ctx.save();
|
u.ctx.save();
|
||||||
@@ -196,6 +204,7 @@
|
|||||||
x: { time: false },
|
x: { time: false },
|
||||||
xst: { time: false },
|
xst: { time: false },
|
||||||
xrt: { time: false },
|
xrt: { time: false },
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
y: {auto: true, distr: forResources ? 3 : 1},
|
y: {auto: true, distr: forResources ? 3 : 1},
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
|
|||||||
@@ -53,7 +53,6 @@
|
|||||||
// const subClusterTopology = getContext("getHardwareTopology")(cluster, subCluster);
|
// const subClusterTopology = getContext("getHardwareTopology")(cluster, subCluster);
|
||||||
// const metricConfig = getContext("getMetricConfig")(cluster, subCluster, metric);
|
// const metricConfig = getContext("getMetricConfig")(cluster, subCluster, metric);
|
||||||
const lineColors = clusterCockpitConfig.plotConfiguration_colorScheme;
|
const lineColors = clusterCockpitConfig.plotConfiguration_colorScheme;
|
||||||
const lineWidth = fixLinewidth ? fixLinewidth : clusterCockpitConfig.plotConfiguration_lineWidth / window.devicePixelRatio;
|
|
||||||
// const cbmode = clusterCockpitConfig?.plotConfiguration_colorblindMode || false;
|
// const cbmode = clusterCockpitConfig?.plotConfiguration_colorblindMode || false;
|
||||||
const renderSleepTime = 200;
|
const renderSleepTime = 200;
|
||||||
// const normalLineColor = "#000000";
|
// const normalLineColor = "#000000";
|
||||||
@@ -71,6 +70,7 @@
|
|||||||
let uplot = $state(null);
|
let uplot = $state(null);
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
const lineWidth = $derived(fixLinewidth ? fixLinewidth : clusterCockpitConfig.plotConfiguration_lineWidth / window.devicePixelRatio);
|
||||||
// const usesMeanStatsSeries = $derived((statisticsSeries?.mean && statisticsSeries.mean.length != 0));
|
// const usesMeanStatsSeries = $derived((statisticsSeries?.mean && statisticsSeries.mean.length != 0));
|
||||||
// const resampleTrigger = $derived(resampleConfig?.trigger ? Number(resampleConfig.trigger) : null);
|
// const resampleTrigger = $derived(resampleConfig?.trigger ? Number(resampleConfig.trigger) : null);
|
||||||
// const resampleResolutions = $derived(resampleConfig?.resolutions ? [...resampleConfig.resolutions] : null);
|
// const resampleResolutions = $derived(resampleConfig?.resolutions ? [...resampleConfig.resolutions] : null);
|
||||||
|
|||||||
@@ -56,8 +56,6 @@
|
|||||||
/* Const Init */
|
/* Const Init */
|
||||||
const clusterCockpitConfig = getContext("cc-config");
|
const clusterCockpitConfig = getContext("cc-config");
|
||||||
const resampleConfig = getContext("resampling");
|
const resampleConfig = getContext("resampling");
|
||||||
const subClusterTopology = getContext("getHardwareTopology")(cluster, subCluster);
|
|
||||||
const metricConfig = getContext("getMetricConfig")(cluster, subCluster, metric);
|
|
||||||
const lineColors = clusterCockpitConfig.plotConfiguration_colorScheme;
|
const lineColors = clusterCockpitConfig.plotConfiguration_colorScheme;
|
||||||
const lineWidth = clusterCockpitConfig.plotConfiguration_lineWidth / window.devicePixelRatio;
|
const lineWidth = clusterCockpitConfig.plotConfiguration_lineWidth / window.devicePixelRatio;
|
||||||
const cbmode = clusterCockpitConfig?.plotConfiguration_colorblindMode || false;
|
const cbmode = clusterCockpitConfig?.plotConfiguration_colorblindMode || false;
|
||||||
@@ -77,6 +75,8 @@
|
|||||||
let uplot = $state(null);
|
let uplot = $state(null);
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
const subClusterTopology = $derived(getContext("getHardwareTopology")(cluster, subCluster));
|
||||||
|
const metricConfig = $derived(getContext("getMetricConfig")(cluster, subCluster, metric));
|
||||||
const usesMeanStatsSeries = $derived((statisticsSeries?.mean && statisticsSeries.mean.length != 0));
|
const usesMeanStatsSeries = $derived((statisticsSeries?.mean && statisticsSeries.mean.length != 0));
|
||||||
const resampleTrigger = $derived(resampleConfig?.trigger ? Number(resampleConfig.trigger) : null);
|
const resampleTrigger = $derived(resampleConfig?.trigger ? Number(resampleConfig.trigger) : null);
|
||||||
const resampleResolutions = $derived(resampleConfig?.resolutions ? [...resampleConfig.resolutions] : null);
|
const resampleResolutions = $derived(resampleConfig?.resolutions ? [...resampleConfig.resolutions] : null);
|
||||||
|
|||||||
@@ -95,6 +95,7 @@
|
|||||||
animation: false,
|
animation: false,
|
||||||
plugins: {
|
plugins: {
|
||||||
legend: {
|
legend: {
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
display: displayLegend
|
display: displayLegend
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,9 +23,6 @@
|
|||||||
height = 300,
|
height = 300,
|
||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* Check Before */
|
|
||||||
console.assert(tiles, "you must provide tiles!")
|
|
||||||
|
|
||||||
/* Const Init */
|
/* Const Init */
|
||||||
const axesColor = '#aaaaaa';
|
const axesColor = '#aaaaaa';
|
||||||
const tickFontSize = 10;
|
const tickFontSize = 10;
|
||||||
@@ -42,10 +39,10 @@
|
|||||||
/* State Init */
|
/* State Init */
|
||||||
let ctx = $state();
|
let ctx = $state();
|
||||||
let canvasElement = $state();
|
let canvasElement = $state();
|
||||||
let prevWidth = $state(width);
|
|
||||||
let prevHeight = $state(height);
|
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
let prevWidth = $derived(width);
|
||||||
|
let prevHeight = $derived(height);
|
||||||
const data = $derived({
|
const data = $derived({
|
||||||
tiles: tiles,
|
tiles: tiles,
|
||||||
xLabel: 'Intensity [FLOPS/byte]',
|
xLabel: 'Intensity [FLOPS/byte]',
|
||||||
|
|||||||
@@ -100,12 +100,6 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Data Prep For uPlot
|
|
||||||
const sortedData = data?.sort((a, b) => a.state.localeCompare(b.state)) || [];
|
|
||||||
const collectLabel = sortedData.map(d => d.state);
|
|
||||||
// Align Data to Timesteps, Introduces 'undefied' as placeholder, reiterate and set those to 0
|
|
||||||
const collectData = (sortedData.length > 0) ? uPlot.join(sortedData.map(d => [d.times, d.counts])).map(d => d.map(i => i ? i : 0)) : [];
|
|
||||||
|
|
||||||
// STACKED CHART FUNCTIONS //
|
// STACKED CHART FUNCTIONS //
|
||||||
function stack(data, omit) {
|
function stack(data, omit) {
|
||||||
let data2 = [];
|
let data2 = [];
|
||||||
@@ -287,14 +281,20 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// UPLOT SERIES INIT
|
// UPLOT SERIES INIT: DERIVED FROM PROPS
|
||||||
const plotSeries = [
|
// Data Prep For uPlot
|
||||||
{
|
const sortedData = $derived(data?.sort((a, b) => a.state.localeCompare(b.state)) || []);
|
||||||
label: "Time",
|
const collectLabel = $derived(sortedData.map(d => d.state));
|
||||||
scale: "x"
|
// Align Data to Timesteps, Introduces 'undefied' as placeholder, reiterate and set those to 0
|
||||||
},
|
const collectData = $derived.by(() => {
|
||||||
...collectLabel.map(l => seriesConfig[l])
|
if (sortedData.length > 0) {
|
||||||
]
|
return uPlot.join(sortedData.map(d => [d.times, d.counts])).map(d => d.map(i => i ? i : 0))
|
||||||
|
} else {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Build Series
|
||||||
|
const plotSeries = $derived([{label: "Time", scale: "x"}, ...collectLabel.map(l => seriesConfig[l])]);
|
||||||
|
|
||||||
/* Var Init */
|
/* Var Init */
|
||||||
let timeoutId = null;
|
let timeoutId = null;
|
||||||
|
|||||||
@@ -27,14 +27,16 @@
|
|||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let pendingValues = $state([fromPreset, toPreset]);
|
|
||||||
let sliderFrom = $state(Math.max(((fromPreset == null ? sliderMin : fromPreset) - sliderMin) / (sliderMax - sliderMin), 0.));
|
|
||||||
let sliderTo = $state(Math.min(((toPreset == null ? sliderMin : toPreset) - sliderMin) / (sliderMax - sliderMin), 1.));
|
|
||||||
let inputFieldFrom = $state(fromPreset.toString());
|
|
||||||
let inputFieldTo = $state(toPreset.toString());
|
|
||||||
let leftHandle = $state();
|
let leftHandle = $state();
|
||||||
let sliderMain = $state();
|
let sliderMain = $state();
|
||||||
|
|
||||||
|
/* Derived */
|
||||||
|
let pendingValues = $derived([fromPreset, toPreset]);
|
||||||
|
let sliderFrom = $derived(Math.max(((fromPreset == null ? sliderMin : fromPreset) - sliderMin) / (sliderMax - sliderMin), 0.));
|
||||||
|
let sliderTo = $derived(Math.min(((toPreset == null ? sliderMin : toPreset) - sliderMin) / (sliderMax - sliderMin), 1.));
|
||||||
|
let inputFieldFrom = $derived(fromPreset.toString());
|
||||||
|
let inputFieldTo = $derived(toPreset.toString());
|
||||||
|
|
||||||
/* Var Init */
|
/* Var Init */
|
||||||
let timeoutId = null;
|
let timeoutId = null;
|
||||||
|
|
||||||
|
|||||||
@@ -41,11 +41,11 @@
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let sorting = $state({...presetSorting})
|
|
||||||
let activeColumnIdx = $state(0);
|
let activeColumnIdx = $state(0);
|
||||||
let metricSortables = $state([]);
|
let metricSortables = $state([]);
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
let sorting = $derived({...presetSorting})
|
||||||
let sortableColumns = $derived([...fixedSortables, ...metricSortables]);
|
let sortableColumns = $derived([...fixedSortables, ...metricSortables]);
|
||||||
|
|
||||||
/* Effect */
|
/* Effect */
|
||||||
|
|||||||
@@ -45,7 +45,6 @@
|
|||||||
const statsPattern = /(.*)-stat$/;
|
const statsPattern = /(.*)-stat$/;
|
||||||
const resampleConfig = getContext("resampling") || null;
|
const resampleConfig = getContext("resampling") || null;
|
||||||
const resampleDefault = resampleConfig ? Math.max(...resampleConfig.resolutions) : 0;
|
const resampleDefault = resampleConfig ? Math.max(...resampleConfig.resolutions) : 0;
|
||||||
const unit = (metricUnit?.prefix ? metricUnit.prefix : "") + (metricUnit?.base ? metricUnit.base : "");
|
|
||||||
const subQuery = gql`
|
const subQuery = gql`
|
||||||
query ($dbid: ID!, $selectedMetrics: [String!]!, $selectedScopes: [MetricScope!]!, $selectedResolution: Int) {
|
query ($dbid: ID!, $selectedMetrics: [String!]!, $selectedScopes: [MetricScope!]!, $selectedResolution: Int) {
|
||||||
singleUpdate: jobMetrics(id: $dbid, metrics: $selectedMetrics, scopes: $selectedScopes, resolution: $selectedResolution) {
|
singleUpdate: jobMetrics(id: $dbid, metrics: $selectedMetrics, scopes: $selectedScopes, resolution: $selectedResolution) {
|
||||||
@@ -79,14 +78,14 @@
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let requestedScopes = $state(presetScopes);
|
|
||||||
let selectedResolution = $state(resampleDefault);
|
let selectedResolution = $state(resampleDefault);
|
||||||
|
|
||||||
let selectedHost = $state(null);
|
let selectedHost = $state(null);
|
||||||
let zoomState = $state(null);
|
let zoomState = $state(null);
|
||||||
let thresholdState = $state(null);
|
let thresholdState = $state(null);
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
let requestedScopes = $derived(presetScopes);
|
||||||
|
const unit = $derived.by(() => { return (metricUnit?.prefix ? metricUnit.prefix : "") + (metricUnit?.base ? metricUnit.base : "")});
|
||||||
const metricData = $derived(queryStore({
|
const metricData = $derived(queryStore({
|
||||||
client: client,
|
client: client,
|
||||||
query: subQuery,
|
query: subQuery,
|
||||||
|
|||||||
@@ -25,9 +25,13 @@
|
|||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let sortedHosts = $state(hosts);
|
let sortedHosts = $state(hosts);
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let sorting = $state(setupSorting(selectedMetrics));
|
let sorting = $state(setupSorting(selectedMetrics));
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let availableScopes = $state(setupAvailable(jobStats));
|
let availableScopes = $state(setupAvailable(jobStats));
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let selectedScopes = $state(setupSelected(availableScopes));
|
let selectedScopes = $state(setupSelected(availableScopes));
|
||||||
|
|
||||||
/* Derived Init */
|
/* Derived Init */
|
||||||
|
|||||||
@@ -38,11 +38,11 @@
|
|||||||
const client = getContextClient();
|
const client = getContextClient();
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let cluster = $state(presetCluster);
|
|
||||||
// Histogram
|
// Histogram
|
||||||
let isHistogramSelectionOpen = $state(false);
|
let isHistogramSelectionOpen = $state(false);
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
let cluster = $derived(presetCluster);
|
||||||
let selectedHistograms = $derived(cluster
|
let selectedHistograms = $derived(cluster
|
||||||
? ccconfig[`statusView_selectedHistograms:${cluster}`] || ( ccconfig['statusView_selectedHistograms'] || [] )
|
? ccconfig[`statusView_selectedHistograms:${cluster}`] || ( ccconfig['statusView_selectedHistograms'] || [] )
|
||||||
: ccconfig['statusView_selectedHistograms'] || []);
|
: ccconfig['statusView_selectedHistograms'] || []);
|
||||||
|
|||||||
@@ -41,7 +41,6 @@
|
|||||||
const client = getContextClient();
|
const client = getContextClient();
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let cluster = $state(presetCluster);
|
|
||||||
let pieWidth = $state(0);
|
let pieWidth = $state(0);
|
||||||
let stackedWidth1 = $state(0);
|
let stackedWidth1 = $state(0);
|
||||||
let stackedWidth2 = $state(0);
|
let stackedWidth2 = $state(0);
|
||||||
@@ -65,6 +64,7 @@
|
|||||||
let totalAccs = $state({});
|
let totalAccs = $state({});
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
let cluster = $derived(presetCluster);
|
||||||
// States for Stacked charts
|
// States for Stacked charts
|
||||||
const statesTimed = $derived(queryStore({
|
const statesTimed = $derived(queryStore({
|
||||||
client: client,
|
client: client,
|
||||||
|
|||||||
@@ -44,7 +44,6 @@
|
|||||||
const durationBinOptions = ["1m","10m","1h","6h","12h"];
|
const durationBinOptions = ["1m","10m","1h","6h","12h"];
|
||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let cluster = $state(presetCluster)
|
|
||||||
let pagingState = $state({page: 1, itemsPerPage: 10}) // Top 10
|
let pagingState = $state({page: 1, itemsPerPage: 10}) // Top 10
|
||||||
let selectedHistograms = $state([]) // Dummy For Refresh
|
let selectedHistograms = $state([]) // Dummy For Refresh
|
||||||
let colWidthJobs = $state(0);
|
let colWidthJobs = $state(0);
|
||||||
@@ -53,6 +52,7 @@
|
|||||||
let numDurationBins = $state("1h");
|
let numDurationBins = $state("1h");
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
let cluster = $derived(presetCluster)
|
||||||
const topJobsQuery = $derived(queryStore({
|
const topJobsQuery = $derived(queryStore({
|
||||||
client: client,
|
client: client,
|
||||||
query: gql`
|
query: gql`
|
||||||
|
|||||||
@@ -38,7 +38,6 @@
|
|||||||
|
|
||||||
/* Const Init */
|
/* Const Init */
|
||||||
const client = getContextClient();
|
const client = getContextClient();
|
||||||
const usePaging = ccconfig?.nodeList_usePaging || false;
|
|
||||||
const nodeListQuery = gql`
|
const nodeListQuery = gql`
|
||||||
query ($cluster: String!, $subCluster: String!, $nodeFilter: String!, $stateFilter: String!, $metrics: [String!],
|
query ($cluster: String!, $subCluster: String!, $nodeFilter: String!, $stateFilter: String!, $metrics: [String!],
|
||||||
$scopes: [MetricScope!]!, $from: Time!, $to: Time!, $paging: PageRequest!, $selectedResolution: Int
|
$scopes: [MetricScope!]!, $from: Time!, $to: Time!, $paging: PageRequest!, $selectedResolution: Int
|
||||||
@@ -94,13 +93,14 @@
|
|||||||
|
|
||||||
/* State Init */
|
/* State Init */
|
||||||
let nodes = $state([]);
|
let nodes = $state([]);
|
||||||
let selectedMetrics = $state(pendingSelectedMetrics);
|
|
||||||
let page = $state(1);
|
let page = $state(1);
|
||||||
let itemsPerPage = $state(usePaging ? (ccconfig?.nodeList_nodesPerPage || 10) : 10);
|
|
||||||
let headerPaddingTop = $state(0);
|
let headerPaddingTop = $state(0);
|
||||||
let matchedNodes = $state(0);
|
let matchedNodes = $state(0);
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
let selectedMetrics = $derived(pendingSelectedMetrics);
|
||||||
|
let itemsPerPage = $derived(usePaging ? (ccconfig?.nodeList_nodesPerPage || 10) : 10);
|
||||||
|
const usePaging = $derived(ccconfig?.nodeList_usePaging || false);
|
||||||
const paging = $derived({ itemsPerPage, page });
|
const paging = $derived({ itemsPerPage, page });
|
||||||
const nodesQuery = $derived(queryStore({
|
const nodesQuery = $derived(queryStore({
|
||||||
client: client,
|
client: client,
|
||||||
|
|||||||
@@ -38,10 +38,6 @@
|
|||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* Const Init */
|
/* Const Init */
|
||||||
// Not at least one returned, selected metric: NodeHealth warning
|
|
||||||
const healthWarn = !dataHealth.includes(true);
|
|
||||||
// At least one non-returned selected metric: Metric config error?
|
|
||||||
const metricWarn = dataHealth.includes(false);
|
|
||||||
// Node State Colors
|
// Node State Colors
|
||||||
const stateColors = {
|
const stateColors = {
|
||||||
allocated: 'success',
|
allocated: 'success',
|
||||||
@@ -54,6 +50,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
// Not at least one returned, selected metric: NodeHealth warning
|
||||||
|
const healthWarn = $derived(!dataHealth.includes(true));
|
||||||
|
// At least one non-returned selected metric: Metric config error?
|
||||||
|
const metricWarn = $derived(dataHealth.includes(false));
|
||||||
const userList = $derived(nodeJobsData
|
const userList = $derived(nodeJobsData
|
||||||
? Array.from(new Set(nodeJobsData.jobs.items.map((j) => scrambleNames ? scramble(j.user) : j.user))).sort((a, b) => a.localeCompare(b))
|
? Array.from(new Set(nodeJobsData.jobs.items.map((j) => scrambleNames ? scramble(j.user) : j.user))).sort((a, b) => a.localeCompare(b))
|
||||||
: []
|
: []
|
||||||
|
|||||||
@@ -27,17 +27,13 @@
|
|||||||
} = $props();
|
} = $props();
|
||||||
|
|
||||||
/* Var Init*/
|
/* Var Init*/
|
||||||
|
// svelte-ignore state_referenced_locally
|
||||||
let plotSync = uPlot.sync(`nodeMetricStack-${nodeData.host}`);
|
let plotSync = uPlot.sync(`nodeMetricStack-${nodeData.host}`);
|
||||||
|
|
||||||
/* Const Init */
|
/* Const Init */
|
||||||
const client = getContextClient();
|
const client = getContextClient();
|
||||||
const paging = { itemsPerPage: 50, page: 1 };
|
const paging = { itemsPerPage: 50, page: 1 };
|
||||||
const sorting = { field: "startTime", type: "col", order: "DESC" };
|
const sorting = { field: "startTime", type: "col", order: "DESC" };
|
||||||
const filter = [
|
|
||||||
{ cluster: { eq: cluster } },
|
|
||||||
{ node: { contains: nodeData.host } },
|
|
||||||
{ state: ["running"] },
|
|
||||||
];
|
|
||||||
const nodeJobsQuery = gql`
|
const nodeJobsQuery = gql`
|
||||||
query (
|
query (
|
||||||
$filter: [JobFilter!]!
|
$filter: [JobFilter!]!
|
||||||
@@ -61,6 +57,11 @@
|
|||||||
`;
|
`;
|
||||||
|
|
||||||
/* Derived */
|
/* Derived */
|
||||||
|
const filter = $derived([
|
||||||
|
{ cluster: { eq: cluster } },
|
||||||
|
{ node: { contains: nodeData.host } },
|
||||||
|
{ state: ["running"] },
|
||||||
|
]);
|
||||||
const nodeJobsData = $derived(queryStore({
|
const nodeJobsData = $derived(queryStore({
|
||||||
client: client,
|
client: client,
|
||||||
query: nodeJobsQuery,
|
query: nodeJobsQuery,
|
||||||
@@ -70,7 +71,7 @@
|
|||||||
|
|
||||||
let extendedLegendData = $derived($nodeJobsData?.data ? buildExtendedLegend() : null);
|
let extendedLegendData = $derived($nodeJobsData?.data ? buildExtendedLegend() : null);
|
||||||
let refinedData = $derived(nodeData?.metrics ? sortAndSelectScope(nodeData.metrics) : 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)));
|
let dataHealth = $derived(refinedData.filter((rd) => rd.disabled === false).map((enabled) => (enabled?.data?.metric?.series?.length > 0)));
|
||||||
|
|
||||||
/* Functions */
|
/* Functions */
|
||||||
const selectScope = (nodeMetrics) =>
|
const selectScope = (nodeMetrics) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user