From e296cd7ca0ed73165cf4f42cb502e95defafc325 Mon Sep 17 00:00:00 2001 From: Christoph Kluge Date: Wed, 8 Oct 2025 16:25:50 +0200 Subject: [PATCH] add web init with uiconfig file path, add cli flag --- .gitignore | 1 + cmd/cc-backend/cli.go | 3 ++- cmd/cc-backend/server.go | 2 ++ configs/uiConfig.json | 45 ++++++++++++++++++++++++++++++++++++++++ web/web.go | 15 ++++++++++++-- 5 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 configs/uiConfig.json diff --git a/.gitignore b/.gitignore index 963073d..840f607 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /cc-backend /.env /config.json +/uiConfig.json /var/job-archive /var/machine-state diff --git a/cmd/cc-backend/cli.go b/cmd/cc-backend/cli.go index 235a12c..72a0a6d 100644 --- a/cmd/cc-backend/cli.go +++ b/cmd/cc-backend/cli.go @@ -9,7 +9,7 @@ import "flag" var ( flagReinitDB, flagInit, flagServer, flagSyncLDAP, flagGops, flagMigrateDB, flagRevertDB, flagForceDB, flagDev, flagVersion, flagLogDateTime, flagApplyTags bool - flagNewUser, flagDelUser, flagGenJWT, flagConfigFile, flagImportJob, flagLogLevel string + flagNewUser, flagDelUser, flagGenJWT, flagConfigFile, flagUiConfigFile, flagImportJob, flagLogLevel string ) func cliInit() { @@ -26,6 +26,7 @@ func cliInit() { flag.BoolVar(&flagForceDB, "force-db", false, "Force database version, clear dirty flag and exit") flag.BoolVar(&flagLogDateTime, "logdate", false, "Set this flag to add date and time to log messages") flag.StringVar(&flagConfigFile, "config", "./config.json", "Specify alternative path to `config.json`") + flag.StringVar(&flagUiConfigFile, "ui-config", "./uiConfig.json", "Specify alternative path to `uiConfig.json`") flag.StringVar(&flagNewUser, "add-user", "", "Add a new user. Argument format: :[admin,support,manager,api,user]:") flag.StringVar(&flagDelUser, "del-user", "", "Remove a existing user. Argument format: ") flag.StringVar(&flagGenJWT, "jwt", "", "Generate and print a JWT for the user specified by its `username`") diff --git a/cmd/cc-backend/server.go b/cmd/cc-backend/server.go index deffb48..da14e1e 100644 --- a/cmd/cc-backend/server.go +++ b/cmd/cc-backend/server.go @@ -52,6 +52,8 @@ func onFailureResponse(rw http.ResponseWriter, r *http.Request, err error) { } func serverInit() { + // Init Web Package (Primarily: uiDefaults) + web.Init(flagUiConfigFile) // Setup the http.Handler/Router used by the server graph.Init() resolver := graph.GetResolverInstance() diff --git a/configs/uiConfig.json b/configs/uiConfig.json new file mode 100644 index 0000000..2a3ed30 --- /dev/null +++ b/configs/uiConfig.json @@ -0,0 +1,45 @@ +{ + "jobList": { + "usePaging": false, + "showFootprint":false + }, + "jobView": { + "showPolarPlot": true, + "showFootprint": true, + "showRoofline": true, + "showStatTable": true + }, + "metricConfig": { + "jobListMetrics": ["mem_bw", "flops_dp"], + "jobViewPlotMetrics": ["mem_bw", "flops_dp"], + "jobViewTableMetrics": ["mem_bw", "flops_dp"], + "clusters": [ + { + "name": "test", + "subClusters": [ + { + "name": "one", + "jobListMetrics": ["mem_used", "flops_sp"] + } + ] + } + ] + }, + "nodeList": { + "usePaging": true + }, + "plotConfiguration": { + "plotsPerRow": 3, + "colorBackground": true, + "lineWidth": 3, + "colorScheme": [ + "#00bfff", + "#0000ff", + "#ff00ff", + "#ff0000", + "#ff8000", + "#ffff00", + "#80ff00" + ] + } +} diff --git a/web/web.go b/web/web.go index 31d7002..da64fcd 100644 --- a/web/web.go +++ b/web/web.go @@ -11,7 +11,9 @@ import ( "encoding/json" "html/template" "io/fs" + "log" "net/http" + "os" "strings" "github.com/ClusterCockpit/cc-backend/internal/config" @@ -115,9 +117,18 @@ var UIDefaultsMap map[string]any // "status_view_selectedTopProjectCategory": "totalJobs", // } -func Init(rawConfig json.RawMessage) error { - var err error +func Init(configFilePath string) error { + var rawConfig json.RawMessage = nil + raw, rerr := os.ReadFile(configFilePath) + if rerr != nil { + if !os.IsNotExist(rerr) { + log.Fatalf("UI-CONFIG ERROR: %v", rerr) + } + } else { + rawConfig = json.RawMessage(raw) + } + var err error if rawConfig != nil { config.Validate(configSchema, rawConfig) if err = json.Unmarshal(rawConfig, &UIDefaults); err != nil {