experiments/client_scene_params.go (45 lines of code) (raw):

package experiments import ( "fmt" "time" "github.com/aliyun/aliyun-pairec-config-go-sdk/v2/api" "github.com/aliyun/aliyun-pairec-config-go-sdk/v2/model" "github.com/antihax/optional" ) // LoadSceneParamsData specifies a function to load param data from A/B Test Server func (e *ExperimentClient) LoadSceneParamsData() { sceneParamData := make(map[string]model.SceneParams, 0) listScenesResponse, err := e.APIClient.SceneApi.ListAllScenes() if err != nil { e.logError(fmt.Errorf("list scenes error, err=%v", err)) return } for _, scene := range listScenesResponse.Scenes { sceneParams := model.NewSceneParams() listParamsResponse, err := e.APIClient.ParamApi.GetParam(scene.SceneId, &api.ParamApiGetParamOpts{Environment: optional.NewString(e.Environment)}) if err != nil { e.logError(fmt.Errorf("list params error, err=%v", err)) continue } for _, param := range listParamsResponse.Params { sceneParams.AddParam(param.ParamName, param.ParamValue) } sceneParamData[scene.SceneName] = sceneParams } if len(sceneParamData) > 0 { e.sceneParamData = sceneParamData } } // loopLoadExperimentData async loop invoke LoadExperimentData function func (e *ExperimentClient) loopLoadSceneParamsData() { for { time.Sleep(time.Minute) e.LoadSceneParamsData() } } func (e *ExperimentClient) GetSceneParams(sceneName string) model.SceneParams { sceneParams, ok := e.sceneParamData[sceneName] if !ok { return model.NewEmptySceneParams() } return sceneParams }