func (c *CloudWatch) ListMetrics(req *ListMetricsRequest) (result *ListMetricsResponse, err error) { // Serialize all the params params := aws.MakeParams("ListMetrics") if req.Namespace != "" { params["Namespace"] = req.Namespace } if len(req.Dimensions) > 0 { for i, d := range req.Dimensions { prefix := "Dimensions.member." + strconv.Itoa(i+1) params[prefix+".Name"] = d.Name params[prefix+".Value"] = d.Value } } result = new(ListMetricsResponse) err = c.query("GET", "/", params, &result) metrics := result.ListMetricsResult.Metrics if result.ListMetricsResult.NextToken != "" { params = aws.MakeParams("ListMetrics") params["NextToken"] = result.ListMetricsResult.NextToken for result.ListMetricsResult.NextToken != "" && err == nil { result = new(ListMetricsResponse) err = c.query("GET", "/", params, &result) if err == nil { newslice := make([]Metric, len(metrics)+len(result.ListMetricsResult.Metrics)) copy(newslice, metrics) copy(newslice[len(metrics):], result.ListMetricsResult.Metrics) metrics = newslice } } result.ListMetricsResult.Metrics = metrics } return }
// Get statistics for specified metric // // If the arguments are invalid or the server returns an error, the error will // be set and the other values undefined. func (c *CloudWatch) GetMetricStatistics(req *GetMetricStatisticsRequest) (result *GetMetricStatisticsResponse, err error) { statisticsSet := sets.SSet(req.Statistics...) // Kick out argument errors switch { case req.EndTime.IsZero(): err = errors.New("No endTime specified") case req.StartTime.IsZero(): err = errors.New("No startTime specified") case req.MetricName == "": err = errors.New("No metricName specified") case req.Namespace == "": err = errors.New("No Namespace specified") case req.Period < 60 || req.Period%60 != 0: err = errors.New("Period not 60 seconds or a multiple of 60 seconds") case len(req.Statistics) < 1: err = errors.New("No statistics supplied") case validMetricStatistics.Union(statisticsSet).Len() != validMetricStatistics.Len(): err = errors.New("Invalid statistic values supplied") case req.Unit != "" && !validUnits.Member(req.Unit): err = errors.New("Unit is not a valid value") } if err != nil { return } // Serialize all the params params := aws.MakeParams("GetMetricStatistics") params["EndTime"] = req.EndTime.UTC().Format(time.RFC3339) params["StartTime"] = req.StartTime.UTC().Format(time.RFC3339) params["MetricName"] = req.MetricName params["Namespace"] = req.Namespace params["Period"] = strconv.Itoa(req.Period) if req.Unit != "" { params["Unit"] = req.Unit } // Serialize the lists of data for i, d := range req.Dimensions { prefix := "Dimensions.member." + strconv.Itoa(i+1) params[prefix+".Name"] = d.Name params[prefix+".Value"] = d.Value } for i, d := range req.Statistics { prefix := "Statistics.member." + strconv.Itoa(i+1) params[prefix] = d } result = new(GetMetricStatisticsResponse) err = c.query("GET", "/", params, result) return }
func (c *CloudWatch) PutMetricDataNamespace(metrics []MetricDatum, namespace string) (result *aws.BaseResponse, err error) { // Serialize the params params := aws.MakeParams("PutMetricData") if namespace != "" { params["Namespace"] = namespace } for i, metric := range metrics { prefix := "MetricData.member." + strconv.Itoa(i+1) if metric.MetricName == "" { err = fmt.Errorf("No metric name supplied for metric: %d", i) return } params[prefix+".MetricName"] = metric.MetricName if metric.Unit != "" { params[prefix+".Unit"] = metric.Unit } if metric.Value != 0 { params[prefix+".Value"] = strconv.FormatFloat(metric.Value, 'E', 10, 64) } if !metric.Timestamp.IsZero() { params[prefix+".Timestamp"] = metric.Timestamp.UTC().Format(time.RFC3339) } for j, dim := range metric.Dimensions { dimprefix := prefix + ".Dimensions.member." + strconv.Itoa(j+1) params[dimprefix+".Name"] = dim.Name params[dimprefix+".Value"] = dim.Value } if metric.StatisticValues != nil { statprefix := prefix + ".StatisticValues" params[statprefix+".Maximum"] = strconv.FormatFloat(metric.StatisticValues.Maximum, 'E', 10, 64) params[statprefix+".Minimum"] = strconv.FormatFloat(metric.StatisticValues.Minimum, 'E', 10, 64) params[statprefix+".SampleCount"] = strconv.FormatFloat(metric.StatisticValues.SampleCount, 'E', 10, 64) params[statprefix+".Sum"] = strconv.FormatFloat(metric.StatisticValues.Sum, 'E', 10, 64) } } result = new(aws.BaseResponse) err = c.query("POST", "/", params, result) return }