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  }