mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2025-04-01 18:15:54 +02:00
Merge branch 'master' into dev
This commit is contained in:
commit
d6b132e3a6
2
Makefile
2
Makefile
@ -2,7 +2,7 @@ TARGET = ./cc-backend
|
||||
VAR = ./var
|
||||
CFG = config.json .env
|
||||
FRONTEND = ./web/frontend
|
||||
VERSION = 1.4.2
|
||||
VERSION = 1.4.3
|
||||
GIT_HASH := $(shell git rev-parse --short HEAD || echo 'development')
|
||||
CURRENT_TIME = $(shell date +"%Y-%m-%d:T%H:%M:%S")
|
||||
LD_FLAGS = '-s -X main.date=${CURRENT_TIME} -X main.version=${VERSION} -X main.commit=${GIT_HASH}'
|
||||
|
@ -1,12 +1,12 @@
|
||||
# `cc-backend` version 1.4.2
|
||||
# `cc-backend` version 1.4.3
|
||||
|
||||
Supports job archive version 2 and database version 8.
|
||||
|
||||
This is a small bug fix release of `cc-backend`, the API backend and frontend
|
||||
This is a bug fix release of `cc-backend`, the API backend and frontend
|
||||
implementation of ClusterCockpit.
|
||||
For release specific notes visit the [ClusterCockpit Documentation](https://clusterockpit.org/docs/release/).
|
||||
|
||||
## Breaking changes
|
||||
## Breaking changes for minor release 1.4.x
|
||||
|
||||
- You need to perform a database migration. Depending on your database size the
|
||||
migration might require several hours!
|
||||
@ -22,20 +22,21 @@ For release specific notes visit the [ClusterCockpit Documentation](https://clus
|
||||
|
||||
## New features
|
||||
|
||||
- Tags have a scope now. Tags created by a basic user are only visible by that
|
||||
user. Tags created by an admin/support role can be configured to be visible by
|
||||
all users (global scope) or only be admin/support role.
|
||||
- Re-sampling support for running (requires a recent `cc-metric-store`) and
|
||||
archived jobs. This greatly speeds up loading of large or very long jobs. You
|
||||
need to add the new configuration key `enable-resampling` to the `config.json`
|
||||
file.
|
||||
- For finished jobs a total job energy is shown in the job view.
|
||||
- Continuous scrolling in job lists is default now.
|
||||
- All database queries (especially for sqlite) were optimized resulting in
|
||||
dramatically faster load times.
|
||||
- A performance and energy footprint can be freely configured on a per
|
||||
subcluster base. One can filter for footprint statistics for running and
|
||||
finished jobs.
|
||||
- Detailed Node List
|
||||
- Adds new routes `/systems/list/$cluster` and `/systems/list/$cluster/$subcluster`
|
||||
- Displays live, scoped metric data requested from the nodes indepenent of jobs
|
||||
- Color Blind Mode
|
||||
- Set on a per-user basis in options
|
||||
- Applies to plot data, plot background color, statsseries colors, roofline timescale
|
||||
- Job-View metric selection is now persisted based on the jobs subcluster.
|
||||
Helpful for heterogeneous subcluster configurations.
|
||||
- Histogram Bin Select in User-View
|
||||
- Metric-Histograms: `10 Bins` now default, selectable options `20, 50, 100`
|
||||
- Job-Duration-Histogram: `48h in 1h Bins` now default, selectable options:
|
||||
- `60 minutes in 1 minute Bins`
|
||||
- `12 hours in 10 minute Bins`
|
||||
- `3 days in 6 hour Bins`
|
||||
- `7 days in 12 hour Bins`
|
||||
|
||||
## Known issues
|
||||
|
||||
|
@ -391,30 +391,28 @@ func (r *queryResolver) Jobs(ctx context.Context, filter []*model.JobFilter, pag
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if !config.Keys.UiDefaults["job_list_usePaging"].(bool) {
|
||||
hasNextPage := false
|
||||
// page.Page += 1 : Simple, but expensive
|
||||
// Example Page 4 @ 10 IpP : Does item 41 exist?
|
||||
// Minimal Page 41 @ 1 IpP : If len(result) is 1, Page 5 @ 10 IpP exists.
|
||||
nextPage := &model.PageRequest{
|
||||
ItemsPerPage: 1,
|
||||
Page: ((page.Page * page.ItemsPerPage) + 1),
|
||||
}
|
||||
|
||||
nextJobs, err := r.Repo.QueryJobs(ctx, filter, nextPage, order)
|
||||
if err != nil {
|
||||
log.Warn("Error while querying next jobs")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(nextJobs) == 1 {
|
||||
hasNextPage = true
|
||||
}
|
||||
|
||||
return &model.JobResultList{Items: jobs, Count: &count, HasNextPage: &hasNextPage}, nil
|
||||
} else {
|
||||
return &model.JobResultList{Items: jobs, Count: &count}, nil
|
||||
// Note: Even if App-Default 'config.Keys.UiDefaults["job_list_usePaging"]' is set, always return hasNextPage boolean.
|
||||
// Users can decide in frontend to use continuous scroll, even if app-default is paging!
|
||||
/*
|
||||
Example Page 4 @ 10 IpP : Does item 41 exist?
|
||||
Minimal Page 41 @ 1 IpP : If len(result) is 1, Page 5 @ 10 IpP exists.
|
||||
*/
|
||||
nextPage := &model.PageRequest{
|
||||
ItemsPerPage: 1,
|
||||
Page: ((page.Page * page.ItemsPerPage) + 1),
|
||||
}
|
||||
nextJobs, err := r.Repo.QueryJobs(ctx, filter, nextPage, order)
|
||||
if err != nil {
|
||||
log.Warn("Error while querying next jobs")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
hasNextPage := false
|
||||
if len(nextJobs) == 1 {
|
||||
hasNextPage = true
|
||||
}
|
||||
|
||||
return &model.JobResultList{Items: jobs, Count: &count, HasNextPage: &hasNextPage}, nil
|
||||
}
|
||||
|
||||
// JobsStatistics is the resolver for the jobsStatistics field.
|
||||
|
@ -218,7 +218,7 @@
|
||||
<Col xs={12} md={6} xl={3} class="mb-3 mb-xxl-0">
|
||||
{#if $initq.error}
|
||||
<Card body color="danger">{$initq.error.message}</Card>
|
||||
{:else if $initq.data}
|
||||
{:else if $initq?.data}
|
||||
<Card class="overflow-auto" style="height: 400px;">
|
||||
<TabContent> <!-- on:tab={(e) => (status = e.detail)} -->
|
||||
{#if $initq.data?.job?.metaData?.message}
|
||||
@ -292,7 +292,7 @@
|
||||
<Card class="mb-3">
|
||||
<CardBody>
|
||||
<Row class="mb-2">
|
||||
{#if $initq.data}
|
||||
{#if $initq?.data}
|
||||
<Col xs="auto">
|
||||
<Button outline on:click={() => (isMetricsSelectionOpen = true)} color="primary">
|
||||
Select Metrics (Selected {selectedMetrics.length} of {availableMetrics.size} available)
|
||||
@ -305,7 +305,7 @@
|
||||
{#if $jobMetrics.error}
|
||||
<Row class="mt-2">
|
||||
<Col>
|
||||
{#if $initq.data.job.monitoringStatus == 0 || $initq.data.job.monitoringStatus == 2}
|
||||
{#if $initq?.data && ($initq.data.job?.monitoringStatus == 0 || $initq.data.job?.monitoringStatus == 2)}
|
||||
<Card body color="warning">Not monitored or archiving failed</Card>
|
||||
<br />
|
||||
{/if}
|
||||
@ -351,7 +351,7 @@
|
||||
<!-- Statistcics Table -->
|
||||
<Row class="mb-3">
|
||||
<Col>
|
||||
{#if $initq.data}
|
||||
{#if $initq?.data}
|
||||
<Card>
|
||||
<TabContent>
|
||||
{#if somethingMissing}
|
||||
@ -412,7 +412,7 @@
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
{#if $initq.data}
|
||||
{#if $initq?.data}
|
||||
<MetricSelection
|
||||
cluster={$initq.data.job.cluster}
|
||||
subCluster={$initq.data.job.subCluster}
|
||||
|
Loading…
x
Reference in New Issue
Block a user