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.
81 lines
2.6 KiB
81 lines
2.6 KiB
package metricsManager
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/go-openapi/runtime/middleware"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/udr/models"
|
|
"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/udr/restapi/operations/metrics_management"
|
|
"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/udr/server/dbManager"
|
|
"github.com/Cyclops-Labs/cyclops-4-hpc.git/services/udr/server/statusManager"
|
|
l "gitlab.com/cyclops-utilities/logging"
|
|
)
|
|
|
|
// MetricsManager is the struct defined to group and contain all the methods
|
|
// that interact with the Metrics endpoint.
|
|
// 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.
|
|
type MetricsManager struct {
|
|
db *dbManager.DbParameter
|
|
monit *statusManager.StatusManager
|
|
}
|
|
|
|
// New is the function to create the struct MetricsManager that grant
|
|
// access to the methods to interact with the metrics endpoint.
|
|
// Parameters:
|
|
// - db: a reference to the DbParameter to be able to interact with the db methods.
|
|
// - monit: a reference to the StatusManager to be able to interact with the
|
|
// status subsystem.
|
|
// Returns:
|
|
// - ResellerManager: struct to interact with the metrics endpoint functionalities.
|
|
func New(db *dbManager.DbParameter, monit *statusManager.StatusManager) *MetricsManager {
|
|
|
|
l.Trace.Printf("[MetricsManager] Generating new MetricsManager.\n")
|
|
|
|
monit.InitEndpoint("metrics")
|
|
|
|
return &MetricsManager{
|
|
db: db,
|
|
monit: monit,
|
|
}
|
|
|
|
}
|
|
|
|
// GetMetrics (Swagger func) is the function behind the (GET) endpoint
|
|
// /metrics
|
|
// Its job is to provide a list of the metrics saved in the system that can be
|
|
// used for filtering the usage report.
|
|
func (m *MetricsManager) GetMetrics(ctx context.Context, params metrics_management.GetMetricsParams) middleware.Responder {
|
|
|
|
l.Trace.Printf("[MetricsManager] GetMetrics endpoint invoked.\n")
|
|
|
|
callTime := time.Now()
|
|
m.monit.APIHit("metrics", callTime)
|
|
|
|
metrics, e := m.db.GetMetrics()
|
|
|
|
if e == nil {
|
|
|
|
m.db.Metrics["api"].With(prometheus.Labels{"code": "200", "method": "GET", "route": "/metrics"}).Inc()
|
|
|
|
m.monit.APIHitDone("metrics", callTime)
|
|
|
|
return metrics_management.NewGetMetricsOK().WithPayload(metrics)
|
|
|
|
}
|
|
|
|
s := "There was an error retrieving the Metrics from the system: " + e.Error()
|
|
errorReturn := models.ErrorResponse{
|
|
ErrorString: &s,
|
|
}
|
|
|
|
m.db.Metrics["api"].With(prometheus.Labels{"code": "500", "method": "GET", "route": "/metrics"}).Inc()
|
|
|
|
m.monit.APIHitDone("metrics", callTime)
|
|
|
|
return metrics_management.NewGetMetricsInternalServerError().WithPayload(&errorReturn)
|
|
|
|
}
|
|
|