Cyclops 4 HPC is the purpose built stack to support large HPC centers with resource accounting and billing of cluster as well as cloud resources.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
cyclops-4-hpc/extensions/lexis/server/triggerManager/triggerManager.go

133 lines
3.3 KiB

package triggerManager
import (
"context"
"net/http"
"strings"
"time"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/strfmt"
"github.com/Cyclops-Labs/cyclops-4-hpc.git/extensions/lexis/models"
"github.com/Cyclops-Labs/cyclops-4-hpc.git/extensions/lexis/restapi/operations/trigger_management"
"github.com/Cyclops-Labs/cyclops-4-hpc.git/extensions/lexis/server/dbManager"
"github.com/Cyclops-Labs/cyclops-4-hpc.git/extensions/lexis/server/statusManager"
udrClient "github.com/Cyclops-Labs/cyclops-4-hpc.git/services/udr/client"
udrTrigger "github.com/Cyclops-Labs/cyclops-4-hpc.git/services/udr/client/trigger_management"
l "gitlab.com/cyclops-utilities/logging"
)
const (
scaler = 1e4
statusDuplicated = iota
statusFail
statusMissing
statusOK
)
type TriggerManager struct {
db *dbManager.DbParameter
monit *statusManager.StatusManager
}
var returnValue models.ErrorResponse
// New is the function to create the struct TriggerManager.
// Returns:
// - TriggerManager: *struct to interact with LoaderManager subsystem functionalities.
func New(db *dbManager.DbParameter, monit *statusManager.StatusManager) *TriggerManager {
l.Trace.Printf("[TriggerManager] Generating new triggerManager.\n")
monit.InitEndpoint("trigger")
// Default return string in case something weird happens.
// It usually means that something went wrong in the dbManager.
s := "Something unexpected happened, check with the administrator."
returnValue = models.ErrorResponse{
ErrorString: &s,
}
return &TriggerManager{
db: db,
monit: monit,
}
}
// getToken job is to retrieve the keycloak bearer token from the Http.Request.
// Parameters:
// - http.Request parameter to extract the keycloak bearer token if exists.
// Returns:
// - string with the optional Keycloak bearer token.
func (m *TriggerManager) getToken(param *http.Request) (token string) {
if len(param.Header.Get("Authorization")) > 0 {
token = strings.Fields(param.Header.Get("Authorization"))[1]
}
return
}
func (m *TriggerManager) UDRRedo(ctx context.Context, params trigger_management.UDRRedoParams) middleware.Responder {
l.Trace.Printf("[Trigger] Generate Reports endpoint invoked.\n")
callTime := time.Now()
m.monit.APIHit("trigger", callTime)
go func() {
client := udrClient.New(m.db.Configs.UDR)
increment, _ := time.ParseDuration(*params.Interval)
f := (time.Time)(*params.From)
end := (time.Time)(*params.To)
from := strfmt.DateTime(f)
f = f.Add(increment)
to := strfmt.DateTime(f)
for end.Sub(f.Add(-increment)) >= increment {
l.Trace.Printf("UDR Compact requested for %v to %v", from, to)
params := udrTrigger.NewExecCompactationParams().WithFrom(&from).WithTo(&to)
ctx = context.Background()
_, e := client.TriggerManagement.ExecCompactation(ctx, params)
if e != nil {
l.Warning.Printf("There was a problem while compacting UDR from [ %v ], to [ %v ]. Error: %v", from, to, e)
} else {
l.Trace.Printf("UDR Compact completed for %v to %v", from, to)
}
from = to
f = f.Add(increment)
to = strfmt.DateTime(f)
time.Sleep(1 * time.Second)
}
m.monit.APIHitDone("trigger", callTime)
}()
returnValue := models.ItemCreatedResponse{
Message: "Report generation started",
}
return trigger_management.NewUDRRedoOK().WithPayload(&returnValue)
}