in scripts/go/analyzeCUR/analyzeCUR.go [286:358]
func sendMetric(svc *cloudwatch.CloudWatch, data AthenaResponse, cwNameSpace string, cwName string, cwType string, cwDimensionName string, interval string) error {
input := cloudwatch.PutMetricDataInput{}
input.Namespace = aws.String(cwNameSpace)
i := 0
for row := range data.Rows {
// skip metric if dimension or value is empty
if len(data.Rows[row]["dimension"]) < 1 || len(data.Rows[row]["value"]) < 1 {
continue
}
// send Metric Data as we have reached 20 records, and clear MetricData Array
if i >= 20 {
_, err := svc.PutMetricData(&input)
if err != nil {
return errors.New("Could sending CW Metric: " + err.Error())
}
input.MetricData = nil
i = 0
}
var t time.Time
if interval == "hourly" {
t, _ = time.Parse("2006-01-02T15", data.Rows[row]["date"])
} else {
t, _ = time.Parse("2006-01-02", data.Rows[row]["date"])
}
v, _ := strconv.ParseFloat(data.Rows[row]["value"], 64)
metric := cloudwatch.MetricDatum{
MetricName: aws.String(cwName),
Timestamp: aws.Time(t),
Unit: aws.String(cwType),
Value: aws.Float64(v),
}
// Dimension can be a single or comma seperated list of values, or key/values
// presence of "=" sign in value designates key=value. Otherwise input cwDimensionName is used as key
d := strings.Split(data.Rows[row]["dimension"], ",")
for i := range d {
var dname, dvalue string
if strings.Contains(d[i], "=") {
dTuple := strings.Split(d[i], "=")
dname = dTuple[0]
dvalue = dTuple[1]
} else {
dname = cwDimensionName
dvalue = d[i]
}
cwD := cloudwatch.Dimension{
Name: aws.String(dname),
Value: aws.String(dvalue),
}
metric.Dimensions = append(metric.Dimensions, &cwD)
}
// add interval metric
metric.Dimensions = append(metric.Dimensions, &cloudwatch.Dimension{Name: aws.String("interval"), Value: aws.String(interval)})
// append to overall Metric Data
input.MetricData = append(input.MetricData, &metric)
i++
}
// if we still have data to send - send it
if len(input.MetricData) > 0 {
_, err := svc.PutMetricData(&input)
if err != nil {
return errors.New("Could sending CW Metric: " + err.Error())
}
}
return nil
}