mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2025-06-08 16:43:49 +02:00
89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
// Copyright (C) 2023 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 tagger
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/ClusterCockpit/cc-backend/internal/repository"
|
|
"github.com/ClusterCockpit/cc-backend/pkg/log"
|
|
"github.com/ClusterCockpit/cc-backend/pkg/schema"
|
|
)
|
|
|
|
type Tagger interface {
|
|
Register() error
|
|
Match(job *schema.Job)
|
|
}
|
|
|
|
var (
|
|
initOnce sync.Once
|
|
jobTagger *JobTagger
|
|
)
|
|
|
|
type JobTagger struct {
|
|
startTaggers []Tagger
|
|
stopTaggers []Tagger
|
|
}
|
|
|
|
func newTagger() {
|
|
jobTagger = &JobTagger{}
|
|
jobTagger.startTaggers = make([]Tagger, 0)
|
|
jobTagger.startTaggers = append(jobTagger.startTaggers, &AppTagger{})
|
|
jobTagger.stopTaggers = make([]Tagger, 0)
|
|
jobTagger.stopTaggers = append(jobTagger.stopTaggers, &JobClassTagger{})
|
|
|
|
for _, tagger := range jobTagger.startTaggers {
|
|
tagger.Register()
|
|
}
|
|
for _, tagger := range jobTagger.stopTaggers {
|
|
tagger.Register()
|
|
}
|
|
}
|
|
|
|
func Init() {
|
|
initOnce.Do(func() {
|
|
newTagger()
|
|
repository.RegisterJobJook(jobTagger)
|
|
})
|
|
}
|
|
|
|
func (jt *JobTagger) JobStartCallback(job *schema.Job) {
|
|
for _, tagger := range jt.startTaggers {
|
|
tagger.Match(job)
|
|
}
|
|
}
|
|
|
|
func (jt *JobTagger) JobStopCallback(job *schema.Job) {
|
|
for _, tagger := range jt.stopTaggers {
|
|
tagger.Match(job)
|
|
}
|
|
}
|
|
|
|
func RunTaggers() error {
|
|
newTagger()
|
|
r := repository.GetJobRepository()
|
|
jl, err := r.GetJobList()
|
|
if err != nil {
|
|
log.Errorf("Error while getting job list %s", err)
|
|
return err
|
|
}
|
|
|
|
for _, id := range jl {
|
|
job, err := r.FindByIdDirect(id)
|
|
if err != nil {
|
|
log.Errorf("Error while getting job %s", err)
|
|
return err
|
|
}
|
|
for _, tagger := range jobTagger.startTaggers {
|
|
tagger.Match(job)
|
|
}
|
|
for _, tagger := range jobTagger.stopTaggers {
|
|
log.Infof("Run stop tagger for job %d", job.ID)
|
|
tagger.Match(job)
|
|
}
|
|
}
|
|
return nil
|
|
}
|