model/model_experiment_room.go (73 lines of code) (raw):
package model
import (
"strings"
"github.com/aliyun/aliyun-pairec-config-go-sdk/v2/common"
)
type ExperimentRoom struct {
ExpRoomId int64 `json:"exp_room_id,omitempty"`
SceneId int64 `json:"scene_id"`
ExpRoomName string `json:"exp_room_name"`
ExpRoomInfo string `json:"exp_room_info"`
DebugUsers string `json:"debug_users,omitempty"`
DebugCrowdId int64 `json:"debug_crowd_id,omitempty"`
BucketCount int32 `json:"bucket_count,omitempty"`
ExpRoomBuckets string `json:"exp_room_buckets,omitempty"`
BucketType uint32 `json:"bucket_type"`
Filter string `json:"filter"`
ExpRoomConfig string `json:"exp_room_config,omitempty"`
Environment int32 `json:"environment"`
//EnvironmentStr string `json:"-"`
Type uint32 `json:"type"`
Status int32 `json:"status,omitempty"`
DebugCrowdIdUsers []string `json:"debug_crowd_id_users"`
debugUserMap map[string]bool `json:"-"`
diversionBucket DiversionBucket
Layers []*Layer `json:"layers"`
}
func (e *ExperimentRoom) Init() error {
// deal ExpRoomBuckets
//e.diversionBucket = NewDiversionBucket(e.Type)
if e.diversionBucket == nil {
if e.BucketType == common.Bucket_Type_UID {
e.diversionBucket = NewUidDiversionBucket(int(e.BucketCount), e.ExpRoomBuckets)
} else if e.BucketType == common.Bucket_Type_UID_HASH {
e.diversionBucket = NewUidHashDiversionBucket(int(e.BucketCount), e.ExpRoomBuckets)
} else if e.BucketType == common.Bucket_Type_Filter {
diversionBucket, err := NewFilterDiversionBucket(e.Filter)
if err != nil {
return err
}
e.diversionBucket = diversionBucket
} else if e.BucketType == common.Bucket_Type_Custom {
e.diversionBucket = NewCustomDiversionBucket()
}
}
// deal DebugUsers
e.debugUserMap = make(map[string]bool, 0)
if e.DebugUsers != "" {
uids := strings.Split(e.DebugUsers, ",")
for _, uid := range uids {
e.debugUserMap[uid] = true
}
}
if len(e.DebugCrowdIdUsers) != 0 {
for _, user := range e.DebugCrowdIdUsers {
e.debugUserMap[user] = true
}
}
return nil
}
func (e *ExperimentRoom) AddLayer(l *Layer) {
e.Layers = append(e.Layers, l)
}
// MatchDebugUsers return true if debug_users is set and debug_users contain of uid
func (e *ExperimentRoom) MatchDebugUsers(experimentContext *ExperimentContext) bool {
if _, found := e.debugUserMap[experimentContext.Uid]; found {
return true
}
return false
}
func (e *ExperimentRoom) Match(experimentContext *ExperimentContext) bool {
if _, found := e.debugUserMap[experimentContext.Uid]; found {
return true
}
if e.diversionBucket != nil {
return e.diversionBucket.Match(experimentContext)
}
return false
}