github.com/huaweicloud/golangsdk@v0.0.0-20210831081626-d823fe11ceba/openstack/ces/v1/metricdata/requests.go (about) 1 package metricdata 2 3 import ( 4 "github.com/huaweicloud/golangsdk" 5 ) 6 7 // BatchQueryOptsBuilder allows extensions to add additional parameters to the 8 // BatchQuery request. 9 type BatchQueryOptsBuilder interface { 10 ToBatchQueryOptsMap() (map[string]interface{}, error) 11 } 12 13 type Metric struct { 14 // Specifies the namespace in service. 15 Namespace string `json:"namespace" required:"true"` 16 17 // The value can be a string of 1 to 64 characters 18 // and must start with a letter and contain only uppercase 19 // letters, lowercase letters, digits, and underscores. 20 MetricName string `json:"metric_name" required:"true"` 21 22 // Specifies the list of the metric dimensions. 23 Dimensions []Dimension `json:"dimensions" required:"true"` 24 } 25 26 // BatchQueryOpts represents options for batch query metric data. 27 type BatchQueryOpts struct { 28 // Specifies the metric data. 29 Metrics []Metric `json:"metrics" required:"true"` 30 31 // Specifies the start time of the query. 32 From int64 `json:"from" required:"true"` 33 34 // Specifies the end time of the query. 35 To int64 `json:"to" required:"true"` 36 37 // Specifies the data monitoring granularity. 38 Period string `json:"period" required:"true"` 39 40 // Specifies the data rollup method. 41 Filter string `json:"filter" required:"true"` 42 } 43 44 // ToBatchQueryOptsMap builds a request body from BatchQueryOpts. 45 func (opts BatchQueryOpts) ToBatchQueryOptsMap() (map[string]interface{}, error) { 46 return golangsdk.BuildRequestBody(opts, "") 47 } 48 49 // Querying Monitoring Data in Batches. 50 func BatchQuery(client *golangsdk.ServiceClient, opts BatchQueryOptsBuilder) (r MetricDatasResult) { 51 b, err := opts.ToBatchQueryOptsMap() 52 if err != nil { 53 r.Err = err 54 return 55 } 56 _, r.Err = client.Post(batchQueryMetricDataURL(client), b, &r.Body, &golangsdk.RequestOpts{ 57 OkCodes: []int{200}}) 58 return 59 } 60 61 type AddMetricDataOpts []AddMetricDataItem 62 63 type GetEventDataOpts struct { 64 // 指标的维度,目前最大支持3个维度,维度编号从0开始;维度格式为dim.{i}=key,value参考弹性云服务器维度。例如dim.0=instance_id,i-12345 65 Dim0 string `q:"dim.0" required:"true"` 66 Dim1 string `q:"dim.1"` 67 Dim2 string `q:"dim.2"` 68 // 查询数据起始时间,UNIX时间戳,单位毫秒。 69 From string `q:"from" required:"true"` 70 // 指标命名空间,例如弹性云服务器命名空间。 71 Namespace string `q:"namespace" required:"true"` 72 // 查询数据截止时间UNIX时间戳,单位毫秒。from必须小于to。 73 To string `q:"to" required:"true"` 74 // 事件类型,只允许字母、下划线、中划线,字母开头,长度不超过64,如instance_host_info。 75 Type string `q:"type" required:"true"` 76 } 77 78 type GetOpts struct { 79 // 指标的维度,目前最大支持3个维度,维度编号从0开始;维度格式为dim.{i}=key,value,最大值为256。 例如dim.0=instance_id,i-12345 80 Dim0 string `q:"dim.0" required:"true"` 81 Dim1 string `q:"dim.1"` 82 Dim2 string `q:"dim.2"` 83 // 数据聚合方式。 支持的值为max, min, average, sum, variance。 84 Filter string `q:"filter" required:"true"` 85 // 查询数据起始时间,UNIX时间戳,单位毫秒。建议from的值相对于当前时间向前偏移至少1个周期。由于聚合运算的过程是将一个聚合周期范围内的数据点聚合到周期起始边界上,如果将from和to的范围设置在聚合周期内,会因为聚合未完成而造成查询数据为空,所以建议from参数相对于当前时间向前偏移至少1个周期。以5分钟聚合周期为例:假设当前时间点为10:35,10:30~10:35之间的原始数据会被聚合到10:30这个点上,所以查询5分钟数据点时from参数应为10:30或之前。云监控会根据所选择的聚合粒度向前取整from参数。 86 From string `q:"from" required:"true"` 87 // 指标名称,例如弹性云服务器监控指标中的cpu_util。 88 MetricName string `q:"metric_name" required:"true"` 89 // 指标命名空间。 90 Namespace string `q:"namespace" required:"true"` 91 // 监控数据粒度。 取值范围: 1,实时数据 300,5分钟粒度 1200,20分钟粒度 3600,1小时粒度 14400,4小时粒度 86400,1天粒度 92 Period string `q:"period" required:"true"` 93 // 查询数据截止时间UNIX时间戳,单位毫秒。from必须小于to。 94 To string `q:"to" required:"true"` 95 } 96 97 type AddMetricDataItem struct { 98 // 指标数据。 99 Metric MetricInfo `json:"metric" required:"true"` 100 // 数据的有效期,超出该有效期则自动删除该数据,单位秒,最大值604800。 101 Ttl int `json:"ttl" required:"true"` 102 // 数据收集时间 UNIX时间戳,单位毫秒。 说明: 因为客户端到服务器端有延时,因此插入数据的时间戳应该在[当前时间-3天+20秒,当前时间+10分钟-20秒]区间内,保证到达服务器时不会因为传输时延造成数据不能插入数据库。 103 CollectTime int `json:"collect_time" required:"true"` 104 // 指标数据的值。 105 Value float64 `json:"value" required:"true"` 106 // 数据的单位。 107 Unit string `json:"unit,omitempty"` 108 // 数据的类型,只能是\"int\"或\"float\" 109 Type string `json:"type,omitempty"` 110 } 111 112 // 指标信息 113 type MetricInfo struct { 114 // 指标维度 115 Dimensions []MetricsDimension `json:"dimensions" required:"true"` 116 // 指标名称,必须以字母开头,只能包含0-9/a-z/A-Z/_,长度最短为1,最大为64。 具体指标名请参见查询指标列表中查询出的指标名。 117 MetricName string `json:"metric_name" required:"true"` 118 // 指标命名空间,,例如弹性云服务器命名空间。格式为service.item;service和item必须是字符串,必须以字母开头,只能包含0-9/a-z/A-Z/_,总长度最短为3,最大为32。说明: 当alarm_type为(EVENT.SYS| EVENT.CUSTOM)时允许为空。 119 Namespace string `json:"namespace" required:"true"` 120 } 121 122 // 指标维度 123 type MetricsDimension struct { 124 // 维度名 125 Name string `json:"name,omitempty"` 126 // 维度值 127 Value string `json:"value,omitempty"` 128 } 129 130 func (opts AddMetricDataItem) ToMap() (map[string]interface{}, error) { 131 return golangsdk.BuildRequestBody(opts, "") 132 } 133 134 type AddMetricDataOptsBuilder interface { 135 ToAddMetricDataMap() ([]map[string]interface{}, error) 136 } 137 138 func (opts AddMetricDataOpts) ToAddMetricDataMap() ([]map[string]interface{}, error) { 139 newOpts := make([]map[string]interface{}, len(opts)) 140 for i, opt := range opts { 141 opt, err := opt.ToMap() 142 if err != nil { 143 return nil, err 144 } 145 newOpts[i] = opt 146 } 147 return newOpts, nil 148 } 149 150 func AddMetricData(client *golangsdk.ServiceClient, opts AddMetricDataOptsBuilder) (r AddMetricDataResult) { 151 b, err := opts.ToAddMetricDataMap() 152 if err != nil { 153 r.Err = err 154 return 155 } 156 157 _, r.Err = client.Post(addMetricDataURL(client), b, nil, &golangsdk.RequestOpts{ 158 OkCodes: []int{201}, 159 }) 160 return 161 } 162 163 func GetEventData(client *golangsdk.ServiceClient, opts GetEventDataOpts) (r GetEventDataResult) { 164 q, err := golangsdk.BuildQueryString(&opts) 165 if err != nil { 166 r.Err = err 167 return 168 } 169 url := getEventDataURL(client) + q.String() 170 _, r.Err = client.Get(url, &r.Body, &golangsdk.RequestOpts{ 171 OkCodes: []int{200}, 172 }) 173 174 return 175 } 176 177 func Get(client *golangsdk.ServiceClient, opts GetOpts) (r GetResult) { 178 q, err := golangsdk.BuildQueryString(&opts) 179 if err != nil { 180 r.Err = err 181 return 182 } 183 url := getURL(client) + q.String() 184 _, r.Err = client.Get(url, &r.Body, &golangsdk.RequestOpts{ 185 OkCodes: []int{200}, 186 }) 187 188 return 189 }