From 3f21a89e803f0c95f2d4a669cb032933c3a932cb Mon Sep 17 00:00:00 2001 From: asteam Date: Tue, 11 Mar 2025 13:09:17 +0300 Subject: [PATCH] v1.10.2 --- CHANGELOG.md | 37 ++------ README.md | 6 ++ pkg/cloudbroker/prometheus.go | 8 ++ .../prometheus/compute_cpu_load.go | 57 ++++++++++++ .../prometheus/compute_memory_available.go | 53 +++++++++++ .../prometheus/compute_memory_unused.go | 53 +++++++++++ .../prometheus/compute_memory_usable.go | 53 +++++++++++ .../prometheus/compute_memory_usage.go | 53 +++++++++++ .../prometheus/compute_memory_used.go | 53 +++++++++++ .../prometheus/compute_read_bytes.go | 57 ++++++++++++ .../prometheus/compute_read_requests.go | 57 ++++++++++++ .../prometheus/compute_receive_bytes.go | 57 ++++++++++++ .../prometheus/compute_receive_packets.go | 57 ++++++++++++ .../prometheus/compute_transmit_bytes.go | 57 ++++++++++++ .../prometheus/compute_transmit_packets.go | 57 ++++++++++++ .../prometheus/compute_write_bytes.go | 57 ++++++++++++ .../prometheus/compute_write_requests.go | 57 ++++++++++++ pkg/cloudbroker/prometheus/models.go | 13 +++ pkg/cloudbroker/prometheus/prometheus.go | 17 ++++ pkg/cloudbroker/resmon.go | 10 +++ pkg/cloudbroker/resmon/get_by_compute.go | 53 +++++++++++ pkg/cloudbroker/resmon/get_by_computes.go | 49 ++++++++++ pkg/cloudbroker/resmon/get_by_grid.go | 49 ++++++++++ pkg/cloudbroker/resmon/get_by_stack.go | 53 +++++++++++ pkg/cloudbroker/resmon/get_by_stacks.go | 49 ++++++++++ pkg/cloudbroker/resmon/models.go | 89 +++++++++++++++++++ pkg/cloudbroker/resmon/resmon.go | 15 ++++ 27 files changed, 1194 insertions(+), 32 deletions(-) create mode 100644 pkg/cloudbroker/prometheus.go create mode 100644 pkg/cloudbroker/prometheus/compute_cpu_load.go create mode 100644 pkg/cloudbroker/prometheus/compute_memory_available.go create mode 100644 pkg/cloudbroker/prometheus/compute_memory_unused.go create mode 100644 pkg/cloudbroker/prometheus/compute_memory_usable.go create mode 100644 pkg/cloudbroker/prometheus/compute_memory_usage.go create mode 100644 pkg/cloudbroker/prometheus/compute_memory_used.go create mode 100644 pkg/cloudbroker/prometheus/compute_read_bytes.go create mode 100644 pkg/cloudbroker/prometheus/compute_read_requests.go create mode 100644 pkg/cloudbroker/prometheus/compute_receive_bytes.go create mode 100644 pkg/cloudbroker/prometheus/compute_receive_packets.go create mode 100644 pkg/cloudbroker/prometheus/compute_transmit_bytes.go create mode 100644 pkg/cloudbroker/prometheus/compute_transmit_packets.go create mode 100644 pkg/cloudbroker/prometheus/compute_write_bytes.go create mode 100644 pkg/cloudbroker/prometheus/compute_write_requests.go create mode 100644 pkg/cloudbroker/prometheus/models.go create mode 100644 pkg/cloudbroker/prometheus/prometheus.go create mode 100644 pkg/cloudbroker/resmon.go create mode 100644 pkg/cloudbroker/resmon/get_by_compute.go create mode 100644 pkg/cloudbroker/resmon/get_by_computes.go create mode 100644 pkg/cloudbroker/resmon/get_by_grid.go create mode 100644 pkg/cloudbroker/resmon/get_by_stack.go create mode 100644 pkg/cloudbroker/resmon/get_by_stacks.go create mode 100644 pkg/cloudbroker/resmon/models.go create mode 100644 pkg/cloudbroker/resmon/resmon.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 993d48f..5dbf850 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,40 +1,13 @@ -## Version 1.10.1 +## Version 1.10.2 ### Добавлено -#### compute +#### prometheus | Идентификатор
задачи | Описание | | --- | --- | -| BGOS-268 | Вычисляемое поле `PreferredCPU` в моделях `RecordCompute, ItemCompute, InfoCompute` в cloudapi/compute и cloudbroker/compute | -| BGOS-268 | Опциональное поле `PreferredCPU` в структурах `ResizeRequest, UpdateRequest` в cloudapi/compute и cloudbroker/compute | +| BGOS-335 | Группа ручек cloudbroker/prometheus | -#### kvmx86 +#### resmon | Идентификатор
задачи | Описание | | --- | --- | -| BGOS-268 | Опциональное поле `PreferredCPU` в структурах `CreateRequest, CreateBlankRequest` в cloudapi/kvmx86 и cloudbroker/kvmx86 | - -#### node -| Идентификатор
задачи | Описание | -| --- | --- | -| BGOS-270 | Вычисляемые поля `DPDK, UEFIFirmwareFile` в модели `ItemNode` в cloudbroker/node | -| BGOS-271 | Вычисляемые поля `DPDK, NetworkMode, ToActive, ToInstalling, ToMaintenance, ToRestricted` в моделях `RecordNode` в cloudbroker/node | - -#### sep -| Идентификатор
задачи | Описание | -| --- | --- | -| BGOS-273 | Вычисляемое поле `MultipathNum` в модели `RecordSEP` cloudbroker/sep | - -#### vins -| Идентификатор
задачи | Описание | -| --- | --- | -| BGOS-265 | Вычисляемое поле `AccoundID` в модели `ItemReservation` в cloudbroker/vins | - -### Удалено - -#### sep -| Идентификатор
задачи | Описание | -| --- | --- | -| BGOS-272 | Вычисляемые поля `_ckey,_meta` в модели `RecordSEP` в cloudbroker/sep | - - - +| BGOS-336 | Группа ручек cloudbroker/resmon | \ No newline at end of file diff --git a/README.md b/README.md index 1ab007b..b0f39a1 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,8 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk - `LB` - управление балансировщиками нагрузки; - `Node` - управление нодами платформы; - `PCIDevice` - управление устройствами; +- `Prometheus` - получение статистики prometheus; +- `Resmon` - получение статистики resource monitoring; - `RG` - управление ресурсными группами аккаунта; - `SEP` - управление storage endpoint (sep); - `Stack` - получение информации о вычислительных узлах; @@ -319,6 +321,8 @@ func main() { - `pkg/cloudbroker/lb` - для `LB` - `pkg/cloudbroker/node` - для `Node` - `pkg/cloudbroker/pcidevice` - для `PCIDevice` + - `pkg/cloudbroker/prometheus` - для `Prometheus` + - `pkg/cloudbroker/resmon` - для `Resmon` - `pkg/cloudbroker/rg` - для `RG` - `pkg/cloudbroker/sep` - для `SEP` - `pkg/cloudbroker/stack` - для `Stack` @@ -505,6 +509,8 @@ func main() { - `.LB()` - для работы с `LB` - `.Node()` - для работы с `Node` - `.PCIDevice()` - для работы с `PCIDevice` + - `.Prometheus()` - для работы с `Prometheus` + - `.Resmon()` - для работы с `Resmon` - `.RG()` - для работы с `RG` - `.SEP()` - для работы с `SEP` - `.Stack()` - для работы с `Stack` diff --git a/pkg/cloudbroker/prometheus.go b/pkg/cloudbroker/prometheus.go new file mode 100644 index 0000000..1d92899 --- /dev/null +++ b/pkg/cloudbroker/prometheus.go @@ -0,0 +1,8 @@ +package cloudbroker + +import "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/prometheus" + +// Accessing the Prometheus method group +func (cb *CloudBroker) Prometheus() *prometheus.Prometheus { + return prometheus.New(cb.client) +} diff --git a/pkg/cloudbroker/prometheus/compute_cpu_load.go b/pkg/cloudbroker/prometheus/compute_cpu_load.go new file mode 100644 index 0000000..e5b6ffd --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_cpu_load.go @@ -0,0 +1,57 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeCPULoadRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Per-second CPU time consumed by Compute in percent, average over the time step specified +func (p Prometheus) ComputeCPULoad(ctx context.Context, req ComputeCPULoadRequest) (*PrometheusData, error) { + res, err := p.ComputeCPULoadRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeCPULoadRaw(ctx context.Context, req ComputeCPULoadRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeCPUload" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_memory_available.go b/pkg/cloudbroker/prometheus/compute_memory_available.go new file mode 100644 index 0000000..e0379f3 --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_memory_available.go @@ -0,0 +1,53 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeMemoryAvailableRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Available Memory +func (p Prometheus) ComputeMemoryAvailable(ctx context.Context, req ComputeMemoryAvailableRequest) (*PrometheusData, error) { + res, err := p.ComputeMemoryAvailableRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeMemoryAvailableRaw(ctx context.Context, req ComputeMemoryAvailableRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeMemoryAvailable" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_memory_unused.go b/pkg/cloudbroker/prometheus/compute_memory_unused.go new file mode 100644 index 0000000..c8819d2 --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_memory_unused.go @@ -0,0 +1,53 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeMemoryUnusedRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Unused Memory +func (p Prometheus) ComputeMemoryUnused(ctx context.Context, req ComputeMemoryUnusedRequest) (*PrometheusData, error) { + res, err := p.ComputeMemoryUnusedRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeMemoryUnusedRaw(ctx context.Context, req ComputeMemoryUnusedRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeMemoryUnused" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_memory_usable.go b/pkg/cloudbroker/prometheus/compute_memory_usable.go new file mode 100644 index 0000000..7c3ced4 --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_memory_usable.go @@ -0,0 +1,53 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeMemoryUsableRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Usable Memory +func (p Prometheus) ComputeMemoryUsable(ctx context.Context, req ComputeMemoryUsableRequest) (*PrometheusData, error) { + res, err := p.ComputeMemoryUsableRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeMemoryUsableRaw(ctx context.Context, req ComputeMemoryUsableRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeMemoryUsable" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_memory_usage.go b/pkg/cloudbroker/prometheus/compute_memory_usage.go new file mode 100644 index 0000000..94ef234 --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_memory_usage.go @@ -0,0 +1,53 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeMemoryUsageRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Memory Usage +func (p Prometheus) ComputeMemoryUsage(ctx context.Context, req ComputeMemoryUsageRequest) (*PrometheusData, error) { + res, err := p.ComputeMemoryUsageRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeMemoryUsageRaw(ctx context.Context, req ComputeMemoryUsageRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeMemoryUsage" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_memory_used.go b/pkg/cloudbroker/prometheus/compute_memory_used.go new file mode 100644 index 0000000..92ea98d --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_memory_used.go @@ -0,0 +1,53 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeMemoryUsedRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Used Memory +func (p Prometheus) ComputeMemoryUsed(ctx context.Context, req ComputeMemoryUsedRequest) (*PrometheusData, error) { + res, err := p.ComputeMemoryUsedRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeMemoryUsedRaw(ctx context.Context, req ComputeMemoryUsedRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeMemoryUsed" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_read_bytes.go b/pkg/cloudbroker/prometheus/compute_read_bytes.go new file mode 100644 index 0000000..5a471cf --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_read_bytes.go @@ -0,0 +1,57 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeReadBytesRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Read Bytes +func (p Prometheus) ComputeReadBytes(ctx context.Context, req ComputeReadBytesRequest) (*PrometheusData, error) { + res, err := p.ComputeReadBytesRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeReadBytesRaw(ctx context.Context, req ComputeReadBytesRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeReadBytes" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_read_requests.go b/pkg/cloudbroker/prometheus/compute_read_requests.go new file mode 100644 index 0000000..3c1941a --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_read_requests.go @@ -0,0 +1,57 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeReadRequestsRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Read Requests +func (p Prometheus) ComputeReadRequests(ctx context.Context, req ComputeReadRequestsRequest) (*PrometheusData, error) { + res, err := p.ComputeReadRequestsRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeReadRequestsRaw(ctx context.Context, req ComputeReadRequestsRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeReadRequests" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_receive_bytes.go b/pkg/cloudbroker/prometheus/compute_receive_bytes.go new file mode 100644 index 0000000..d19d50e --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_receive_bytes.go @@ -0,0 +1,57 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeReceiveBytesRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Receive Bytes +func (p Prometheus) ComputeReceiveBytes(ctx context.Context, req ComputeReceiveBytesRequest) (*PrometheusData, error) { + res, err := p.ComputeReceiveBytesRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeReceiveBytesRaw(ctx context.Context, req ComputeReceiveBytesRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeReceiveBytes" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_receive_packets.go b/pkg/cloudbroker/prometheus/compute_receive_packets.go new file mode 100644 index 0000000..66b0f8a --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_receive_packets.go @@ -0,0 +1,57 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeReceivePacketsRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Receive Packets +func (p Prometheus) ComputeReceivePackets(ctx context.Context, req ComputeReceivePacketsRequest) (*PrometheusData, error) { + res, err := p.ComputeReceivePacketsRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeReceivePacketsRaw(ctx context.Context, req ComputeReceivePacketsRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeReceivePackets" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_transmit_bytes.go b/pkg/cloudbroker/prometheus/compute_transmit_bytes.go new file mode 100644 index 0000000..96cfb91 --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_transmit_bytes.go @@ -0,0 +1,57 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeTransmitBytesRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Transmit Bytes +func (p Prometheus) ComputeTransmitBytes(ctx context.Context, req ComputeTransmitBytesRequest) (*PrometheusData, error) { + res, err := p.ComputeTransmitBytesRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeTransmitBytesRaw(ctx context.Context, req ComputeTransmitBytesRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeTransmitBytes" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_transmit_packets.go b/pkg/cloudbroker/prometheus/compute_transmit_packets.go new file mode 100644 index 0000000..707d9ee --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_transmit_packets.go @@ -0,0 +1,57 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeTransmitPacketsRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Transmit Packets +func (p Prometheus) ComputeTransmitPackets(ctx context.Context, req ComputeTransmitPacketsRequest) (*PrometheusData, error) { + res, err := p.ComputeTransmitPacketsRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeTransmitPacketsRaw(ctx context.Context, req ComputeTransmitPacketsRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeTransmitPackets" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_write_bytes.go b/pkg/cloudbroker/prometheus/compute_write_bytes.go new file mode 100644 index 0000000..9adb12f --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_write_bytes.go @@ -0,0 +1,57 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeWriteBytesRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Write Bytes +func (p Prometheus) ComputeWriteBytes(ctx context.Context, req ComputeWriteBytesRequest) (*PrometheusData, error) { + res, err := p.ComputeWriteBytesRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeWriteBytesRaw(ctx context.Context, req ComputeWriteBytesRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeWriteBytes" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/compute_write_requests.go b/pkg/cloudbroker/prometheus/compute_write_requests.go new file mode 100644 index 0000000..64b6b05 --- /dev/null +++ b/pkg/cloudbroker/prometheus/compute_write_requests.go @@ -0,0 +1,57 @@ +package prometheus + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type ComputeWriteRequestsRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" 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"` +} + +// Write Requests +func (p Prometheus) ComputeWriteRequests(ctx context.Context, req ComputeWriteRequestsRequest) (*PrometheusData, error) { + res, err := p.ComputeWriteRequestsRaw(ctx, req) + if err != nil { + return nil, err + } + + info := PrometheusData{} + + 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) ComputeWriteRequestsRaw(ctx context.Context, req ComputeWriteRequestsRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/prometheus/computeWriteRequests" + + res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/prometheus/models.go b/pkg/cloudbroker/prometheus/models.go new file mode 100644 index 0000000..6ab647d --- /dev/null +++ b/pkg/cloudbroker/prometheus/models.go @@ -0,0 +1,13 @@ +package prometheus + +// PrometheusData represents an array of data points +type PrometheusData []PrometheusPoint + +// PrometheusPoint represents a single data point +type PrometheusPoint struct { + // Value of the metric at a specific point in time + Value float64 `json:"value"` + + // Timestamp the Unix timestamp. + Timestamp uint64 `json:"timestamp"` +} diff --git a/pkg/cloudbroker/prometheus/prometheus.go b/pkg/cloudbroker/prometheus/prometheus.go new file mode 100644 index 0000000..e652f7b --- /dev/null +++ b/pkg/cloudbroker/prometheus/prometheus.go @@ -0,0 +1,17 @@ +package prometheus + +import ( + "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" +) + +// Structure for creating request to prometheus +type Prometheus struct { + client interfaces.Caller +} + +// Builder for prometheus endpoints +func New(client interfaces.Caller) *Prometheus { + return &Prometheus{ + client: client, + } +} diff --git a/pkg/cloudbroker/resmon.go b/pkg/cloudbroker/resmon.go new file mode 100644 index 0000000..bc8ea62 --- /dev/null +++ b/pkg/cloudbroker/resmon.go @@ -0,0 +1,10 @@ +package cloudbroker + +import ( + "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/resmon" +) + +// Accessing the Resmon method group +func (cb *CloudBroker) Resmon() *resmon.Resmon { + return resmon.New(cb.client) +} diff --git a/pkg/cloudbroker/resmon/get_by_compute.go b/pkg/cloudbroker/resmon/get_by_compute.go new file mode 100644 index 0000000..03a0e10 --- /dev/null +++ b/pkg/cloudbroker/resmon/get_by_compute.go @@ -0,0 +1,53 @@ +package resmon + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type GetByComputeRequest struct { + // Compute ID + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` + + // Start of time period - unixtime + // Required: false + StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"` + + // End of time period - unixtime + // Required: true + EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"` +} + +// Get resource monitoring for the specified time period for the concrete compute instance +func (r Resmon) GetByCompute(ctx context.Context, req GetByComputeRequest) (*GetByComputeData, error) { + res, err := r.GetByComputeRaw(ctx, req) + if err != nil { + return nil, err + } + + info := GetByComputeData{} + + 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 (r Resmon) GetByComputeRaw(ctx context.Context, req GetByComputeRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/resmon/getByCompute" + + res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/resmon/get_by_computes.go b/pkg/cloudbroker/resmon/get_by_computes.go new file mode 100644 index 0000000..1b82736 --- /dev/null +++ b/pkg/cloudbroker/resmon/get_by_computes.go @@ -0,0 +1,49 @@ +package resmon + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type GetByComputesRequest struct { + // Start of time period - unixtime + // Required: false + StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"` + + // End of time period - unixtime + // Required: true + EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"` +} + +// Get compute instances resource monitoring for the specified time period +func (r Resmon) GetByComputes(ctx context.Context, req GetByComputesRequest) (*GetByComputeData, error) { + res, err := r.GetByComputesRaw(ctx, req) + if err != nil { + return nil, err + } + + info := GetByComputeData{} + + 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 (r Resmon) GetByComputesRaw(ctx context.Context, req GetByComputesRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/resmon/getByComputes" + + res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/resmon/get_by_grid.go b/pkg/cloudbroker/resmon/get_by_grid.go new file mode 100644 index 0000000..c7515b2 --- /dev/null +++ b/pkg/cloudbroker/resmon/get_by_grid.go @@ -0,0 +1,49 @@ +package resmon + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type GetByGRIDRequest struct { + // Start of time period - unixtime + // Required: false + StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"` + + // End of time period - unixtime + // Required: true + EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"` +} + +// Get a grid resource monitoring for the specified time period +func (r Resmon) GetByGRID(ctx context.Context, req GetByGRIDRequest) (*GetByGRIDData, error) { + res, err := r.GetByGRIDRaw(ctx, req) + if err != nil { + return nil, err + } + + info := GetByGRIDData{} + + 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 (r Resmon) GetByGRIDRaw(ctx context.Context, req GetByGRIDRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/resmon/getByGrid" + + res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/resmon/get_by_stack.go b/pkg/cloudbroker/resmon/get_by_stack.go new file mode 100644 index 0000000..3b4321a --- /dev/null +++ b/pkg/cloudbroker/resmon/get_by_stack.go @@ -0,0 +1,53 @@ +package resmon + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type GetByStackRequest struct { + // Stack ID + // Required: true + StackID uint64 `url:"stackId" json:"stackId" validate:"required"` + + // Start of time period - unixtime + // Required: false + StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"` + + // End of time period - unixtime + // Required: true + EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"` +} + +// Get a grid resource monitoring for the specified time period +func (r Resmon) GetByStack(ctx context.Context, req GetByStackRequest) (*GetByStackData, error) { + res, err := r.GetByStackRaw(ctx, req) + if err != nil { + return nil, err + } + + info := GetByStackData{} + + 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 (r Resmon) GetByStackRaw(ctx context.Context, req GetByStackRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/resmon/getByStack" + + res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/resmon/get_by_stacks.go b/pkg/cloudbroker/resmon/get_by_stacks.go new file mode 100644 index 0000000..aa128f6 --- /dev/null +++ b/pkg/cloudbroker/resmon/get_by_stacks.go @@ -0,0 +1,49 @@ +package resmon + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +type GetByStacksRequest struct { + // Start of time period - unixtime + // Required: false + StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"` + + // End of time period - unixtime + // Required: true + EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"` +} + +// Get a grid resource monitoring for the specified time period +func (r Resmon) GetByStacks(ctx context.Context, req GetByStacksRequest) (*GetByStackData, error) { + res, err := r.GetByStacksRaw(ctx, req) + if err != nil { + return nil, err + } + + info := GetByStackData{} + + 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 (r Resmon) GetByStacksRaw(ctx context.Context, req GetByStacksRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/resmon/getByStacks" + + res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/resmon/models.go b/pkg/cloudbroker/resmon/models.go new file mode 100644 index 0000000..5206bc8 --- /dev/null +++ b/pkg/cloudbroker/resmon/models.go @@ -0,0 +1,89 @@ +package resmon + +// GetByComputeData represents an array of data points +type GetByComputeData []GetByComputePoint + +type GetByComputePoint struct { + ID uint64 `json:"id"` + Name string `json:"name"` + ComputeID uint64 `json:"computeId"` + AccountID uint64 `json:"accountId"` + RGID uint64 `json:"rgId"` + Usage ComputeUsage `json:"usage"` + Disks []ItemDisk `json:"disks"` + UID string `json:"uid"` + StackID uint64 `json:"stackId"` +} + +type ComputeUsage struct { + VCPUsConsumed uint64 `json:"vcpusConsumed"` + Storage uint64 `json:"storage"` + CPUTime uint64 `json:"cpuTime"` + ExtIPs uint64 `json:"extips"` + RAMConsumed uint64 `json:"ramConsumed"` + VCPUsReserved uint64 `json:"vcpusReserved"` + IsUp uint64 `json:"isUp"` + RAMConsumedReal uint64 `json:"ramConsumedReal"` + RAMReserved uint64 `json:"ramReserved"` +} + +type ItemDisk struct { + Pool string `json:"pool"` + ResID string `json:"resId"` + SizeUsed uint64 `json:"sizeUsed"` + SizeMax uint64 `json:"sizeMax"` +} + +// GetByGRIDData represents an array of data points +type GetByGRIDData []GetByGRIDPoint + +type GetByGRIDPoint struct { + UID string `json:"uid"` + Total ItemTotalByGRID `json:"total"` + Storages map[string]ItemStorage `json:"storages"` +} + +type ItemTotalByGRID struct { + StacksCPU uint64 `json:"stacksCPU"` + StorageCapacity uint64 `json:"storageCapacity"` + CPUPower uint64 `json:"cpuPower"` + CPUUtil uint64 `json:"cpuUtil"` + TotalMem uint64 `json:"totalMem"` + ReservedMem uint64 `json:"reservedMem"` + UsedMem uint64 `json:"usedMem"` + FreeMem uint64 `json:"freeMem"` + VCPUConsumed uint64 `json:"vcpuConsumed"` +} + +type ItemStorage struct { + CapacityLimit uint64 `json:"capacityLimit"` + Consumed uint64 `json:"consumed"` + Type string `json:"type"` + UID string `json:"uid"` +} + +// GetByStackData represents an array of data points +type GetByStackData []GetByStackPoint + +type GetByStackPoint struct { + Usage StackUsage `json:"usage"` + CPUInfo CPUinfoByStack `json:"cpuInfo"` + Name string `json:"name"` + ID uint64 `json:"id"` +} + +type StackUsage struct { + CPUPower uint64 `json:"cpuPower"` + UsedVCPUs uint64 `json:"usedVcpus"` + PCPU uint64 `json:"pcpu"` + UsedMem uint64 `json:"usedMem"` + CPUUtil uint64 `json:"cpuUtil"` + ReservedMem uint64 `json:"reservedMem"` + FreeMem uint64 `json:"freeMem"` +} + +type CPUinfoByStack struct { + ClockSpeed uint64 `json:"clockSpeed"` + CoreCount uint64 `json:"coreCount"` + PhysCount uint64 `json:"physCount"` +} diff --git a/pkg/cloudbroker/resmon/resmon.go b/pkg/cloudbroker/resmon/resmon.go new file mode 100644 index 0000000..8f5054d --- /dev/null +++ b/pkg/cloudbroker/resmon/resmon.go @@ -0,0 +1,15 @@ +package resmon + +import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" + +// Structure for creating request to resource monitoring +type Resmon struct { + client interfaces.Caller +} + +// Builder for resource monitoring endpoints +func New(client interfaces.Caller) *Resmon { + return &Resmon{ + client: client, + } +}