From 5ed31fad8692c83e9dacec3cf8154876c63cce6b Mon Sep 17 00:00:00 2001 From: zhaoxiangchun Date: Wed, 18 Dec 2019 16:51:09 +0800 Subject: [PATCH] =?UTF-8?q?qcloud:=20=E7=9B=91=E6=8E=A7=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改tag名称:命名不规范 --- pkg/multicloud/qcloud/monitor.go | 72 ++++++++++++++++++++++++++++++++ pkg/multicloud/qcloud/qcloud.go | 6 +++ 2 files changed, 78 insertions(+) create mode 100644 pkg/multicloud/qcloud/monitor.go diff --git a/pkg/multicloud/qcloud/monitor.go b/pkg/multicloud/qcloud/monitor.go new file mode 100644 index 0000000000..13242f7421 --- /dev/null +++ b/pkg/multicloud/qcloud/monitor.go @@ -0,0 +1,72 @@ +package qcloud + +import ( + "strconv" + "time" + + "yunion.io/x/jsonutils" + "yunion.io/x/pkg/errors" + "yunion.io/x/pkg/util/timeutils" +) + +const ( + QCLOUD_API_VERSION_METRICS = "2018-07-24" +) + +type SQcMetricDimension struct { + Name string `json:"Name"` + Value string `json:"Value"` +} + +type SDataPoint struct { + Dimensions []SQcMetricDimension `json:"Dimensions"` + Timestamps []float64 `json:"Timestamps"` + Values []float64 `json:"Values"` +} + +type SBatchQueryMetricDataInput struct { + MetricName string `json:"MetricName"` + Namespace string `json:"Namespace"` + Metrics []SQcMetricDimension `json:"Metrics"` + StartTime int64 `json:"StartTime"` + EndTime int64 `json:"EndTime"` + Period string `json:"Period"` +} + +func (r *SRegion) metricsRequest(action string, params map[string]string) (jsonutils.JSONObject, error) { + client := r.GetClient() + cli, err := client.getDefaultClient() + if err != nil { + return nil, err + } + return monitorRequest(cli, action, params, client.Debug) +} + +func (r *SRegion) GetMonitorData(name string, ns string, since time.Time, until time.Time, + demensions []SQcMetricDimension) ([]SDataPoint, error) { + params := make(map[string]string) + params["MetricName"] = name + params["Namespace"] = ns + if !since.IsZero() { + params["StartTime"] = since.Format(timeutils.IsoTimeFormat) + + } + if !until.IsZero() { + params["EndTime"] = until.Format(timeutils.IsoTimeFormat) + } + for index, metricDimension := range demensions { + i := strconv.FormatInt(int64(index), 10) + params["Instances."+i+".Dimensions.0.Name"] = metricDimension.Name + params["Instances."+i+".Dimensions.0.Value"] = metricDimension.Value + } + body, err := r.metricsRequest("GetMonitorData", params) + if err != nil { + return nil, errors.Wrap(err, "region.MetricRequest") + } + dataArray := make([]SDataPoint, 0) + err = body.Unmarshal(&dataArray, "DataPoints") + if err != nil { + return nil, errors.Wrap(err, "resp.Unmarshal") + } + return dataArray, nil +} diff --git a/pkg/multicloud/qcloud/qcloud.go b/pkg/multicloud/qcloud/qcloud.go index d5f3f7e412..c1015222a4 100644 --- a/pkg/multicloud/qcloud/qcloud.go +++ b/pkg/multicloud/qcloud/qcloud.go @@ -161,6 +161,12 @@ func billingRequest(client *common.Client, apiName string, params map[string]str return _jsonRequest(client, domain, QCLOUD_BILLING_API_VERSION, apiName, params, debug, true) } +func monitorRequest(client *common.Client, apiName string, params map[string]string, + debug bool) (jsonutils.JSONObject, error) { + domain := "monitor.tencentcloudapi.com" + return _jsonRequest(client, domain, QCLOUD_API_VERSION_METRICS, apiName, params, debug, true) +} + // ============phpJsonRequest============ type qcloudResponse interface { tchttp.Response