api/api_traffic_ctrl.go (261 lines of code) (raw):

package api import ( "context" "encoding/json" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" "github.com/aliyun/alibaba-cloud-sdk-go/services/pairecservice" "github.com/aliyun/aliyun-pairec-config-go-sdk/v2/common" "github.com/aliyun/aliyun-pairec-config-go-sdk/v2/model" "github.com/antihax/optional" jsoniter "github.com/json-iterator/go" "time" ) // Linger please var ( _ context.Context ) type TrafficControlApiService service /* FlowCtrlApiService 获取流控计划列表 * @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). * @param optional nil or *FlowCtrlApiListFlowCtrlPlansOpts - Optional Parameters: * @param "SceneId" (optional.Int32) - * @param "Status" (optional.String) - @return ListFlowCtrlPlansResponse */ type TrafficControlApiListTrafficControlTasksOpts struct { Name optional.String TrafficControlTaskId optional.String SceneId optional.Int32 Env optional.String Status optional.String Version optional.String ControlTargetFilter optional.String SortBy optional.String Order optional.String PageNumber optional.Int32 PageSize optional.Int32 ALL optional.Bool } 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 } type TaskTraffic struct { PlanTraffic float64 `json:"plan_traffic"` } type TargetTraffic struct { TargetTraffic float64 `json:"target_traffic"` RecordTime int64 `json:"record_time"` } func (tct *TrafficControlApiService) SetTrafficControlTrafficFData(t model.TrafficControlTaskTrafficData) (string, error) { t.InstanceId = tct.instanceId req := pairecservice.CreateUpdateTrafficControlTaskTrafficRequest() body, _ := jsoniter.MarshalToString(t) req.TrafficControlTaskId = t.TrafficControlTaskId req.Body = body req.SetDomain(tct.client.GetDomain()) response, err := tct.client.UpdateTrafficControlTaskTraffic(req) if err != nil { return "", err } return response.RequestId, nil }