From b3f2f49b7081c54840617c1eefa82e6d65c97c68 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Fri, 30 Jun 2023 21:16:46 +0200 Subject: [PATCH 01/11] Setup --- openstack/aom/v2/log/ListLogItems.go | 5 +++++ openstack/aom/v2/monitor/AddAlarmRule.go | 5 +++++ openstack/aom/v2/monitor/AddMetricData.go | 5 +++++ openstack/aom/v2/monitor/DeleteAlarmRule.go | 5 +++++ openstack/aom/v2/monitor/ListAlarmRule.go | 5 +++++ openstack/aom/v2/monitor/ListMetricItems.go | 5 +++++ openstack/aom/v2/monitor/ShowAlarmRule.go | 5 +++++ openstack/aom/v2/monitor/ShowMetricsData.go | 5 +++++ openstack/aom/v2/monitor/UpdateAlarmRule.go | 5 +++++ 9 files changed, 45 insertions(+) create mode 100644 openstack/aom/v2/log/ListLogItems.go create mode 100644 openstack/aom/v2/monitor/AddAlarmRule.go create mode 100644 openstack/aom/v2/monitor/AddMetricData.go create mode 100644 openstack/aom/v2/monitor/DeleteAlarmRule.go create mode 100644 openstack/aom/v2/monitor/ListAlarmRule.go create mode 100644 openstack/aom/v2/monitor/ListMetricItems.go create mode 100644 openstack/aom/v2/monitor/ShowAlarmRule.go create mode 100644 openstack/aom/v2/monitor/ShowMetricsData.go create mode 100644 openstack/aom/v2/monitor/UpdateAlarmRule.go diff --git a/openstack/aom/v2/log/ListLogItems.go b/openstack/aom/v2/log/ListLogItems.go new file mode 100644 index 000000000..e94f02df8 --- /dev/null +++ b/openstack/aom/v2/log/ListLogItems.go @@ -0,0 +1,5 @@ +package log + +ListLogItems + +// POST /v2/{project_id}/als/action diff --git a/openstack/aom/v2/monitor/AddAlarmRule.go b/openstack/aom/v2/monitor/AddAlarmRule.go new file mode 100644 index 000000000..b375536ae --- /dev/null +++ b/openstack/aom/v2/monitor/AddAlarmRule.go @@ -0,0 +1,5 @@ +package monitor + +AddAlarmRule + +// POST /v2/{project_id}/ams/alarms diff --git a/openstack/aom/v2/monitor/AddMetricData.go b/openstack/aom/v2/monitor/AddMetricData.go new file mode 100644 index 000000000..ea8e26150 --- /dev/null +++ b/openstack/aom/v2/monitor/AddMetricData.go @@ -0,0 +1,5 @@ +package monitor + +AddMetricData + +// POST /v2/{project_id}/ams/report/metricdata diff --git a/openstack/aom/v2/monitor/DeleteAlarmRule.go b/openstack/aom/v2/monitor/DeleteAlarmRule.go new file mode 100644 index 000000000..28e51d0b0 --- /dev/null +++ b/openstack/aom/v2/monitor/DeleteAlarmRule.go @@ -0,0 +1,5 @@ +package monitor + +DeleteAlarmRule + +// DELETE /v2/{project_id}/ams/alarms/{alarm_id} diff --git a/openstack/aom/v2/monitor/ListAlarmRule.go b/openstack/aom/v2/monitor/ListAlarmRule.go new file mode 100644 index 000000000..533b88bf0 --- /dev/null +++ b/openstack/aom/v2/monitor/ListAlarmRule.go @@ -0,0 +1,5 @@ +package monitor + +ListAlarmRule + +// GET /v2/{project_id}/ams/alarms diff --git a/openstack/aom/v2/monitor/ListMetricItems.go b/openstack/aom/v2/monitor/ListMetricItems.go new file mode 100644 index 000000000..57978453f --- /dev/null +++ b/openstack/aom/v2/monitor/ListMetricItems.go @@ -0,0 +1,5 @@ +package monitor + +ListMetricItems + +// POST /v2/{project_id}/ams/metrics diff --git a/openstack/aom/v2/monitor/ShowAlarmRule.go b/openstack/aom/v2/monitor/ShowAlarmRule.go new file mode 100644 index 000000000..824e9d643 --- /dev/null +++ b/openstack/aom/v2/monitor/ShowAlarmRule.go @@ -0,0 +1,5 @@ +package monitor + +ShowAlarmRule + +// GET /v2/{project_id}/ams/alarms/{alarm_id} diff --git a/openstack/aom/v2/monitor/ShowMetricsData.go b/openstack/aom/v2/monitor/ShowMetricsData.go new file mode 100644 index 000000000..1e1c4b431 --- /dev/null +++ b/openstack/aom/v2/monitor/ShowMetricsData.go @@ -0,0 +1,5 @@ +package monitor + +ShowMetricsData + +// POST /v2/{project_id}/ams/metricdata diff --git a/openstack/aom/v2/monitor/UpdateAlarmRule.go b/openstack/aom/v2/monitor/UpdateAlarmRule.go new file mode 100644 index 000000000..e8953b2c2 --- /dev/null +++ b/openstack/aom/v2/monitor/UpdateAlarmRule.go @@ -0,0 +1,5 @@ +package monitor + +UpdateAlarmRule + +// PUT /v2/{project_id}/ams/alarms From c29da675fe1da58dacf038e51d2b081d7baa5d91 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Wed, 5 Jul 2023 21:25:05 +0200 Subject: [PATCH 02/11] ListLogItems --- openstack/aom/v2/log/ListLogItems.go | 121 ++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 2 deletions(-) diff --git a/openstack/aom/v2/log/ListLogItems.go b/openstack/aom/v2/log/ListLogItems.go index e94f02df8..a54d798e7 100644 --- a/openstack/aom/v2/log/ListLogItems.go +++ b/openstack/aom/v2/log/ListLogItems.go @@ -1,5 +1,122 @@ package log -ListLogItems +import "github.com/opentelekomcloud/gophertelekomcloud" -// POST /v2/{project_id}/als/action +type ListLogItemsOpts struct { + // Log type: + // + // app_log: application log + // + // node_log: host log + // + // custom_log: log in a custom path + Category string `json:"category" required:"true"` + // Log filter criteria, which vary according to log sources. + SearchKey SearchKey `json:"searchKey" required:"true"` + // Cloud Container Engine (CCE) cluster ID. + ClusterId string `json:"clusterId" required:"true"` + // CCE cluster namespace. + NameSpace string `json:"nameSpace,omitempty"` + // Service name. + AppName string `json:"appName,omitempty"` + // Container pod name. + PodName string `json:"podName,omitempty"` + // Log file name. + PathFile string `json:"pathFile,omitempty"` + // IP address of the VM where logs are located. + HostIP string `json:"hostIP,omitempty"` + // Enter a keyword between two adjacent delimiters for exact search. + // + // Enter a keyword for fuzzy search. Example: RROR, ERRO?, *ROR*, ERR*, or ER*OR. + // + // Enter a phrase for exact search. Example: Start to refresh alm Statistic. + // + // Enter contents containing AND (&&) or OR (||) for search. Example: query&&logs or query||logs. + // + // Default delimiters: + // + // , '";=()[]{}@&<>/:\n\t\r + KeyWord string `json:"keyWord,omitempty"` + // Start time of the query (UTC, in ms). + StartTime *int64 `json:"startTime" required:"true"` + // End time of the query (UTC, in ms). + EndTime *int64 `json:"endTime" required:"true"` + // Whether to hide the system log (icagent\kubectl) during the query. 0 (default): Hide. 1: Not hide. + // + // Value Range + // + // 0 or 1 + HideSyslog *int `json:"hideSyslog,omitempty"` +} + +type SearchKey struct { + // CCE cluster ID. + ClusterId string `json:"clusterId" required:"true"` + // CCE cluster namespace. + NameSpace string `json:"nameSpace,omitempty"` + // Application name. + AppName string `json:"appName,omitempty"` + // Container instance name. + PodName string `json:"podName,omitempty"` + // Log file name. + PathFile string `json:"pathFile,omitempty"` + // IP address of the VM where logs are located. + HostIP string `json:"hostIP,omitempty"` +} + +func ListLogItems(client *golangsdk.ServiceClient, opts ListLogItemsOpts) { + // POST /v2/{project_id}/als/action +} + +type LogItemResponse struct { + // Response code. Example: AOM.0200, which indicates a success response. + ErrorCode string `json:"errorCode"` + // Response message. + ErrorMessage string `json:"errorMessage"` + // Metadata, including total number of returned records and results. + Result LogResult `json:"result"` +} + +type LogResult struct { + // Number of returned records. + Total *int `json:"total"` + // Data array. + Data []ItemData `json:"data"` +} + +type ItemData struct { + // Log type. + Category string `json:"category"` + // Hash value of the log source. + LogHash string `json:"loghash"` + // Cloud Container Engine (CCE) cluster ID. + ClusterId string `json:"clusterId"` + // CCE cluster name. + ClusterName string `json:"clusterName"` + // CCE cluster namespace. + NameSpace string `json:"nameSpace"` + // CCE container pod name. + PodName string `json:"podName"` + // Service name. + AppName string `json:"appName"` + // Service ID of an AOM resource. + ServiceID string `json:"serviceID"` + // CCE container name. + ContainerName string `json:"containerName"` + // Source log data. + LogContent string `json:"logContent"` + // Absolute path of a log file. + PathFile string `json:"pathFile"` + // IP address of the VM where log files are located. + HostIP string `json:"hostIP"` + // ID of a host in a cluster. + HostId string `json:"hostId"` + // Name of the VM where log files are located. + HostName string `json:"hostName"` + // Log collection time (UTC time, in ms). + CollectTime string `json:"collectTime"` + // Sequence number of a log line. + LineNum string `json:"lineNum"` + // Size of a single-line log. + LogContentSize string `json:"logContentSize"` +} From 296ef726911c709d7297ec586c81ed14e9432056 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Wed, 5 Jul 2023 23:02:08 +0200 Subject: [PATCH 03/11] ShowMetricsData --- openstack/aom/v2/log/ListLogItems.go | 6 +- openstack/aom/v2/monitor/AddAlarmRule.go | 6 +- openstack/aom/v2/monitor/AddMetricData.go | 6 +- openstack/aom/v2/monitor/DeleteAlarmRule.go | 6 +- openstack/aom/v2/monitor/ListAlarmRule.go | 6 +- openstack/aom/v2/monitor/ListMetricItems.go | 66 ++++++++++- openstack/aom/v2/monitor/ShowAlarmRule.go | 6 +- openstack/aom/v2/monitor/ShowMetricsData.go | 115 +++++++++++++++++++- openstack/aom/v2/monitor/UpdateAlarmRule.go | 6 +- 9 files changed, 204 insertions(+), 19 deletions(-) diff --git a/openstack/aom/v2/log/ListLogItems.go b/openstack/aom/v2/log/ListLogItems.go index a54d798e7..89ae1177d 100644 --- a/openstack/aom/v2/log/ListLogItems.go +++ b/openstack/aom/v2/log/ListLogItems.go @@ -68,16 +68,16 @@ func ListLogItems(client *golangsdk.ServiceClient, opts ListLogItemsOpts) { // POST /v2/{project_id}/als/action } -type LogItemResponse struct { +type ListLogItemsResponse struct { // Response code. Example: AOM.0200, which indicates a success response. ErrorCode string `json:"errorCode"` // Response message. ErrorMessage string `json:"errorMessage"` // Metadata, including total number of returned records and results. - Result LogResult `json:"result"` + Result ItemsResult `json:"result"` } -type LogResult struct { +type ItemsResult struct { // Number of returned records. Total *int `json:"total"` // Data array. diff --git a/openstack/aom/v2/monitor/AddAlarmRule.go b/openstack/aom/v2/monitor/AddAlarmRule.go index b375536ae..f870e239f 100644 --- a/openstack/aom/v2/monitor/AddAlarmRule.go +++ b/openstack/aom/v2/monitor/AddAlarmRule.go @@ -1,5 +1,7 @@ package monitor -AddAlarmRule +import "github.com/opentelekomcloud/gophertelekomcloud" -// POST /v2/{project_id}/ams/alarms +func AddAlarmRule(client *golangsdk.ServiceClient) { + // POST /v2/{project_id}/ams/alarms +} diff --git a/openstack/aom/v2/monitor/AddMetricData.go b/openstack/aom/v2/monitor/AddMetricData.go index ea8e26150..b1f402281 100644 --- a/openstack/aom/v2/monitor/AddMetricData.go +++ b/openstack/aom/v2/monitor/AddMetricData.go @@ -1,5 +1,7 @@ package monitor -AddMetricData +import "github.com/opentelekomcloud/gophertelekomcloud" -// POST /v2/{project_id}/ams/report/metricdata +func AddMetricData(client *golangsdk.ServiceClient) { + // POST /v2/{project_id}/ams/report/metricdata +} diff --git a/openstack/aom/v2/monitor/DeleteAlarmRule.go b/openstack/aom/v2/monitor/DeleteAlarmRule.go index 28e51d0b0..eb9eef27b 100644 --- a/openstack/aom/v2/monitor/DeleteAlarmRule.go +++ b/openstack/aom/v2/monitor/DeleteAlarmRule.go @@ -1,5 +1,7 @@ package monitor -DeleteAlarmRule +import "github.com/opentelekomcloud/gophertelekomcloud" -// DELETE /v2/{project_id}/ams/alarms/{alarm_id} +func DeleteAlarmRule(client *golangsdk.ServiceClient) { + // DELETE /v2/{project_id}/ams/alarms/{alarm_id} +} diff --git a/openstack/aom/v2/monitor/ListAlarmRule.go b/openstack/aom/v2/monitor/ListAlarmRule.go index 533b88bf0..1766e92d1 100644 --- a/openstack/aom/v2/monitor/ListAlarmRule.go +++ b/openstack/aom/v2/monitor/ListAlarmRule.go @@ -1,5 +1,7 @@ package monitor -ListAlarmRule +import "github.com/opentelekomcloud/gophertelekomcloud" -// GET /v2/{project_id}/ams/alarms +func ListAlarmRule(client *golangsdk.ServiceClient) { + // GET /v2/{project_id}/ams/alarms +} diff --git a/openstack/aom/v2/monitor/ListMetricItems.go b/openstack/aom/v2/monitor/ListMetricItems.go index 57978453f..1a7f31c0f 100644 --- a/openstack/aom/v2/monitor/ListMetricItems.go +++ b/openstack/aom/v2/monitor/ListMetricItems.go @@ -1,5 +1,67 @@ package monitor -ListMetricItems +import "github.com/opentelekomcloud/gophertelekomcloud" -// POST /v2/{project_id}/ams/metrics +type ListMetricItemsOpts struct { + // Metric namespace. + // + // PAAS.CONTAINER: application metric. + // + // PAAS.NODE: node metric. + // + // PAAS.SLA: Service Level Agreement (SLA) metric. + // + // PAAS.AGGR: cluster metric. + // + // CUSTOMMETRICS: custom metric. + // + // Value Range + // + // PAAS.CONTAINER, PAAS.NODE, PAAS.SLA, PAAS.AGGR, CUSTOMMETRICS, and so on. + Namespace string `json:"namespace" required:"true"` + // Metric dimension. + // + // dimensions.name: dimension name, such as clusterName, clusterId, appName, appID, deploymentName, podName, podID, containerName, or containerID. + // + // dimensions.value: dimension value, such as a specific application instance ID. + Dimensions []Dimension `json:"dimensions,omitempty"` + // Metric name. + // + // Value Range + // + // 1-1000 characters. + MetricName string `json:"metricName,omitempty"` +} + +type Dimension struct { + Name string `json:"name"` + Value string `json:"value"` +} + +func ListMetricItems(client *golangsdk.ServiceClient, opts ListMetricItemsOpts) { + // POST /v2/{project_id}/ams/metrics + type RequestParameter struct { + // If type (a URI parameter) is not inventory, the information carried by the array is used to query metrics. + MetricItems []ListMetricItemsOpts `json:"metricItems,omitempty"` + } +} + +type ListMetricItemsResponse struct { + // Response code. Example: AOM.0200, which indicates a success response. + ErrorCode string `json:"errorCode"` + // Response message. + ErrorMessage string `json:"errorMessage"` + // List of metrics. + Metrics []Metric `json:"metrics"` +} + +type Metric struct { + // Namespace. + Namespace string `json:"namespace"` + // Metric name. + MetricName string `json:"metricName"` + // Metric unit. + Unit string `json:"unit"` + // List of metric dimensions. + Dimensions []Dimension `json:"dimensions"` +} diff --git a/openstack/aom/v2/monitor/ShowAlarmRule.go b/openstack/aom/v2/monitor/ShowAlarmRule.go index 824e9d643..45c95bddd 100644 --- a/openstack/aom/v2/monitor/ShowAlarmRule.go +++ b/openstack/aom/v2/monitor/ShowAlarmRule.go @@ -1,5 +1,7 @@ package monitor -ShowAlarmRule +import "github.com/opentelekomcloud/gophertelekomcloud" -// GET /v2/{project_id}/ams/alarms/{alarm_id} +func ShowAlarmRule(client *golangsdk.ServiceClient) { + // GET /v2/{project_id}/ams/alarms/{alarm_id} +} diff --git a/openstack/aom/v2/monitor/ShowMetricsData.go b/openstack/aom/v2/monitor/ShowMetricsData.go index 1e1c4b431..13fdf59a2 100644 --- a/openstack/aom/v2/monitor/ShowMetricsData.go +++ b/openstack/aom/v2/monitor/ShowMetricsData.go @@ -1,5 +1,116 @@ package monitor -ShowMetricsData +import "github.com/opentelekomcloud/gophertelekomcloud" -// POST /v2/{project_id}/ams/metricdata +type ShowMetricsDataQuery struct { + // Filled value for breakpoints in monitoring data. Default value: -1. + // + // -1: Breakpoints are filled with -1. + // + // 0: Breakpoints are filled with 0. + // + // null: Breakpoints are filled with null. + // + // average: Breakpoints are filled with the average value of adjacent valid data. If there is no valid data, breakpoints are filled with null. + FillValue string `q:"fillValue"` +} + +type ShowMetricsDataOpts struct { + // List of metrics. + // + // Value Range + // + // A maximum of 20 metrics are supported. + Metrics []MetricQuery `json:"metrics" required:"true"` + // Data monitoring granularity. + // + // Value Range + // + // Enumerated value. Options: + // + // 60: The data monitoring granularity is 1 minute. + // + // 300: The data monitoring granularity is 5 minutes. + // + // 900: The data monitoring granularity is 15 minutes. + // + // 3600: The data monitoring granularity is 1 hour. + Period *int `json:"period" required:"true"` + // Query time period. For example, -1.-1.5 indicates the last 5 minutes. 1501545600000.1501632000000.1440 indicates the fixed time period from 08:00:00 on August 1, 2017 to 08:00:00 on August 2, 2017. + // + // Time range/Period <= 1440 + // + // The timerange and period must use the same unit. + // + // Value Range + // + // Format: start time (UTC, in ms).end time (UTC, in ms).number of minutes in the time period. When the start time and end time are -1, it indicates the latest N minutes. N indicates the time period by the granularity of minute. + Timerange string `json:"timerange" required:"true"` + // Statistic. + // + // Value Range + // + // maximum, minimum, sum, average, or sampleCount. + Statistics []string `json:"statistics" required:"true"` +} + +type MetricQuery struct { + // Metric namespace. + // + // Value Range + // + // PAAS.CONTAINER, PAAS.NODE, PAAS.SLA, PAAS.AGGR, and CUSTOMMETRICS. + Namespace string `json:"namespace" required:"true"` + // Metric name. + // + // Value Range + // + // 1-255 characters. + MetricName string `json:"metricName" required:"true"` + // Metric dimension. + // + // dimensions.name: dimension name. Example: appName. + // + // dimensions.value: dimension value, such as a specific application name. + // + // Value Range + // + // Neither the array nor the name/value of any dimension in the array can be left blank. + Dimensions []Dimension `json:"dimensions" required:"true"` +} + +func ShowMetricsData(client *golangsdk.ServiceClient) { + // POST /v2/{project_id}/ams/metricdata +} + +type ResponseParameters struct { + // Response code. + ErrorCode string `json:"errorCode"` + // Response message. + ErrorMessage string `json:"errorMessage"` + // Metric list. + Metrics []Metrics `json:"metrics"` +} + +type Metrics struct { + // Query parameters. + Metric Metric `json:"metric"` + // Key metric. + DataPoints []DataPoint `json:"dataPoints"` +} + +type DataPoint struct { + // Timestamp + Timestamp int64 `json:"timestamp"` + // Time series unit. + Unit string `json:"unit"` + // Statistic. + Statistics []Statistic `json:"statistics"` +} + +type Statistic struct { + // Statistic. + Statistic string `json:"statistic"` + // Statistical result. + Value float64 `json:"value"` +} diff --git a/openstack/aom/v2/monitor/UpdateAlarmRule.go b/openstack/aom/v2/monitor/UpdateAlarmRule.go index e8953b2c2..66c9dce90 100644 --- a/openstack/aom/v2/monitor/UpdateAlarmRule.go +++ b/openstack/aom/v2/monitor/UpdateAlarmRule.go @@ -1,5 +1,7 @@ package monitor -UpdateAlarmRule +import "github.com/opentelekomcloud/gophertelekomcloud" -// PUT /v2/{project_id}/ams/alarms +func UpdateAlarmRule(client *golangsdk.ServiceClient) { + // PUT /v2/{project_id}/ams/alarms +} From 637eee1883ba0b0467dbdfeefcd6b3ac229c31e4 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Wed, 5 Jul 2023 23:17:43 +0200 Subject: [PATCH 04/11] AddMetricData --- openstack/aom/v2/monitor/AddMetricData.go | 59 +++++++++++++++++++++ openstack/aom/v2/monitor/ShowMetricsData.go | 2 +- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/openstack/aom/v2/monitor/AddMetricData.go b/openstack/aom/v2/monitor/AddMetricData.go index b1f402281..8fcace935 100644 --- a/openstack/aom/v2/monitor/AddMetricData.go +++ b/openstack/aom/v2/monitor/AddMetricData.go @@ -2,6 +2,65 @@ package monitor import "github.com/opentelekomcloud/gophertelekomcloud" +type AddMetricDataOpts struct { + // Metric data. + Metric MetricAdd `json:"metric" required:"true"` + Values []Value `json:"values" required:"true"` + // Data collection time, which must meet the following requirement: + // + // Current UTC time - Data collection time <= 24 hours, or Data collection time - Current UTC time <= 30 minutes + // + // Value Range + // + // UNIX timestamp, in ms. + CollectTime *int64 `json:"collect_time" required:"true"` +} + +type MetricAdd struct { + // Metric namespace. + // + // Value Range + // + // Namespace, which must be in the format of service.item. The value must be 3 to 32 characters starting with a letter. Only letters, digits, and underscores (_) are allowed. In addition, service cannot start with PAAS or SYS. + Namespace string `json:"namespace" required:"true"` + // List of metric dimensions. + // + // Value Range + // + // Each dimension is a JSON object, and its structure is as follows: + // + // dimension.name: 1-32 characters. + // + // dimension.value: 1-64 characters. + Dimensions []Dimension `json:"dimensions" required:"true"` +} + +type Value struct { + // Data unit. + Unit string `json:"unit,omitempty"` + // Metric name. + MetricName string `json:"metric_name" required:"true"` + // Data type. + // + // Value Range + // + // "int" or "float" + Type string `json:"type,omitempty"` + // Metric value. + // + // Value Range + // + // Valid numeral type. + Value *float32 `json:"value" required:"true"` +} + func AddMetricData(client *golangsdk.ServiceClient) { // POST /v2/{project_id}/ams/report/metricdata } + +type AddMetricDataResponse struct { + // Response code. + ErrorCode string `json:"errorCode"` + // Response message. + ErrorMessage string `json:"errorMessage"` +} diff --git a/openstack/aom/v2/monitor/ShowMetricsData.go b/openstack/aom/v2/monitor/ShowMetricsData.go index 13fdf59a2..1cd80ed51 100644 --- a/openstack/aom/v2/monitor/ShowMetricsData.go +++ b/openstack/aom/v2/monitor/ShowMetricsData.go @@ -83,7 +83,7 @@ func ShowMetricsData(client *golangsdk.ServiceClient) { // POST /v2/{project_id}/ams/metricdata } -type ResponseParameters struct { +type ShowMetricsDataResponse struct { // Response code. ErrorCode string `json:"errorCode"` // Response message. From ba3fe67fa2665e57845b8e56ec7a9ce34a148bf6 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Wed, 5 Jul 2023 23:29:40 +0200 Subject: [PATCH 05/11] AddAlarmRule --- openstack/aom/v2/monitor/AddAlarmRule.go | 110 ++++++++++++++++++++ openstack/aom/v2/monitor/ListMetricItems.go | 4 +- 2 files changed, 112 insertions(+), 2 deletions(-) diff --git a/openstack/aom/v2/monitor/AddAlarmRule.go b/openstack/aom/v2/monitor/AddAlarmRule.go index f870e239f..41982ad02 100644 --- a/openstack/aom/v2/monitor/AddAlarmRule.go +++ b/openstack/aom/v2/monitor/AddAlarmRule.go @@ -2,6 +2,116 @@ package monitor import "github.com/opentelekomcloud/gophertelekomcloud" +type AddAlarmRuleOpts struct { + // Statistic. + // + // Value Range + // + // maximum, minimum, average, sum, or sampleCount. + Statistic string `json:"statistic" required:"true"` + // Namespace. + // + // Value Range + // + // 1-255 characters. Colons (:) are not allowed. + Namespace string `json:"namespace" required:"true"` + // Metric name. + // + // Value Range + // + // 1-255 characters. + MetricName string `json:"metricName" required:"true"` + // Statistical period. + // + // Value Range + // + // 20000, 60000, 300000, 900000, 1800000, 3600000, 14400000, or 86400000 + Period *int `json:"period" required:"true"` + // Alarm severity. + // + // Value Range + // + // 4, 3, 2, or 1 + AlarmLevel *int `json:"alarmLevel,omitempty"` + // Number of consecutive periods. + // + // Value Range + // + // 4, 3, or 2 + EvaluationPeriods *int `json:"evaluationPeriods" required:"true"` + // Comparison operator. + // + // Value Range + // + // >, >=, <, or <= + ComparisonOperator string `json:"comparisonOperator" required:"true"` + // Threshold. + // + // Value Range + // + // Non-null value that can be converted to a value of the double type. Once converted, the value cannot be null, or be a positive or negative infinity. + Threshold string `json:"threshold" required:"true"` + // Threshold name. + // + // Value Range + // + // 1-255 characters. Special characters are not allowed. + AlarmName string `json:"alarmName" required:"true"` + // Metric dimension. + // + // Value Range + // + // Non-null; number of dimensions < 100 + Dimensions []Dimension `json:"dimensions" required:"true"` + // Metric unit. + // + // Value Range + // + // Number of characters < 32 + Unit string `json:"unit,omitempty"` + // Whether to enable the alarm function. + ActionEnabled *bool `json:"actionEnabled,omitempty"` + // Alarm action. + // + // Value Range + // + // Size <= 5 + AlarmActions []string `json:"alarmActions,omitempty"` + // Suggestion. + // + // Value Range + // + // Number of characters < 255 + AlarmAdvice string `json:"alarmAdvice,omitempty"` + // Threshold rule description. + // + // Value Range + // + // Number of characters < 255 + AlarmDescription string `json:"alarmDescription,omitempty"` + // Action to be taken when data is insufficient. + // + // Value Range + // + // Size <= 5 + InsufficientDataActions []string `json:"insufficientDataActions,omitempty"` + // Recovery action. + // + // Value Range + // + // Size <= 5 + OkActions []string `json:"okActions,omitempty"` +} + func AddAlarmRule(client *golangsdk.ServiceClient) { // POST /v2/{project_id}/ams/alarms } + +type AddAlarmRuleResponse struct { + // Response code. + ErrorCode string `json:"errorCode"` + // Response message. + ErrorMessage string `json:"errorMessage"` + // Threshold rule code. + AlarmId *int64 `json:"alarmId"` +} diff --git a/openstack/aom/v2/monitor/ListMetricItems.go b/openstack/aom/v2/monitor/ListMetricItems.go index 1a7f31c0f..8d48d80e5 100644 --- a/openstack/aom/v2/monitor/ListMetricItems.go +++ b/openstack/aom/v2/monitor/ListMetricItems.go @@ -34,8 +34,8 @@ type ListMetricItemsOpts struct { } type Dimension struct { - Name string `json:"name"` - Value string `json:"value"` + Name string `json:"name" required:"true"` + Value string `json:"value" required:"true"` } func ListMetricItems(client *golangsdk.ServiceClient, opts ListMetricItemsOpts) { From c165966afd0d13e74e02ffdede6e7a68674d2c79 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Tue, 11 Jul 2023 12:37:38 +0200 Subject: [PATCH 06/11] UpdateAlarmRule --- openstack/aom/v2/monitor/UpdateAlarmRule.go | 110 ++++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/openstack/aom/v2/monitor/UpdateAlarmRule.go b/openstack/aom/v2/monitor/UpdateAlarmRule.go index 66c9dce90..5894ed527 100644 --- a/openstack/aom/v2/monitor/UpdateAlarmRule.go +++ b/openstack/aom/v2/monitor/UpdateAlarmRule.go @@ -2,6 +2,116 @@ package monitor import "github.com/opentelekomcloud/gophertelekomcloud" +type UpdateAlarmRuleOpts struct { + // Statistic. + // + // Value Range + // + // maximum, minimum, average, sum, or sampleCount. + Statistic string `json:"statistic" required:"true"` + // Namespace. The value transferred to the backend when a threshold rule is added will be used. The value transferred here will not replace that value. + // + // Value Range + // + // 1-255 characters. Colons (:) are not allowed. + Namespace string `json:"namespace" required:"true"` + // Metric name. The value transferred to the backend when a threshold rule is added will be used. The value transferred here will not replace that value. + // + // Value Range + // + // 1-255 characters. + MetricName string `json:"metricName" required:"true"` + // Statistical period. + // + // Value Range + // + // 20000, 60000, 300000, 900000, 1800000, 3600000, 14400000, or 86400000 + Period *int `json:"period" required:"true"` + // Alarm severity. + // + // Value Range + // + // 4, 3, 2, or 1 + AlarmLevel *int `json:"alarmLevel,omitempty"` + // Number of consecutive periods. + // + // Value Range + // + // 4, 3, or 2 + EvaluationPeriods *int `json:"evaluationPeriods" required:"true"` + // Comparison operator. + // + // Value Range + // + // >, >=, <, or <= + ComparisonOperator string `json:"comparisonOperator" required:"true"` + // Threshold. + // + // Value Range + // + // Non-null value that can be converted to a value of the double type. Once converted, the value cannot be null, or be a positive or negative infinity. + Threshold *float64 `json:"threshold" required:"true"` + // Threshold name. + // + // Value Range + // + // 1-255 characters. Special characters are not allowed. + AlarmName string `json:"alarmName" required:"true"` + // Metric dimension. The value transferred to the backend when a threshold rule is added will be used. The value transferred here will not replace that value. + // + // Value Range + // + // Non-null; size < 100 + Dimensions []Dimension `json:"dimensions" required:"true"` + // Metric unit. The value transferred to the backend when a threshold rule is added will be used. The value transferred here will not replace that value. + // + // Value Range + // + // Number of characters < 32 + Unit string `json:"unit,omitempty"` + // Whether to enable the alarm function. + ActionEnabled *bool `json:"actionEnabled,omitempty"` + // Alarm action. + // + // Value Range + // + // Size <= 5 + AlarmActions []string `json:"alarmActions,omitempty"` + // Alarm suggestion. Leave this parameter blank. + // + // Value Range + // + // Number of characters < 255 + AlarmAdvice string `json:"alarmAdvice,omitempty"` + // Threshold rule description. + // + // Value Range + // + // Number of characters < 255 + AlarmDescription string `json:"alarmDescription,omitempty"` + // Action to be taken when data is insufficient. + // + // Value Range + // + // Size <= 5 + InsufficientDataActions []string `json:"insufficientDataActions,omitempty"` + // Recovery action. + // + // Value Range + // + // Size <= 5 + OkActions []string `json:"okActions,omitempty"` +} + func UpdateAlarmRule(client *golangsdk.ServiceClient) { // PUT /v2/{project_id}/ams/alarms } + +type UpdateAlarmRuleResponse struct { + // Response code. + ErrorCode string `json:"errorCode"` + // Response message. + ErrorMessage string `json:"errorMessage"` + // Threshold rule code. + AlarmId *int64 `json:"alarmId"` +} From 046996163b909a3fddefdc88e30ffaae220c024a Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Tue, 11 Jul 2023 18:08:43 +0200 Subject: [PATCH 07/11] AddAlarmRule --- openstack/aom/v2/log/ListLogItems.go | 2 +- openstack/aom/v2/monitor/AddAlarmRule.go | 122 ++++---------------- openstack/aom/v2/monitor/AddMetricData.go | 5 +- openstack/aom/v2/monitor/DeleteAlarmRule.go | 2 +- openstack/aom/v2/monitor/ListAlarmRule.go | 39 ++++++- openstack/aom/v2/monitor/ListMetricItems.go | 2 +- openstack/aom/v2/monitor/ShowAlarmRule.go | 118 ++++++++++++++++++- openstack/aom/v2/monitor/ShowMetricsData.go | 2 +- openstack/aom/v2/monitor/UpdateAlarmRule.go | 103 +---------------- 9 files changed, 183 insertions(+), 212 deletions(-) diff --git a/openstack/aom/v2/log/ListLogItems.go b/openstack/aom/v2/log/ListLogItems.go index 89ae1177d..3ed3863b0 100644 --- a/openstack/aom/v2/log/ListLogItems.go +++ b/openstack/aom/v2/log/ListLogItems.go @@ -64,7 +64,7 @@ type SearchKey struct { HostIP string `json:"hostIP,omitempty"` } -func ListLogItems(client *golangsdk.ServiceClient, opts ListLogItemsOpts) { +func ListLogItems(client *golangsdk.ServiceClient, opts ListLogItemsOpts) (*ListLogItemsResponse, error) { // POST /v2/{project_id}/als/action } diff --git a/openstack/aom/v2/monitor/AddAlarmRule.go b/openstack/aom/v2/monitor/AddAlarmRule.go index 41982ad02..849167ffa 100644 --- a/openstack/aom/v2/monitor/AddAlarmRule.go +++ b/openstack/aom/v2/monitor/AddAlarmRule.go @@ -1,110 +1,28 @@ package monitor -import "github.com/opentelekomcloud/gophertelekomcloud" +import ( + "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" + "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" +) -type AddAlarmRuleOpts struct { - // Statistic. - // - // Value Range - // - // maximum, minimum, average, sum, or sampleCount. - Statistic string `json:"statistic" required:"true"` - // Namespace. - // - // Value Range - // - // 1-255 characters. Colons (:) are not allowed. - Namespace string `json:"namespace" required:"true"` - // Metric name. - // - // Value Range - // - // 1-255 characters. - MetricName string `json:"metricName" required:"true"` - // Statistical period. - // - // Value Range - // - // 20000, 60000, 300000, 900000, 1800000, 3600000, 14400000, or 86400000 - Period *int `json:"period" required:"true"` - // Alarm severity. - // - // Value Range - // - // 4, 3, 2, or 1 - AlarmLevel *int `json:"alarmLevel,omitempty"` - // Number of consecutive periods. - // - // Value Range - // - // 4, 3, or 2 - EvaluationPeriods *int `json:"evaluationPeriods" required:"true"` - // Comparison operator. - // - // Value Range - // - // >, >=, <, or <= - ComparisonOperator string `json:"comparisonOperator" required:"true"` - // Threshold. - // - // Value Range - // - // Non-null value that can be converted to a value of the double type. Once converted, the value cannot be null, or be a positive or negative infinity. - Threshold string `json:"threshold" required:"true"` - // Threshold name. - // - // Value Range - // - // 1-255 characters. Special characters are not allowed. - AlarmName string `json:"alarmName" required:"true"` - // Metric dimension. - // - // Value Range - // - // Non-null; number of dimensions < 100 - Dimensions []Dimension `json:"dimensions" required:"true"` - // Metric unit. - // - // Value Range - // - // Number of characters < 32 - Unit string `json:"unit,omitempty"` - // Whether to enable the alarm function. - ActionEnabled *bool `json:"actionEnabled,omitempty"` - // Alarm action. - // - // Value Range - // - // Size <= 5 - AlarmActions []string `json:"alarmActions,omitempty"` - // Suggestion. - // - // Value Range - // - // Number of characters < 255 - AlarmAdvice string `json:"alarmAdvice,omitempty"` - // Threshold rule description. - // - // Value Range - // - // Number of characters < 255 - AlarmDescription string `json:"alarmDescription,omitempty"` - // Action to be taken when data is insufficient. - // - // Value Range - // - // Size <= 5 - InsufficientDataActions []string `json:"insufficientDataActions,omitempty"` - // Recovery action. - // - // Value Range - // - // Size <= 5 - OkActions []string `json:"okActions,omitempty"` -} +func AddAlarmRule(client *golangsdk.ServiceClient, opts Threshold) (*AddAlarmRuleResponse, error) { + b, err := build.RequestBody(opts, "") + if err != nil { + return nil, err + } -func AddAlarmRule(client *golangsdk.ServiceClient) { // POST /v2/{project_id}/ams/alarms + raw, err := client.Post(client.ServiceURL("ams", "alarms"), b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + }) + if err != nil { + return nil, err + } + + var res AddAlarmRuleResponse + err = extract.Into(raw.Body, &res) + return &res, err } type AddAlarmRuleResponse struct { diff --git a/openstack/aom/v2/monitor/AddMetricData.go b/openstack/aom/v2/monitor/AddMetricData.go index 8fcace935..5ff25b49d 100644 --- a/openstack/aom/v2/monitor/AddMetricData.go +++ b/openstack/aom/v2/monitor/AddMetricData.go @@ -5,7 +5,8 @@ import "github.com/opentelekomcloud/gophertelekomcloud" type AddMetricDataOpts struct { // Metric data. Metric MetricAdd `json:"metric" required:"true"` - Values []Value `json:"values" required:"true"` + // + Values []Value `json:"values" required:"true"` // Data collection time, which must meet the following requirement: // // Current UTC time - Data collection time <= 24 hours, or Data collection time - Current UTC time <= 30 minutes @@ -54,7 +55,7 @@ type Value struct { Value *float32 `json:"value" required:"true"` } -func AddMetricData(client *golangsdk.ServiceClient) { +func AddMetricData(client *golangsdk.ServiceClient) (*AddMetricDataResponse, error) { // POST /v2/{project_id}/ams/report/metricdata } diff --git a/openstack/aom/v2/monitor/DeleteAlarmRule.go b/openstack/aom/v2/monitor/DeleteAlarmRule.go index eb9eef27b..969d6c577 100644 --- a/openstack/aom/v2/monitor/DeleteAlarmRule.go +++ b/openstack/aom/v2/monitor/DeleteAlarmRule.go @@ -2,6 +2,6 @@ package monitor import "github.com/opentelekomcloud/gophertelekomcloud" -func DeleteAlarmRule(client *golangsdk.ServiceClient) { +func DeleteAlarmRule(client *golangsdk.ServiceClient, alarmId int64) error { // DELETE /v2/{project_id}/ams/alarms/{alarm_id} } diff --git a/openstack/aom/v2/monitor/ListAlarmRule.go b/openstack/aom/v2/monitor/ListAlarmRule.go index 1766e92d1..1d53d074b 100644 --- a/openstack/aom/v2/monitor/ListAlarmRule.go +++ b/openstack/aom/v2/monitor/ListAlarmRule.go @@ -2,6 +2,43 @@ package monitor import "github.com/opentelekomcloud/gophertelekomcloud" -func ListAlarmRule(client *golangsdk.ServiceClient) { +type ListAlarmRuleOpts struct { + // Value range: 1-1000. Default value: 1000. + // + // Maximum number of returned records. + // + // Value Range + // + // (0,1000] + Limit *int `json:"limit,omitempty"` + // Pagination information. + // + // Value Range + // + // [0, (Maximum value of the int type - 1000)] + Start *int `json:"start,omitempty"` +} + +func ListAlarmRule(client *golangsdk.ServiceClient, opts ListAlarmRuleOpts) (*ListAlarmRuleResponse, error) { // GET /v2/{project_id}/ams/alarms } + +type ListAlarmRuleResponse struct { + // Response code. + ErrorCode string `json:"errorCode"` + // Response message. + ErrorMessage string `json:"errorMessage"` + // Metadata, including pagination information. + MetaData MetaData `json:"metaData"` + // Threshold rule list. + Thresholds []Threshold `json:"thresholds"` +} + +type MetaData struct { + // Number of returned records. + Count *int `json:"count"` + // Total number of records. + Start string `json:"start"` + // Start of the next page, which is used for pagination. + Total *int `json:"total"` +} diff --git a/openstack/aom/v2/monitor/ListMetricItems.go b/openstack/aom/v2/monitor/ListMetricItems.go index 8d48d80e5..6dc13f3b2 100644 --- a/openstack/aom/v2/monitor/ListMetricItems.go +++ b/openstack/aom/v2/monitor/ListMetricItems.go @@ -38,7 +38,7 @@ type Dimension struct { Value string `json:"value" required:"true"` } -func ListMetricItems(client *golangsdk.ServiceClient, opts ListMetricItemsOpts) { +func ListMetricItems(client *golangsdk.ServiceClient, opts ListMetricItemsOpts) (*ListMetricItemsResponse, error) { // POST /v2/{project_id}/ams/metrics type RequestParameter struct { // If type (a URI parameter) is not inventory, the information carried by the array is used to query metrics. diff --git a/openstack/aom/v2/monitor/ShowAlarmRule.go b/openstack/aom/v2/monitor/ShowAlarmRule.go index 45c95bddd..61bf71c12 100644 --- a/openstack/aom/v2/monitor/ShowAlarmRule.go +++ b/openstack/aom/v2/monitor/ShowAlarmRule.go @@ -2,6 +2,122 @@ package monitor import "github.com/opentelekomcloud/gophertelekomcloud" -func ShowAlarmRule(client *golangsdk.ServiceClient) { +func ShowAlarmRule(client *golangsdk.ServiceClient, alarmId int64) (*ShowAlarmRuleResponse, error) { // GET /v2/{project_id}/ams/alarms/{alarm_id} } + +type ShowAlarmRuleResponse struct { + // Response code. + ErrorCode string `json:"errorCode"` + // Response message. + ErrorMessage string `json:"errorMessage"` + // Threshold rule list. + Thresholds []Threshold `json:"thresholds"` +} + +type Threshold struct { + // Statistic. + // + // Value Range + // + // maximum, minimum, average, sum, or sampleCount. + Statistic string `json:"statistic" required:"true"` + // Namespace. + // + // Value Range + // + // 1-255 characters. Colons (:) are not allowed. + Namespace string `json:"namespace" required:"true"` + // Metric name. + // + // Value Range + // + // 1-255 characters. + MetricName string `json:"metricName" required:"true"` + // Statistical period. + // + // Value Range + // + // 20000, 60000, 300000, 900000, 1800000, 3600000, 14400000, or 86400000 + Period *int `json:"period" required:"true"` + // Alarm severity. + // + // Value Range + // + // 4, 3, 2, or 1 + AlarmLevel *int `json:"alarmLevel,omitempty"` + // Number of consecutive periods. + // + // Value Range + // + // 4, 3, or 2 + EvaluationPeriods *int `json:"evaluationPeriods" required:"true"` + // Comparison operator. + // + // Value Range + // + // >, >=, <, or <= + ComparisonOperator string `json:"comparisonOperator" required:"true"` + // Threshold. + // + // Value Range + // + // Non-null value that can be converted to a value of the double type. Once converted, the value cannot be null, or be a positive or negative infinity. + Threshold *int64 `json:"threshold" required:"true"` + // Threshold name. + // + // Value Range + // + // 1-255 characters. Special characters are not allowed. + AlarmName string `json:"alarmName" required:"true"` + // Metric dimension. + // + // Value Range + // + // Non-null; number of dimensions < 100 + Dimensions []Dimension `json:"dimensions" required:"true"` + // Metric unit. + // + // Value Range + // + // Number of characters < 32 + Unit string `json:"unit,omitempty"` + // Whether to enable the alarm function. + ActionEnabled *bool `json:"actionEnabled,omitempty"` + // Alarm action. + // + // Value Range + // + // Size <= 5 + AlarmActions []string `json:"alarmActions,omitempty"` + // Suggestion. + // + // Value Range + // + // Number of characters < 255 + AlarmAdvice string `json:"alarmAdvice,omitempty"` + // Threshold rule description. + // + // Value Range + // + // Number of characters < 255 + AlarmDescription string `json:"alarmDescription,omitempty"` + // Action to be taken when data is insufficient. + // + // Value Range + // + // Size <= 5 + InsufficientDataActions []string `json:"insufficientDataActions,omitempty"` + // Recovery action. + // + // Value Range + // + // Size <= 5 + OkActions []string `json:"okActions,omitempty"` + // ? + StateValue string `json:"stateValue,omitempty"` + // ? + StateReason string `json:"stateReason,omitempty"` + // ? + StateUpdatedTimestamp *int64 `json:"stateUpdatedTimestamp,omitempty"` +} diff --git a/openstack/aom/v2/monitor/ShowMetricsData.go b/openstack/aom/v2/monitor/ShowMetricsData.go index 1cd80ed51..98535ead4 100644 --- a/openstack/aom/v2/monitor/ShowMetricsData.go +++ b/openstack/aom/v2/monitor/ShowMetricsData.go @@ -79,7 +79,7 @@ type MetricQuery struct { Dimensions []Dimension `json:"dimensions" required:"true"` } -func ShowMetricsData(client *golangsdk.ServiceClient) { +func ShowMetricsData(client *golangsdk.ServiceClient, opts ShowMetricsDataOpts, q ShowMetricsDataQuery) (*ShowMetricsDataResponse, error) { // POST /v2/{project_id}/ams/metricdata } diff --git a/openstack/aom/v2/monitor/UpdateAlarmRule.go b/openstack/aom/v2/monitor/UpdateAlarmRule.go index 5894ed527..06951fffd 100644 --- a/openstack/aom/v2/monitor/UpdateAlarmRule.go +++ b/openstack/aom/v2/monitor/UpdateAlarmRule.go @@ -2,108 +2,7 @@ package monitor import "github.com/opentelekomcloud/gophertelekomcloud" -type UpdateAlarmRuleOpts struct { - // Statistic. - // - // Value Range - // - // maximum, minimum, average, sum, or sampleCount. - Statistic string `json:"statistic" required:"true"` - // Namespace. The value transferred to the backend when a threshold rule is added will be used. The value transferred here will not replace that value. - // - // Value Range - // - // 1-255 characters. Colons (:) are not allowed. - Namespace string `json:"namespace" required:"true"` - // Metric name. The value transferred to the backend when a threshold rule is added will be used. The value transferred here will not replace that value. - // - // Value Range - // - // 1-255 characters. - MetricName string `json:"metricName" required:"true"` - // Statistical period. - // - // Value Range - // - // 20000, 60000, 300000, 900000, 1800000, 3600000, 14400000, or 86400000 - Period *int `json:"period" required:"true"` - // Alarm severity. - // - // Value Range - // - // 4, 3, 2, or 1 - AlarmLevel *int `json:"alarmLevel,omitempty"` - // Number of consecutive periods. - // - // Value Range - // - // 4, 3, or 2 - EvaluationPeriods *int `json:"evaluationPeriods" required:"true"` - // Comparison operator. - // - // Value Range - // - // >, >=, <, or <= - ComparisonOperator string `json:"comparisonOperator" required:"true"` - // Threshold. - // - // Value Range - // - // Non-null value that can be converted to a value of the double type. Once converted, the value cannot be null, or be a positive or negative infinity. - Threshold *float64 `json:"threshold" required:"true"` - // Threshold name. - // - // Value Range - // - // 1-255 characters. Special characters are not allowed. - AlarmName string `json:"alarmName" required:"true"` - // Metric dimension. The value transferred to the backend when a threshold rule is added will be used. The value transferred here will not replace that value. - // - // Value Range - // - // Non-null; size < 100 - Dimensions []Dimension `json:"dimensions" required:"true"` - // Metric unit. The value transferred to the backend when a threshold rule is added will be used. The value transferred here will not replace that value. - // - // Value Range - // - // Number of characters < 32 - Unit string `json:"unit,omitempty"` - // Whether to enable the alarm function. - ActionEnabled *bool `json:"actionEnabled,omitempty"` - // Alarm action. - // - // Value Range - // - // Size <= 5 - AlarmActions []string `json:"alarmActions,omitempty"` - // Alarm suggestion. Leave this parameter blank. - // - // Value Range - // - // Number of characters < 255 - AlarmAdvice string `json:"alarmAdvice,omitempty"` - // Threshold rule description. - // - // Value Range - // - // Number of characters < 255 - AlarmDescription string `json:"alarmDescription,omitempty"` - // Action to be taken when data is insufficient. - // - // Value Range - // - // Size <= 5 - InsufficientDataActions []string `json:"insufficientDataActions,omitempty"` - // Recovery action. - // - // Value Range - // - // Size <= 5 - OkActions []string `json:"okActions,omitempty"` -} - -func UpdateAlarmRule(client *golangsdk.ServiceClient) { +func UpdateAlarmRule(client *golangsdk.ServiceClient, opts Threshold) (*UpdateAlarmRuleResponse, error) { // PUT /v2/{project_id}/ams/alarms } From f9acd1a7468efba42878472412732bc5b3555dbb Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Wed, 12 Jul 2023 06:36:32 +0200 Subject: [PATCH 08/11] DeleteAlarmRule --- openstack/aom/v2/monitor/AddMetricData.go | 23 +++++++++++++++++++-- openstack/aom/v2/monitor/DeleteAlarmRule.go | 10 +++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/openstack/aom/v2/monitor/AddMetricData.go b/openstack/aom/v2/monitor/AddMetricData.go index 5ff25b49d..8a89f03ed 100644 --- a/openstack/aom/v2/monitor/AddMetricData.go +++ b/openstack/aom/v2/monitor/AddMetricData.go @@ -1,6 +1,10 @@ package monitor -import "github.com/opentelekomcloud/gophertelekomcloud" +import ( + "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" + "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" +) type AddMetricDataOpts struct { // Metric data. @@ -55,8 +59,23 @@ type Value struct { Value *float32 `json:"value" required:"true"` } -func AddMetricData(client *golangsdk.ServiceClient) (*AddMetricDataResponse, error) { +func AddMetricData(client *golangsdk.ServiceClient, opts AddMetricDataOpts) (*AddMetricDataResponse, error) { + b, err := build.RequestBody(opts, "") + if err != nil { + return nil, err + } + // POST /v2/{project_id}/ams/report/metricdata + raw, err := client.Post(client.ServiceURL("ams", "report", "metricdata"), b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + }) + if err != nil { + return nil, err + } + + var res AddMetricDataResponse + err = extract.Into(raw.Body, &res) + return &res, err } type AddMetricDataResponse struct { diff --git a/openstack/aom/v2/monitor/DeleteAlarmRule.go b/openstack/aom/v2/monitor/DeleteAlarmRule.go index 969d6c577..bf2f3a82e 100644 --- a/openstack/aom/v2/monitor/DeleteAlarmRule.go +++ b/openstack/aom/v2/monitor/DeleteAlarmRule.go @@ -1,7 +1,13 @@ package monitor -import "github.com/opentelekomcloud/gophertelekomcloud" +import ( + "strconv" -func DeleteAlarmRule(client *golangsdk.ServiceClient, alarmId int64) error { + "github.com/opentelekomcloud/gophertelekomcloud" +) + +func DeleteAlarmRule(client *golangsdk.ServiceClient, alarmId int64) (err error) { // DELETE /v2/{project_id}/ams/alarms/{alarm_id} + _, err = client.Delete(client.ServiceURL("ams", "alarms", strconv.FormatInt(alarmId, 10)), nil) + return } From 9e4512c5b7bbde01d5767eefb2e890124c271354 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Wed, 12 Jul 2023 07:18:30 +0200 Subject: [PATCH 09/11] ListAlarmRule --- openstack/aom/v2/monitor/ListAlarmRule.go | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/openstack/aom/v2/monitor/ListAlarmRule.go b/openstack/aom/v2/monitor/ListAlarmRule.go index 1d53d074b..99083de66 100644 --- a/openstack/aom/v2/monitor/ListAlarmRule.go +++ b/openstack/aom/v2/monitor/ListAlarmRule.go @@ -1,6 +1,9 @@ package monitor -import "github.com/opentelekomcloud/gophertelekomcloud" +import ( + "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" +) type ListAlarmRuleOpts struct { // Value range: 1-1000. Default value: 1000. @@ -10,17 +13,30 @@ type ListAlarmRuleOpts struct { // Value Range // // (0,1000] - Limit *int `json:"limit,omitempty"` + Limit *int `q:"limit"` // Pagination information. // // Value Range // // [0, (Maximum value of the int type - 1000)] - Start *int `json:"start,omitempty"` + Start *int `q:"start"` } func ListAlarmRule(client *golangsdk.ServiceClient, opts ListAlarmRuleOpts) (*ListAlarmRuleResponse, error) { + q, err := golangsdk.BuildQueryString(opts) + if err != nil { + return nil, err + } + // GET /v2/{project_id}/ams/alarms + raw, err := client.Get(client.ServiceURL("ams", "alarms")+q.String(), nil, nil) + if err != nil { + return nil, err + } + + var res ListAlarmRuleResponse + err = extract.Into(raw.Body, &res) + return &res, err } type ListAlarmRuleResponse struct { From 07882d0df8480b3a40538ddb0788ac8eeef9f321 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Wed, 12 Jul 2023 07:46:53 +0200 Subject: [PATCH 10/11] UpdateAlarmRule --- openstack/aom/v2/monitor/ListMetricItems.go | 39 ++++++++++++++++++--- openstack/aom/v2/monitor/ShowAlarmRule.go | 15 +++++++- openstack/aom/v2/monitor/ShowMetricsData.go | 28 +++++++++++++-- openstack/aom/v2/monitor/UpdateAlarmRule.go | 21 ++++++++++- 4 files changed, 94 insertions(+), 9 deletions(-) diff --git a/openstack/aom/v2/monitor/ListMetricItems.go b/openstack/aom/v2/monitor/ListMetricItems.go index 6dc13f3b2..d633b7d24 100644 --- a/openstack/aom/v2/monitor/ListMetricItems.go +++ b/openstack/aom/v2/monitor/ListMetricItems.go @@ -1,6 +1,19 @@ package monitor -import "github.com/opentelekomcloud/gophertelekomcloud" +import ( + "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" + "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" +) + +type ListMetricItemsQuery struct { + // Metric query mode. The information carried by metricItems in the request body is used to query metrics. + Type string `q:"type"` + // Maximum number of returned records. Value range: 1-1000. Default value: 1000. + Limit int `q:"limit"` + // Start position of a pagination query. The value is a non-negative integer. + Start int `q:"start"` +} type ListMetricItemsOpts struct { // Metric namespace. @@ -38,12 +51,28 @@ type Dimension struct { Value string `json:"value" required:"true"` } -func ListMetricItems(client *golangsdk.ServiceClient, opts ListMetricItemsOpts) (*ListMetricItemsResponse, error) { +func ListMetricItems(client *golangsdk.ServiceClient, opts []ListMetricItemsOpts, query ListMetricItemsQuery) (*ListMetricItemsResponse, error) { + q, err := golangsdk.BuildQueryString(query) + if err != nil { + return nil, err + } + + b, err := build.RequestBody(opts, "metricItems") + if err != nil { + return nil, err + } + // POST /v2/{project_id}/ams/metrics - type RequestParameter struct { - // If type (a URI parameter) is not inventory, the information carried by the array is used to query metrics. - MetricItems []ListMetricItemsOpts `json:"metricItems,omitempty"` + raw, err := client.Post(client.ServiceURL("ams", "metrics")+q.String(), b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + }) + if err != nil { + return nil, err } + + var res ListMetricItemsResponse + err = extract.Into(raw.Body, &res) + return &res, err } type ListMetricItemsResponse struct { diff --git a/openstack/aom/v2/monitor/ShowAlarmRule.go b/openstack/aom/v2/monitor/ShowAlarmRule.go index 61bf71c12..3f5de5025 100644 --- a/openstack/aom/v2/monitor/ShowAlarmRule.go +++ b/openstack/aom/v2/monitor/ShowAlarmRule.go @@ -1,9 +1,22 @@ package monitor -import "github.com/opentelekomcloud/gophertelekomcloud" +import ( + "strconv" + + "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" +) func ShowAlarmRule(client *golangsdk.ServiceClient, alarmId int64) (*ShowAlarmRuleResponse, error) { // GET /v2/{project_id}/ams/alarms/{alarm_id} + raw, err := client.Get(client.ServiceURL("ams", "alarms", strconv.FormatInt(alarmId, 10)), nil, nil) + if err != nil { + return nil, err + } + + var res ShowAlarmRuleResponse + err = extract.Into(raw.Body, &res) + return &res, err } type ShowAlarmRuleResponse struct { diff --git a/openstack/aom/v2/monitor/ShowMetricsData.go b/openstack/aom/v2/monitor/ShowMetricsData.go index 98535ead4..85c35ff02 100644 --- a/openstack/aom/v2/monitor/ShowMetricsData.go +++ b/openstack/aom/v2/monitor/ShowMetricsData.go @@ -1,6 +1,10 @@ package monitor -import "github.com/opentelekomcloud/gophertelekomcloud" +import ( + "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" + "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" +) type ShowMetricsDataQuery struct { // Filled value for breakpoints in monitoring data. Default value: -1. @@ -79,8 +83,28 @@ type MetricQuery struct { Dimensions []Dimension `json:"dimensions" required:"true"` } -func ShowMetricsData(client *golangsdk.ServiceClient, opts ShowMetricsDataOpts, q ShowMetricsDataQuery) (*ShowMetricsDataResponse, error) { +func ShowMetricsData(client *golangsdk.ServiceClient, opts ShowMetricsDataOpts, query ShowMetricsDataQuery) (*ShowMetricsDataResponse, error) { + q, err := golangsdk.BuildQueryString(query) + if err != nil { + return nil, err + } + + b, err := build.RequestBody(opts, "") + if err != nil { + return nil, err + } + // POST /v2/{project_id}/ams/metricdata + raw, err := client.Post(client.ServiceURL("ams", "metricdata")+q.String(), b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + }) + if err != nil { + return nil, err + } + + var res ShowMetricsDataResponse + err = extract.Into(raw.Body, &res) + return &res, err } type ShowMetricsDataResponse struct { diff --git a/openstack/aom/v2/monitor/UpdateAlarmRule.go b/openstack/aom/v2/monitor/UpdateAlarmRule.go index 06951fffd..92fb6bf24 100644 --- a/openstack/aom/v2/monitor/UpdateAlarmRule.go +++ b/openstack/aom/v2/monitor/UpdateAlarmRule.go @@ -1,9 +1,28 @@ package monitor -import "github.com/opentelekomcloud/gophertelekomcloud" +import ( + "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" + "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" +) func UpdateAlarmRule(client *golangsdk.ServiceClient, opts Threshold) (*UpdateAlarmRuleResponse, error) { + b, err := build.RequestBody(opts, "") + if err != nil { + return nil, err + } + // PUT /v2/{project_id}/ams/alarms + raw, err := client.Put(client.ServiceURL("ams", "alarms"), b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + }) + if err != nil { + return nil, err + } + + var res UpdateAlarmRuleResponse + err = extract.Into(raw.Body, &res) + return &res, err } type UpdateAlarmRuleResponse struct { From f87ee4f2a9b186971bfde882d67238596659a1c8 Mon Sep 17 00:00:00 2001 From: Aloento <11802769+Aloento@users.noreply.github.com> Date: Wed, 12 Jul 2023 07:51:48 +0200 Subject: [PATCH 11/11] ListLogItems --- openstack/aom/v2/log/ListLogItems.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/openstack/aom/v2/log/ListLogItems.go b/openstack/aom/v2/log/ListLogItems.go index 3ed3863b0..1fcf9861b 100644 --- a/openstack/aom/v2/log/ListLogItems.go +++ b/openstack/aom/v2/log/ListLogItems.go @@ -1,6 +1,10 @@ package log -import "github.com/opentelekomcloud/gophertelekomcloud" +import ( + "github.com/opentelekomcloud/gophertelekomcloud" + "github.com/opentelekomcloud/gophertelekomcloud/internal/build" + "github.com/opentelekomcloud/gophertelekomcloud/internal/extract" +) type ListLogItemsOpts struct { // Log type: @@ -65,7 +69,22 @@ type SearchKey struct { } func ListLogItems(client *golangsdk.ServiceClient, opts ListLogItemsOpts) (*ListLogItemsResponse, error) { + b, err := build.RequestBody(opts, "") + if err != nil { + return nil, err + } + // POST /v2/{project_id}/als/action + raw, err := client.Post(client.ServiceURL("als", "action")+"?type=querylogs", b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + }) + if err != nil { + return nil, err + } + + var res ListLogItemsResponse + err = extract.Into(raw.Body, &res) + return &res, err } type ListLogItemsResponse struct {