diff --git a/internal/repository/stats.go b/internal/repository/stats.go index 19d17bd..825033d 100644 --- a/internal/repository/stats.go +++ b/internal/repository/stats.go @@ -21,9 +21,10 @@ import ( // GraphQL validation should make sure that no unkown values can be specified. var groupBy2column = map[model.Aggregate]string{ - model.AggregateUser: "job.hpc_user", - model.AggregateProject: "job.project", - model.AggregateCluster: "job.hpc_cluster", + model.AggregateUser: "job.hpc_user", + model.AggregateProject: "job.project", + model.AggregateCluster: "job.hpc_cluster", + model.AggregateSubcluster: "job.subcluster", } var sortBy2column = map[model.SortByAggregate]string{ @@ -176,7 +177,7 @@ func (r *JobRepository) JobsStatsGrouped( var name sql.NullString var jobs, users, walltime, nodes, nodeHours, cores, coreHours, accs, accHours sql.NullInt64 if err := rows.Scan(&id, &name, &jobs, &users, &walltime, &nodes, &nodeHours, &cores, &coreHours, &accs, &accHours); err != nil { - cclog.Warn("Error while scanning rows") + cclog.Warnf("Error while scanning rows: %s", err.Error()) return nil, err } diff --git a/web/frontend/src/status/StatisticsDash.svelte b/web/frontend/src/status/StatisticsDash.svelte index f299439..fb2161b 100644 --- a/web/frontend/src/status/StatisticsDash.svelte +++ b/web/frontend/src/status/StatisticsDash.svelte @@ -43,8 +43,6 @@ let cluster = $state(presetCluster); // Histogram let isHistogramSelectionOpen = $state(false); - let from = $state(new Date(Date.now() - (30 * 24 * 60 * 60 * 1000))); // Simple way to retrigger GQL: Jobs Started last Month - let to = $state(new Date(Date.now())); /* Derived */ let selectedHistograms = $derived(cluster @@ -74,11 +72,11 @@ } `, variables: { - filter: [{ state: ["running"] }, { cluster: { eq: cluster}}, {startTime: { from, to }}], - selectedHistograms: selectedHistograms, + filter: [{ state: ["running"] }, { cluster: { eq: cluster} }], + selectedHistograms: selectedHistograms }, + requestPolicy: "network-only" })); - @@ -96,8 +94,7 @@ { - from = new Date(Date.now() - (30 * 24 * 60 * 60 * 1000)); // Triggers GQL - to = new Date(Date.now()); + selectedHistograms = [...$state.snapshot(selectedHistograms)] }} /> diff --git a/web/frontend/src/status/StatusDash.svelte b/web/frontend/src/status/StatusDash.svelte index 280b04b..5c679a3 100644 --- a/web/frontend/src/status/StatusDash.svelte +++ b/web/frontend/src/status/StatusDash.svelte @@ -185,6 +185,7 @@ paging: { itemsPerPage: -1, page: 1 }, // Get all: -1 sorting: { field: "startTime", type: "col", order: "DESC" } }, + requestPolicy: "network-only" })); /* Effects */ @@ -233,6 +234,10 @@ } }); + $inspect('From', from) + $inspect('To', to) + $inspect('Query', statusQuery) + /* Const Functions */ const sumUp = (data, subcluster, metric) => data.reduce( @@ -363,6 +368,7 @@ { + console.log('Trigger Refresh StatusTab') from = new Date(Date.now() - 5 * 60 * 1000); to = new Date(Date.now()); }} diff --git a/web/frontend/src/status/UsageDash.svelte b/web/frontend/src/status/UsageDash.svelte index 16575e4..3b39e55 100644 --- a/web/frontend/src/status/UsageDash.svelte +++ b/web/frontend/src/status/UsageDash.svelte @@ -47,8 +47,8 @@ /* State Init */ let cluster = $state(presetCluster) - let from = $state(new Date(Date.now() - (30 * 24 * 60 * 60 * 1000))); // Simple way to retrigger GQL: Jobs Started last Month - let to = $state(new Date(Date.now())); + let pagingState = $state({page: 1, itemsPerPage: 10}) // Top 10 + let selectedHistograms = $state([]) // Dummy For Refresh let colWidthJobs = $state(0); let colWidthNodes = $state(0); let colWidthAccs = $state(0); @@ -84,9 +84,10 @@ } `, variables: { - filter: [{ state: ["running"] }, { cluster: { eq: cluster}}, {startTime: { from, to }}], - paging: { itemsPerPage: 10, page: 1 } // Top 10 + filter: [{ state: ["running"] }, { cluster: { eq: cluster} }], + paging: pagingState // Top 10 }, + requestPolicy: "network-only" })); const topNodesQuery = $derived(queryStore({ @@ -118,9 +119,10 @@ } `, variables: { - filter: [{ state: ["running"] }, { cluster: { eq: cluster }}, {startTime: { from, to }}], - paging: { itemsPerPage: 10, page: 1 } // Top 10 + filter: [{ state: ["running"] }, { cluster: { eq: cluster } }], + paging: pagingState }, + requestPolicy: "network-only" })); const topAccsQuery = $derived(queryStore({ @@ -152,9 +154,10 @@ } `, variables: { - filter: [{ state: ["running"] }, { cluster: { eq: cluster }}, {startTime: { from, to }}], - paging: { itemsPerPage: 10, page: 1 } // Top 10 + filter: [{ state: ["running"] }, { cluster: { eq: cluster } }], + paging: pagingState }, + requestPolicy: "network-only" })); // Note: nodeMetrics are requested on configured $timestep resolution @@ -183,10 +186,11 @@ } `, variables: { - filter: [{ state: ["running"] }, { cluster: { eq: cluster }}, {startTime: { from, to }}], - selectedHistograms: [], // No Metrics requested for node hardware stats + filter: [{ state: ["running"] }, { cluster: { eq: cluster } }], + selectedHistograms: selectedHistograms, // No Metrics requested for node hardware stats numDurationBins: numDurationBins, }, + requestPolicy: "network-only" })); /* Functions */ @@ -202,7 +206,6 @@ } return c[(c.length + targetIdx) % c.length]; } - @@ -226,8 +229,8 @@ { - from = new Date(Date.now() - (30 * 24 * 60 * 60 * 1000)); // Triggers GQL - to = new Date(Date.now()); + pagingState = { page:1, itemsPerPage: 10 }; + selectedHistograms = [...$state.snapshot(selectedHistograms)]; }} />