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.
104 lines
3.2 KiB
104 lines
3.2 KiB
package triggerManager
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/go-openapi/runtime/middleware"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/billing/models"
|
|
"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/billing/restapi/operations/trigger_management"
|
|
"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/billing/server/dbManager"
|
|
"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/billing/server/statusManager"
|
|
l "gitlab.com/cyclops-utilities/logging"
|
|
)
|
|
|
|
// TriggerManager is the struct defined to group and contain all the methods
|
|
// that interact with the trigger subsystem.
|
|
// Parameters:
|
|
// - db: a DbParameter reference to be able to use the DBManager methods.
|
|
// - monit: a StatusManager reference to be able to use the status subsystem methods.
|
|
// - BasePath: a string with the base path of the system.
|
|
type TriggerManager struct {
|
|
db *dbManager.DbParameter
|
|
monit *statusManager.StatusManager
|
|
BasePath string
|
|
}
|
|
|
|
// New is the function to create the struct TriggerManager.
|
|
// Parameters:
|
|
// - DbParameter: reference pointing to the DbParameter that allows the interaction
|
|
// with the DBManager methods.
|
|
// - StatusParameter: reference poining to the StatusManager that allows the
|
|
// interaction with the StatusManager methods.
|
|
// - bp: a string containing the base path of the service.
|
|
// Returns:
|
|
// - TriggerManager: struct to interact with TriggerManager subsystem functionalities.
|
|
func New(db *dbManager.DbParameter, monit *statusManager.StatusManager, bp string) *TriggerManager {
|
|
|
|
l.Trace.Printf("[TriggerManager] Generating new triggerManager.\n")
|
|
|
|
monit.InitEndpoint("trigger")
|
|
|
|
return &TriggerManager{
|
|
db: db,
|
|
monit: monit,
|
|
BasePath: bp,
|
|
}
|
|
|
|
}
|
|
|
|
// getToken job is to extract the Keycloak Bearer token from the http header.
|
|
// Parameters:
|
|
// - param: a pointer to the http.Request object from which extract.
|
|
// Returns:
|
|
// - token: a string containing the extracted token or an empty one in case of
|
|
// no token available.
|
|
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
|
|
|
|
}
|
|
|
|
// PeriodicRun (Swagger func) is the function behind the (GET)
|
|
// /trigger/periodicrun endpoint.
|
|
// It is a dummy function for reference.
|
|
func (m *TriggerManager) PeriodicRun(ctx context.Context, params trigger_management.PeriodicRunParams) middleware.Responder {
|
|
|
|
l.Trace.Printf("[Trigger] Periodic endpoint invoked.\n")
|
|
|
|
callTime := time.Now()
|
|
m.monit.APIHit("trigger", callTime)
|
|
|
|
token := m.getToken(params.HTTPRequest)
|
|
|
|
if params.Today != nil {
|
|
|
|
go m.db.InvoicesGeneration(map[string]interface{}{"today": *params.Today}, token)
|
|
|
|
} else {
|
|
|
|
go m.db.InvoicesGeneration(nil, token)
|
|
|
|
}
|
|
|
|
acceptedReturn := models.ItemCreatedResponse{
|
|
APILink: m.BasePath + "/billrun",
|
|
Message: "The autonomous periodic run for billing generation has been started...",
|
|
}
|
|
|
|
m.db.Metrics["api"].With(prometheus.Labels{"code": "202", "method": "GET", "route": "/trigger/periodicrun"}).Inc()
|
|
|
|
m.monit.APIHitDone("trigger", callTime)
|
|
|
|
return trigger_management.NewPeriodicRunAccepted().WithPayload(&acceptedReturn)
|
|
|
|
}
|
|
|