func()

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
}