Skip to content

Commit f158eaa

Browse files
exterr2fexterr2f
exterr2f
authored and
exterr2f
committed
Add default_metrics.json which sets the defaults for job_view_selectedMetrics:cluster for new users
1 parent 86d85f1 commit f158eaa

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

configs/default_metrics.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"clusters": [
3+
{
4+
"name": "fritz",
5+
"default_metrics": "cpu_load, flops_any, core_power, lustre_open, mem_used, mem_bw, net_bytes_in"
6+
},
7+
{
8+
"name": "alex",
9+
"default_metrics": "flops_any, mem_bw, mem_used, vectorization_ratio"
10+
}
11+
]
12+
}

internal/config/default_metrics.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package config
2+
3+
import (
4+
"encoding/json"
5+
"os"
6+
"strings"
7+
)
8+
9+
type DefaultMetricsCluster struct {
10+
Name string `json:"name"`
11+
DefaultMetrics string `json:"default_metrics"`
12+
}
13+
14+
type DefaultMetricsConfig struct {
15+
Clusters []DefaultMetricsCluster `json:"clusters"`
16+
}
17+
18+
func LoadDefaultMetricsConfig() (*DefaultMetricsConfig, error) {
19+
filePath := "configs/default_metrics.json"
20+
if _, err := os.Stat(filePath); os.IsNotExist(err) {
21+
return nil, nil
22+
}
23+
data, err := os.ReadFile(filePath)
24+
if err != nil {
25+
return nil, err
26+
}
27+
var cfg DefaultMetricsConfig
28+
if err := json.Unmarshal(data, &cfg); err != nil {
29+
return nil, err
30+
}
31+
return &cfg, nil
32+
}
33+
34+
func ParseMetricsString(s string) []string {
35+
parts := strings.Split(s, ",")
36+
var metrics []string
37+
for _, p := range parts {
38+
trimmed := strings.TrimSpace(p)
39+
if trimmed != "" {
40+
metrics = append(metrics, trimmed)
41+
}
42+
}
43+
return metrics
44+
}

internal/repository/user.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
sq "github.com/Masterminds/squirrel"
2020
"github.com/jmoiron/sqlx"
2121
"golang.org/x/crypto/bcrypt"
22+
"github.com/ClusterCockpit/cc-backend/internal/config"
2223
)
2324

2425
var (
@@ -127,6 +128,30 @@ func (r *UserRepository) AddUser(user *schema.User) error {
127128
}
128129

129130
log.Infof("new user %#v created (roles: %s, auth-source: %d, projects: %s)", user.Username, rolesJson, user.AuthSource, projectsJson)
131+
132+
defaultMetricsCfg, err := config.LoadDefaultMetricsConfig()
133+
if err != nil {
134+
log.Errorf("Error loading default metrics config: %v", err)
135+
} else if defaultMetricsCfg != nil {
136+
for _, cluster := range defaultMetricsCfg.Clusters {
137+
metricsArray := config.ParseMetricsString(cluster.DefaultMetrics)
138+
metricsJSON, err := json.Marshal(metricsArray)
139+
if err != nil {
140+
log.Errorf("Error marshaling default metrics for cluster %s: %v", cluster.Name, err)
141+
continue
142+
}
143+
confKey := "job_view_selectedMetrics:" + cluster.Name
144+
if _, err := sq.Insert("configuration").
145+
Columns("username", "confkey", "value").
146+
Values(user.Username, confKey, string(metricsJSON)).
147+
RunWith(r.DB).Exec(); err != nil {
148+
log.Errorf("Error inserting default job view metrics for user %s and cluster %s: %v", user.Username, cluster.Name, err)
149+
} else {
150+
log.Infof("Default job view metrics for user %s and cluster %s set to %s", user.Username, cluster.Name, string(metricsJSON))
151+
}
152+
}
153+
}
154+
130155
return nil
131156
}
132157

0 commit comments

Comments
 (0)