func()

in api/api_traffic_ctrl.go [46:296]


func (fca *TrafficControlApiService) ListTrafficControlTasks(localVarOptionals *TrafficControlApiListTrafficControlTasksOpts) (ListTrafficControlTasksResponse, error) {
	listTrafficControlRequest := pairecservice.CreateListTrafficControlTasksRequest()
	listTrafficControlRequest.InstanceId = fca.instanceId
	listTrafficControlRequest.SetDomain(fca.client.GetDomain())

	if localVarOptionals.Env.Value() == common.Environment_Daily_Desc {
		listTrafficControlRequest.Environment = "Daily"
	} else if localVarOptionals.Env.Value() == common.Environment_Prepub_Desc {
		listTrafficControlRequest.Environment = "Pre"
	} else if localVarOptionals.Env.Value() == common.Environment_Product_Desc {
		listTrafficControlRequest.Environment = "Prod"
	}

	if localVarOptionals.Status.Value() == common.TrafficCtrlTask_NotRunning_Status {
		listTrafficControlRequest.Status = "NotRunning"
	} else if localVarOptionals.Status.Value() == common.TrafficCtrlTask_Ready_Status {
		listTrafficControlRequest.Status = "Ready"
	} else if localVarOptionals.Status.Value() == common.TrafficCtrlTask_Running_Status {
		listTrafficControlRequest.Status = "Running"
	} else if localVarOptionals.Status.Value() == common.TrafficCtrlTask_Finished_Status {
		listTrafficControlRequest.Status = "Finished"
	}

	if localVarOptionals.Version.Value() == common.Version_Latest {
		listTrafficControlRequest.Version = "Latest"
	} else if localVarOptionals.Version.Value() == common.Version_Released {
		listTrafficControlRequest.Version = "Released"
	}

	if localVarOptionals.ControlTargetFilter.Value() == common.ControlTargetFilter_All {
		listTrafficControlRequest.ControlTargetFilter = "All"
	} else if localVarOptionals.ControlTargetFilter.Value() == common.ControlTargetFilter_Vaild {
		listTrafficControlRequest.ControlTargetFilter = "Valid"
	} else if localVarOptionals.ControlTargetFilter.Value() == common.ControlTargetFilter_None {
		listTrafficControlRequest.ControlTargetFilter = "None"
	}

	listTrafficControlRequest.All = requests.NewBoolean(localVarOptionals.ALL.Value())

	var (
		localVarReturnValue     ListTrafficControlTasksResponse
		trafficControlTaskArray []model.TrafficControlTask
	)
	response, err := fca.client.ListTrafficControlTasks(listTrafficControlRequest)

	if err != nil || response == nil {
		return localVarReturnValue, err
	}

	if len(response.TrafficControlTasks) == 0 {
		return localVarReturnValue, err
	}

	for _, trafficControlTask := range response.TrafficControlTasks {
		var task model.TrafficControlTask
		// List of storage traffic control tasks
		task.TrafficControlTaskId = trafficControlTask.TrafficControlTaskId
		task.Name = trafficControlTask.Name
		task.Description = trafficControlTask.Description
		task.SceneId = trafficControlTask.SceneId
		task.SceneName = trafficControlTask.SceneName
		task.ProductStatus = trafficControlTask.ProductStatus
		task.PrepubStatus = trafficControlTask.PrepubStatus

		task.ExecutionTime = trafficControlTask.ExecutionTime
		task.StartTime = trafficControlTask.StartTime
		task.EndTime = trafficControlTask.EndTime
		task.BehaviorTableMetaId = trafficControlTask.BehaviorTableMetaId
		task.UserTableMetaId = trafficControlTask.UserTableMetaId
		task.ItemTableMetaId = trafficControlTask.ItemTableMetaId
		task.UserConditionType = trafficControlTask.UserConditionType
		task.UserConditionArray = trafficControlTask.UserConditionArray
		task.UserConditionExpress = trafficControlTask.UserConditionExpress
		task.StatisBehaviorConditionType = trafficControlTask.StatisBehaviorConditionType
		task.StatisBehaviorConditionArray = trafficControlTask.StatisBehaviorConditionArray
		task.StatisBahaviorConditionExpress = trafficControlTask.StatisBahaviorConditionExpress
		task.ControlType = trafficControlTask.ControlType
		task.ControlGranularity = trafficControlTask.ControlGranularity
		task.ControlLogic = trafficControlTask.ControlLogic
		task.ItemConditionType = trafficControlTask.ItemConditionType
		task.ItemConditionArray = trafficControlTask.ItemConditionArray
		task.ItemConditionExpress = trafficControlTask.ItemConditionExpress

		task.GmtCreateTime = trafficControlTask.GmtCreateTime
		task.GmtModifiedTime = trafficControlTask.GmtModifiedTime

		var trafficControlTargets []model.TrafficControlTarget
		trafficControlTargetsMap := make(map[string]model.TrafficControlTarget)

		// List of storage traffic control targets

		behaviorTableMetaRequest := pairecservice.CreateGetTableMetaRequest()
		behaviorTableMetaRequest.TableMetaId = trafficControlTask.BehaviorTableMetaId
		behaviorTableMetaRequest.InstanceId = fca.instanceId
		behaviorTableMetaRequest.SetDomain(fca.client.GetDomain())

		behaviorTableMeta, err := fca.client.GetTableMeta(behaviorTableMetaRequest)

		if err != nil {
			return localVarReturnValue, nil
		}

		task.BehaviorTableMeta = &pairecservice.TableMetasItem{
			Name:            behaviorTableMeta.Name,
			ResourceId:      behaviorTableMeta.ResourceId,
			TableName:       behaviorTableMeta.TableName,
			Type:            behaviorTableMeta.Type,
			Description:     behaviorTableMeta.Description,
			Module:          behaviorTableMeta.Module,
			Url:             behaviorTableMeta.Url,
			GmtCreateTime:   behaviorTableMeta.GmtCreateTime,
			GmtModifiedTime: behaviorTableMeta.GmtModifiedTime,
			GmtImportedTime: behaviorTableMeta.GmtImportedTime,
			Config:          behaviorTableMeta.Config,
			Fields:          behaviorTableMeta.Fields,
		}

		userTableMetaRequest := pairecservice.CreateGetTableMetaRequest()
		userTableMetaRequest.TableMetaId = trafficControlTask.UserTableMetaId
		userTableMetaRequest.InstanceId = fca.instanceId
		userTableMetaRequest.SetDomain(fca.client.GetDomain())

		userTableMeta, err := fca.client.GetTableMeta(userTableMetaRequest)

		if err != nil {
			return localVarReturnValue, err
		}

		task.UserTableMeta = &pairecservice.TableMetasItem{
			Name:            userTableMeta.Name,
			ResourceId:      userTableMeta.ResourceId,
			TableName:       userTableMeta.TableName,
			Type:            userTableMeta.Type,
			Description:     userTableMeta.Description,
			Module:          userTableMeta.Module,
			Url:             userTableMeta.Url,
			GmtCreateTime:   userTableMeta.GmtCreateTime,
			GmtModifiedTime: userTableMeta.GmtModifiedTime,
			GmtImportedTime: userTableMeta.GmtImportedTime,
			Config:          userTableMeta.Config,
			Fields:          userTableMeta.Fields,
		}

		itemTableMetaRequest := pairecservice.CreateGetTableMetaRequest()
		itemTableMetaRequest.TableMetaId = trafficControlTask.ItemTableMetaId
		itemTableMetaRequest.InstanceId = fca.instanceId
		itemTableMetaRequest.SetDomain(fca.client.GetDomain())

		itemTableMeta, err := fca.client.GetTableMeta(itemTableMetaRequest)

		if err != nil {
			return localVarReturnValue, err
		}

		task.ItemTableMeta = &pairecservice.TableMetasItem{
			Name:            itemTableMeta.Name,
			ResourceId:      itemTableMeta.ResourceId,
			TableName:       itemTableMeta.TableName,
			Type:            itemTableMeta.Type,
			Description:     itemTableMeta.Description,
			Module:          itemTableMeta.Module,
			Url:             itemTableMeta.Url,
			GmtCreateTime:   itemTableMeta.GmtCreateTime,
			GmtModifiedTime: itemTableMeta.GmtModifiedTime,
			GmtImportedTime: itemTableMeta.GmtImportedTime,
			Config:          itemTableMeta.Config,
			Fields:          itemTableMeta.Fields,
		}

		for _, target := range trafficControlTask.TrafficControlTargets {
			var t model.TrafficControlTarget
			t.TrafficControlTaskId = trafficControlTask.TrafficControlTaskId
			t.TrafficControlTargetId = target.TrafficControlTargetId
			t.Name = target.Name
			t.StartTime = target.StartTime
			t.EndTime = target.EndTime
			t.ItemConditionType = target.ItemConditionType
			t.ItemConditionArray = target.ItemConditionArray
			t.ItemConditionExpress = target.ItemConditionExpress
			t.Event = target.Event
			t.Value = target.Value
			t.StatisPeriod = target.StatisPeriod
			t.ToleranceValue = target.ToleranceValue
			t.NewProductRegulation = target.NewProductRegulation
			t.RecallName = target.RecallName
			t.Status = target.Status
			t.SplitParts = target.SplitParts
			t.GmtCreateTime = target.GmtCreateTime
			t.GmtModifiedTime = target.GmtModifiedTime
			trafficControlTargetsMap[target.TrafficControlTargetId] = t

			//Obtain traffic details about a traffic control task
			trafficControlTaskTrafficRequest := pairecservice.CreateGetTrafficControlTaskTrafficRequest()
			trafficControlTaskTrafficRequest.TrafficControlTaskId = task.TrafficControlTaskId
			trafficControlTaskTrafficRequest.InstanceId = fca.instanceId
			trafficControlTaskTrafficRequest.Environment = listTrafficControlRequest.Environment
			trafficControlTaskTrafficRequest.SetDomain(fca.client.GetDomain())
			tResponse, err := fca.client.common.client.GetTrafficControlTaskTraffic(trafficControlTaskTrafficRequest)

			if err != nil {
				return localVarReturnValue, err
			}

			traffic := tResponse.TrafficControlTaskTrafficInfo

			for _, targetTraffic := range traffic.TargetTraffics {

				if len(tResponse.TrafficControlTaskTrafficInfo.TaskTraffics) == 0 || len(tResponse.TrafficControlTaskTrafficInfo.TargetTraffics) == 0 {
					continue
				}
				taskTraffics := make(map[string]float64)
				targetTraffics := make(map[string]float64)

				tempTarget, ok := trafficControlTargetsMap[targetTraffic.TrafficContorlTargetId]
				if !ok {
					continue
				}

				for targetId, trafficDetails := range traffic.TaskTraffics {
					taskTraffic := make(map[string]float64, 0)
					trafficDet, _ := json.Marshal(trafficDetails)
					_ = json.Unmarshal(trafficDet, &taskTraffic)
					taskTraffics[targetId] = taskTraffic["Traffic"]

				}
				tempTarget.TaskTraffics = taskTraffics
				//targetTraffic.Data 由 array -> map
				var recordTime int64
				for targetId, targetTrafficDetails := range targetTraffic.Data {
					targetTrafficNew := make(map[string]float64, 0)
					targetTrafficDet, _ := json.Marshal(targetTrafficDetails)
					_ = json.Unmarshal(targetTrafficDet, &targetTrafficNew)
					targetTraffics[targetId] = targetTrafficNew["Traffic"]
					recordTime = int64(targetTrafficNew["RecordTime"])
				}
				tempTarget.TargetTraffics = targetTraffics
				tempTarget.RecordTime = time.Unix(recordTime, 0)
				trafficControlTargetsMap[tempTarget.TrafficControlTargetId] = tempTarget
			}
		}

		for _, target := range trafficControlTargetsMap {
			trafficControlTargets = append(trafficControlTargets, target)
		}
		task.TrafficControlTargets = trafficControlTargets
		trafficControlTaskArray = append(trafficControlTaskArray, task)
	}

	localVarReturnValue.TrafficControlTasks = trafficControlTaskArray
	return localVarReturnValue, nil
}