in client_metric_agg.go [143:224]
func (c *Client) castEtlToMetricAggRules(etl *ETL) (*MetricAggRules, error) {
aggRules := new(MetricAggRules)
aggRules.ID = etl.Name
aggRules.Name = etl.DisplayName
aggRules.Desc = etl.Description
aggRules.SrcAccessKeyID = etl.Configuration.AccessKeyId
aggRules.SrcAccessKeySecret = etl.Configuration.AccessKeySecret
aggRules.SrcStore = etl.Configuration.Logstore
scheduledSqlJson := etl.Configuration.Parameters["config.ml.scheduled_sql"]
aggRuleJson := make(map[string][]map[string]interface{})
err := json.Unmarshal([]byte(scheduledSqlJson), &aggRuleJson)
if err != nil {
return nil, err
}
aggRuleMaps := aggRuleJson["agg_rules"]
var aggRuleItems []MetricAggRuleItem
for _, aggRuleMap := range aggRuleMaps {
aggRuleItem := new(MetricAggRuleItem)
aggRuleItem.Name, err = castInterfaceToString(aggRuleMap, "rule_name")
if err != nil {
return nil, err
}
advancedQuery, err := castInterfaceToMap(aggRuleMap, "advanced_query")
if err != nil {
return nil, err
}
aggRuleItem.QueryType, err = castInterfaceToString(advancedQuery, "type")
if err != nil {
return nil, err
}
aggRuleItem.Query, err = castInterfaceToString(advancedQuery, "query")
if err != nil {
return nil, err
}
aggRuleItem.TimeName, err = castInterfaceToString(advancedQuery, "time_name")
if err != nil {
return nil, err
}
aggRuleItem.MetricNames, err = castInterfaceArrayToStringArray(advancedQuery, "metric_names")
if err != nil {
return nil, err
}
aggRuleItem.LabelNames, err = castInterfaceMapToStringMap(advancedQuery, "labels")
if err != nil {
return nil, err
}
scheduleControl, err := castInterfaceToMap(aggRuleMap, "schedule_control")
if err != nil {
return nil, err
}
aggRuleItem.BeginUnixTime, err = castInterfaceToInt(scheduleControl, "from_unixtime")
if err != nil {
return nil, err
}
aggRuleItem.EndUnixTime, err = castInterfaceToInt(scheduleControl, "to_unixtime")
if err != nil {
return nil, err
}
aggRuleItem.Interval, err = castInterfaceToInt(scheduleControl, "granularity")
if err != nil {
return nil, err
}
aggRuleItem.DelaySeconds, err = castInterfaceToInt(scheduleControl, "delay")
if err != nil {
return nil, err
}
aggRuleItems = append(aggRuleItems, *aggRuleItem)
}
aggRules.AggRules = aggRuleItems
for _, sink := range etl.Configuration.ETLSinks {
aggRules.DestEndpoint = sink.Endpoint
aggRules.DestAccessKeyID = sink.AccessKeyId
aggRules.DestAccessKeySecret = sink.AccessKeySecret
aggRules.DestProject = sink.Project
aggRules.DestStore = sink.Logstore
}
return aggRules, nil
}