mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2024-12-26 21:39:06 +01:00
91 lines
1.9 KiB
Go
91 lines
1.9 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.Fatalf("Error while creating gocron scheduler: %s", 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()
|
|
|
|
s.Start()
|
|
}
|
|
|
|
func Shutdown() {
|
|
s.Shutdown()
|
|
}
|