This commit is contained in:
2025-04-09 11:21:07 +03:00
parent 3f21a89e80
commit 8a101c6fcb
115 changed files with 2342 additions and 429 deletions

View File

@@ -0,0 +1,77 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
const (
ComputeCPULoad = "computeCPUload"
ComputeMemoryUsage = "computeMemoryUsage"
ComputeMemoryUsable = "computeMemoryUsable"
ComputeMemoryUnused = "computeMemoryUnused"
ComputeMemoryUsed = "computeMemoryUsed"
ComputeMemoryAvailable = "computeMemoryAvailable"
ComputeReadBytes = "computeReadBytes"
ComputeReadRequests = "computeReadRequests"
ComputeReceiveBytes = "computeReceiveBytes"
ComputeTransmitBytes = "computeTransmitBytes"
ComputeTransmitPackets = "computeTransmitPackets"
ComputeWriteBytes = "computeWriteBytes"
ComputeWriteRequests = "computeWriteRequests"
)
type ComputesRequest struct {
// List of compute IDs to fetch metrics for
// Required: true
ComputeIDs []uint64 `url:"computeIds" json:"computeIds" validate:"required"`
// List of compute IDs to fetch metrics for
// Required: true
MetricIDs []string `url:"metricIds" json:"metricIds" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Get multiple metrics for multiple compute instances
func (p Prometheus) Computes(ctx context.Context, req ComputesRequest) (*ComputesData, error) {
res, err := p.ComputesRaw(ctx, req)
if err != nil {
return nil, err
}
info := ComputesData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputesRaw(ctx context.Context, req ComputesRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computes"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -11,3 +11,30 @@ type PrometheusPoint struct {
// Timestamp the Unix timestamp.
Timestamp uint64 `json:"timestamp"`
}
// ComputesData represents an array of data points for computes
type ComputesData []ItemCompute
// ItemCompute represents a single data of compute
type ItemCompute struct {
// Compute ID
ComputeID uint64 `json:"computeId"`
// Array of metrics
Metrics []ItemMetric `json:"metrics"`
// Error
Error string `json:"error"`
}
// ItemMetric represents a single data point of metric
type ItemMetric struct {
// Metric ID
MetricID string `json:"metricId"`
// Data represents an array of data points
Data PrometheusData `json:"data"`
// Error
Error string `json:"error"`
}