mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2025-10-08 23:24:32 +02:00
.github
api
cmd
configs
init
internal
api
archiver
auth
config
graph
importer
metricDataDispatcher
metricdata
repository
routerConfig
tagger
taskManager
commitJobService.go
compressionService.go
ldapSyncService.go
retentionService.go
stopJobsExceedTime.go
taskManager.go
updateDurationService.go
updateFootprintService.go
util
pkg
tools
web
.gitignore
.goreleaser.yaml
LICENSE
Makefile
README.md
ReleaseNotes.md
go.mod
go.sum
gqlgen.yml
startDemo.sh
tools.go
92 lines
2.0 KiB
Go
92 lines
2.0 KiB
Go
// Copyright (C) NHR@FAU, University Erlangen-Nuremberg.
|
|
// All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
package taskManager
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/ClusterCockpit/cc-backend/internal/config"
|
|
"github.com/ClusterCockpit/cc-backend/internal/repository"
|
|
"github.com/ClusterCockpit/cc-backend/pkg/log"
|
|
"github.com/ClusterCockpit/cc-backend/pkg/schema"
|
|
"github.com/go-co-op/gocron/v2"
|
|
)
|
|
|
|
var (
|
|
s gocron.Scheduler
|
|
jobRepo *repository.JobRepository
|
|
)
|
|
|
|
func parseDuration(s string) (time.Duration, error) {
|
|
interval, err := time.ParseDuration(s)
|
|
if err != nil {
|
|
log.Warnf("Could not parse duration for sync interval: %v",
|
|
s)
|
|
return 0, err
|
|
}
|
|
|
|
if interval == 0 {
|
|
log.Info("TaskManager: Sync interval is zero")
|
|
}
|
|
|
|
return interval, nil
|
|
}
|
|
|
|
func Start() {
|
|
var err error
|
|
jobRepo = repository.GetJobRepository()
|
|
s, err = gocron.NewScheduler()
|
|
if err != nil {
|
|
log.Abortf("Taskmanager Start: Could not create gocron scheduler.\nError: %s\n", err.Error())
|
|
}
|
|
|
|
if config.Keys.StopJobsExceedingWalltime > 0 {
|
|
RegisterStopJobsExceedTime()
|
|
}
|
|
|
|
var cfg struct {
|
|
Retention schema.Retention `json:"retention"`
|
|
Compression int `json:"compression"`
|
|
}
|
|
cfg.Retention.IncludeDB = true
|
|
|
|
if err := json.Unmarshal(config.Keys.Archive, &cfg); err != nil {
|
|
log.Warn("Error while unmarshaling raw config json")
|
|
}
|
|
|
|
switch cfg.Retention.Policy {
|
|
case "delete":
|
|
RegisterRetentionDeleteService(
|
|
cfg.Retention.Age,
|
|
cfg.Retention.IncludeDB)
|
|
case "move":
|
|
RegisterRetentionMoveService(
|
|
cfg.Retention.Age,
|
|
cfg.Retention.IncludeDB,
|
|
cfg.Retention.Location)
|
|
}
|
|
|
|
if cfg.Compression > 0 {
|
|
RegisterCompressionService(cfg.Compression)
|
|
}
|
|
|
|
lc := config.Keys.LdapConfig
|
|
|
|
if lc != nil && lc.SyncInterval != "" {
|
|
RegisterLdapSyncService(lc.SyncInterval)
|
|
}
|
|
|
|
RegisterFootprintWorker()
|
|
RegisterUpdateDurationWorker()
|
|
RegisterCommitJobService()
|
|
|
|
s.Start()
|
|
}
|
|
|
|
func Shutdown() {
|
|
s.Shutdown()
|
|
}
|