Merge branch 'hotfix' of github.com:ClusterCockpit/cc-backend into hotfix

This commit is contained in:
2026-03-13 13:17:34 +01:00
10 changed files with 23 additions and 17 deletions

View File

@@ -197,11 +197,16 @@ func BuildWhereClause(filter *model.JobFilter, query sq.SelectBuilder) sq.Select
query = buildStringCondition("job.cluster_partition", filter.Partition, query) query = buildStringCondition("job.cluster_partition", filter.Partition, query)
} }
if filter.State != nil { if filter.State != nil {
states := make([]string, len(filter.State)) if len(filter.State) == 1 {
for i, val := range filter.State { singleStat := string(filter.State[0])
states[i] = string(val) query = query.Where("job.job_state = ?", singleStat)
} else {
states := make([]string, len(filter.State))
for i, val := range filter.State {
states[i] = string(val)
}
query = query.Where(sq.Eq{"job.job_state": states})
} }
query = query.Where(sq.Eq{"job.job_state": states})
} }
if filter.Shared != nil { if filter.Shared != nil {
query = query.Where("job.shared = ?", *filter.Shared) query = query.Where("job.shared = ?", *filter.Shared)

View File

@@ -101,3 +101,5 @@ DROP INDEX IF EXISTS jobs_numnodes_starttime;
DROP INDEX IF EXISTS jobs_numhwthreads_starttime; DROP INDEX IF EXISTS jobs_numhwthreads_starttime;
DROP INDEX IF EXISTS jobs_numacc_starttime; DROP INDEX IF EXISTS jobs_numacc_starttime;
DROP INDEX IF EXISTS jobs_energy_starttime; DROP INDEX IF EXISTS jobs_energy_starttime;
PRAGMA optimize;

View File

@@ -1 +1,4 @@
DROP INDEX IF EXISTS jobs_cluster_user_starttime_stats; DROP INDEX IF EXISTS jobs_cluster_user_starttime_stats;
DROP INDEX IF EXISTS jobs_cluster_project_starttime_stats;
PRAGMA optimize;

View File

@@ -149,7 +149,6 @@
jobsStatistics( jobsStatistics(
filter: $jobFilter filter: $jobFilter
page: $paging page: $paging
sortBy: TOTALJOBS
groupBy: CLUSTER groupBy: CLUSTER
) { ) {
id id
@@ -185,7 +184,7 @@
from: from.toISOString(), from: from.toISOString(),
clusterFrom: clusterFrom.toISOString(), clusterFrom: clusterFrom.toISOString(),
to: to.toISOString(), to: to.toISOString(),
jobFilter: [{ state: ["running"] }, { cluster: { eq: presetCluster } }], jobFilter: [{ cluster: { eq: presetCluster } }, { state: ["running"] }],
nodeFilter: { cluster: { eq: presetCluster }}, nodeFilter: { cluster: { eq: presetCluster }},
paging: { itemsPerPage: -1, page: 1 }, // Get all: -1 paging: { itemsPerPage: -1, page: 1 }, // Get all: -1
sorting: { field: "startTime", type: "col", order: "DESC" } sorting: { field: "startTime", type: "col", order: "DESC" }

View File

@@ -119,8 +119,8 @@
const filter = $derived([ const filter = $derived([
{ cluster: { eq: cluster } }, { cluster: { eq: cluster } },
{ node: { eq: hostname } },
{ state: ["running"] }, { state: ["running"] },
{ node: { eq: hostname } },
]); ]);
const systemUnits = $derived.by(() => { const systemUnits = $derived.by(() => {

View File

@@ -155,7 +155,6 @@
jobsStatistics( jobsStatistics(
filter: $jobFilter filter: $jobFilter
page: $paging page: $paging
sortBy: TOTALJOBS
groupBy: CLUSTER groupBy: CLUSTER
) { ) {
id id
@@ -190,7 +189,7 @@
from: from.toISOString(), from: from.toISOString(),
to: to.toISOString(), to: to.toISOString(),
clusterFrom: clusterFrom.toISOString(), clusterFrom: clusterFrom.toISOString(),
jobFilter: [{ state: ["running"] }, { cluster: { eq: presetCluster } }], jobFilter: [{ cluster: { eq: presetCluster } }, { state: ["running"] }],
paging: { itemsPerPage: -1, page: 1 }, // Get all: -1 paging: { itemsPerPage: -1, page: 1 }, // Get all: -1
sorting: { field: "startTime", type: "col", order: "DESC" } sorting: { field: "startTime", type: "col", order: "DESC" }
}, },
@@ -216,7 +215,7 @@
} }
`, `,
variables: { variables: {
filter: [{ state: ["running"] }, { cluster: { eq: presetCluster} }], filter: [{ cluster: { eq: presetCluster} }, { state: ["running"] }],
paging: pagingState // Top 10 paging: pagingState // Top 10
}, },
requestPolicy: "network-only" requestPolicy: "network-only"

View File

@@ -72,7 +72,7 @@
} }
`, `,
variables: { variables: {
filter: [{ state: ["running"] }, { cluster: { eq: cluster} }], filter: [{ cluster: { eq: cluster} }, { state: ["running"] }],
selectedHistograms: selectedHistograms selectedHistograms: selectedHistograms
}, },
requestPolicy: "network-only" requestPolicy: "network-only"

View File

@@ -163,7 +163,6 @@
jobsStatistics( jobsStatistics(
filter: $jobFilter filter: $jobFilter
page: $paging page: $paging
sortBy: TOTALJOBS
groupBy: SUBCLUSTER groupBy: SUBCLUSTER
) { ) {
id id
@@ -179,7 +178,7 @@
metrics: ["flops_any", "mem_bw"], // Fixed names for roofline and status bars metrics: ["flops_any", "mem_bw"], // Fixed names for roofline and status bars
from: from.toISOString(), from: from.toISOString(),
to: to.toISOString(), to: to.toISOString(),
jobFilter: [{ state: ["running"] }, { cluster: { eq: cluster } }], jobFilter: [{ cluster: { eq: cluster } }, { state: ["running"] }],
nodeFilter: { cluster: { eq: cluster }}, nodeFilter: { cluster: { eq: cluster }},
paging: { itemsPerPage: -1, page: 1 }, // Get all: -1 paging: { itemsPerPage: -1, page: 1 }, // Get all: -1
sorting: { field: "startTime", type: "col", order: "DESC" } sorting: { field: "startTime", type: "col", order: "DESC" }

View File

@@ -60,11 +60,11 @@
const statusFilter = $derived( const statusFilter = $derived(
presetSubCluster presetSubCluster
? [ ? [
{ state: ["running"] },
{ cluster: { eq: presetCluster } }, { cluster: { eq: presetCluster } },
{ subCluster: { eq: presetSubCluster } }, { subCluster: { eq: presetSubCluster } },
{ state: ["running"] },
] ]
: [{ state: ["running"] }, { cluster: { eq: presetCluster } }], : [{ cluster: { eq: presetCluster } }, { state: ["running"] }],
); );
const topStatsQuery = $derived( const topStatsQuery = $derived(
loadMe loadMe
@@ -585,4 +585,3 @@
>Cannot render accelerator status charts: No data!</Card >Cannot render accelerator status charts: No data!</Card
> >
{/if} {/if}

View File

@@ -63,8 +63,8 @@
/* Derived */ /* Derived */
const filter = $derived([ const filter = $derived([
{ cluster: { eq: cluster } }, { cluster: { eq: cluster } },
{ node: { contains: nodeData.host } },
{ state: ["running"] }, { state: ["running"] },
{ node: { contains: nodeData.host } },
]); ]);
const nodeJobsData = $derived(queryStore({ const nodeJobsData = $derived(queryStore({
client: client, client: client,