bucketing

package
v2.15.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 15, 2024 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	OperatorAnd = "and"
	OperatorOr  = "or"
)
View Source
const (
	VariableEvaluatedEvent    = "variableEvaluated"
	VariableDefaultedEvent    = "variableDefaulted"
	AggVariableEvaluatedEvent = "aggVariableEvaluated"
	AggVariableDefaultedEvent = "aggVariableDefaulted"
)
View Source
const (
	TypeAll           = "all"
	TypeUser          = "user"
	TypeOptIn         = "optIn"
	TypeAudienceMatch = "audienceMatch"
)
View Source
const (
	SubTypeUserID          = "user_id"
	SubTypeEmail           = "email"
	SubTypeIP              = "ip"
	SubTypeCountry         = "country"
	SubTypePlatform        = "platform"
	SubTypePlatformVersion = "platformVersion"
	SubTypeAppVersion      = "appVersion"
	SubTypeDeviceModel     = "deviceModel"
	SubTypeCustomData      = "customData"
)
View Source
const (
	ComparatorEqual        = "="
	ComparatorNotEqual     = "!="
	ComparatorGreater      = ">"
	ComparatorGreaterEqual = ">="
	ComparatorLess         = "<"
	ComparatorLessEqual    = "<="
	ComparatorExist        = "exist"
	ComparatorNotExist     = "!exist"
	ComparatorContain      = "contain"
	ComparatorNotContain   = "!contain"
)
View Source
const (
	DataKeyTypeString  = "String"
	DataKeyTypeBoolean = "Boolean"
	DataKeyTypeNumber  = "Number"
)
View Source
const (
	VariableTypesString = "String"
	VariableTypesNumber = "Number"
	VariableTypesJSON   = "JSON"
	VariableTypesBool   = "Boolean"
)

Variables

View Source
var ErrConfigMissing = errors.New("No config available")
View Source
var ErrFailedToDecideVariation = errors.New("Failed to decide target variation")
View Source
var ErrInvalidVariableType = errors.New("Invalid variable type")
View Source
var ErrMissingFeature = errors.New("Config missing feature for variable")
View Source
var ErrMissingVariable = errors.New("Config missing variable")
View Source
var ErrMissingVariableForVariation = errors.New("Config missing variable for variation")
View Source
var ErrMissingVariation = errors.New("Config missing variation")
View Source
var ErrQueueFull = fmt.Errorf("Max queue size reached")
View Source
var ErrUserDoesNotQualifyForTargets = errors.New("User does not qualify for any targets for feature")
View Source
var ErrUserRollout = errors.New("User does not qualify for feature rollout")

Functions

func BucketResultErrorToDefaultReason added in v2.12.0

func BucketResultErrorToDefaultReason(err error) (defaultReason string)

func GenerateBucketedConfig

func GenerateBucketedConfig(sdkKey string, user api.PopulatedUser, clientCustomData map[string]interface{}) (*api.BucketedUserConfig, error)

func GetClientCustomData

func GetClientCustomData(sdkKey string) map[string]interface{}

func GetEtag added in v2.12.0

func GetEtag(sdkKey string) string

func GetLastModified added in v2.14.0

func GetLastModified(sdkKey string) string

func GetRawConfig added in v2.12.0

func GetRawConfig(sdkKey string) []byte

func GetRayId added in v2.13.0

func GetRayId(sdkKey string) string

func HasConfig added in v2.12.0

func HasConfig(sdkKey string) bool

func SetClientCustomData

func SetClientCustomData(sdkKey string, data map[string]interface{})

func SetConfig

func SetConfig(rawJSON []byte, sdkKey, etag, rayId, lastModified string, eventQueue ...*EventQueue) error

func VariableForUser

func VariableForUser(sdkKey string, user api.PopulatedUser, variableKey string, expectedVariableType string, eventQueue *EventQueue, clientCustomData map[string]interface{}) (variableType string, variableValue any, err error)

Types

type AggregateEventQueue

type AggregateEventQueue map[string]VariableAggMap

func (*AggregateEventQueue) BuildBatchRecords

func (agg *AggregateEventQueue) BuildBatchRecords(platformData *api.PlatformData, clientUUID, configEtag, rayId, lastModified string) api.UserEventsBatchRecord

type AllFilter added in v2.10.4

type AllFilter struct {
	PassFilter
}

type Audience

type Audience struct {
	NoIdAudience
	Id string `json:"_id"`
}

type AudienceMatchFilter

type AudienceMatchFilter struct {
	Audiences []string `json:"_audiences"`
	// contains filtered or unexported fields
}

func (*AudienceMatchFilter) Evaluate added in v2.10.4

func (filter *AudienceMatchFilter) Evaluate(audiences map[string]NoIdAudience, user api.PopulatedUser, clientCustomData map[string]interface{}) bool

func (AudienceMatchFilter) GetComparator

func (f AudienceMatchFilter) GetComparator() string

func (AudienceMatchFilter) GetSubType

func (f AudienceMatchFilter) GetSubType() string

func (AudienceMatchFilter) GetType

func (f AudienceMatchFilter) GetType() string

func (AudienceMatchFilter) Type

func (f AudienceMatchFilter) Type() string

type AudienceOperator

type AudienceOperator struct {
	Operator string       `json:"operator"`
	Filters  MixedFilters `json:"filters"`
}

func (AudienceOperator) Evaluate added in v2.10.4

func (operator AudienceOperator) Evaluate(audiences map[string]NoIdAudience, user api.PopulatedUser, clientCustomData map[string]interface{}) bool

func (AudienceOperator) GetFilters

func (o AudienceOperator) GetFilters() []FilterOrOperator

func (AudienceOperator) GetOperator

func (o AudienceOperator) GetOperator() string

type ConfigFeature

type ConfigFeature struct {
	Id            string                 `json:"_id"`
	Type          string                 `json:"type" validate:"regexp=^(release|experiment|permission|ops)$"`
	Key           string                 `json:"key"`
	Variations    []*Variation           `json:"variations"`
	Configuration FeatureConfiguration   `json:"configuration"`
	Settings      map[string]interface{} `json:"settings"`
}

type CustomDataFilter

type CustomDataFilter struct {
	*UserFilter
	DataKey     string `json:"dataKey"`
	DataKeyType string `json:"dataKeyType" validate:"regexp=^(String|Boolean|Number)$"`
}

func (*CustomDataFilter) Evaluate added in v2.10.4

func (filter *CustomDataFilter) Evaluate(audiences map[string]NoIdAudience, user api.PopulatedUser, clientCustomData map[string]interface{}) bool

func (CustomDataFilter) GetComparator

func (f CustomDataFilter) GetComparator() string

func (CustomDataFilter) GetSubType

func (f CustomDataFilter) GetSubType() string

func (CustomDataFilter) GetType

func (f CustomDataFilter) GetType() string

func (CustomDataFilter) SubType

func (f CustomDataFilter) SubType() string

func (CustomDataFilter) Type

func (f CustomDataFilter) Type() string

type EventQueue

type EventQueue struct {
	// contains filtered or unexported fields
}

func NewEventQueue

func NewEventQueue(sdkKey string, options *api.EventQueueOptions, platformData *api.PlatformData) (*EventQueue, error)

func (*EventQueue) Close

func (eq *EventQueue) Close() (err error)

func (*EventQueue) FlushEventQueue

func (eq *EventQueue) FlushEventQueue(clientUUID, configEtag, rayId, lastModified string) (map[string]api.FlushPayload, error)

func (*EventQueue) HandleFlushResults

func (eq *EventQueue) HandleFlushResults(successPayloads []string, failurePayloads []string, failureWithRetryPayloads []string)

func (*EventQueue) MergeAggEventQueueKeys

func (eq *EventQueue) MergeAggEventQueueKeys(config *configBody)

func (*EventQueue) Metrics

func (eq *EventQueue) Metrics() (int32, int32, int32)

func (*EventQueue) QueueEvent

func (eq *EventQueue) QueueEvent(user api.User, event api.Event) error

func (*EventQueue) QueueVariableDefaultedEvent added in v2.12.0

func (eq *EventQueue) QueueVariableDefaultedEvent(variableKey, defaultReason string) error

func (*EventQueue) QueueVariableEvaluatedEvent

func (eq *EventQueue) QueueVariableEvaluatedEvent(variableKey, featureId, variationId string) error

func (*EventQueue) UserQueueLength

func (eq *EventQueue) UserQueueLength() int

type FeatureAggMap

type FeatureAggMap map[string]VariationAggMap

type FeatureConfiguration

type FeatureConfiguration struct {
	Id               string                 `json:"_id"`
	Prerequisites    []FeaturePrerequisites `json:"prerequisites"`
	WinningVariation api.FeatureVariation   `json:"winningVariation"`
	ForcedUsers      map[string]string      `json:"forcedUsers"`
	Targets          []*Target              `json:"targets"`
}

type FeaturePrerequisites

type FeaturePrerequisites struct {
	Feature    string `json:"_feature"`
	Comparator string `json:"comparator" validate:"regexp=^(=|!=)$"`
}

type FilterOrOperator added in v2.10.4

type FilterOrOperator interface {
	Evaluate(audiences map[string]NoIdAudience, user api.PopulatedUser, clientCustomData map[string]interface{}) bool
}

A FilterOrOperator represents either an individual filter or a nested sequence of filters with a logical operator.

type InitializedFilter

type InitializedFilter interface {
	Initialize() error
}

For compiling values inside a filter after parsing, or other optimizations

type MixedFilters

type MixedFilters []FilterOrOperator

MixedFilters is used to parse a list of generic filters from JSON that can be one of several types, and transform them into specific implementations (e.g. UserFilter).

func (*MixedFilters) UnmarshalJSON

func (m *MixedFilters) UnmarshalJSON(data []byte) error

type NativeBucketingConfiguration

type NativeBucketingConfiguration struct {
	FlushEventsInterval          time.Duration `json:"flushEventsMS"`
	DisableAutomaticEventLogging bool          `json:"disableAutomaticEventLogging"`
	DisableCustomEventLogging    bool          `json:"disableCustomEventLogging"`
}

type NoIdAudience

type NoIdAudience struct {
	Filters *AudienceOperator `json:"filters"`
}

type NoPassFilter added in v2.10.4

type NoPassFilter struct{}

func (NoPassFilter) Evaluate added in v2.10.4

func (filter NoPassFilter) Evaluate(audiences map[string]NoIdAudience, user api.PopulatedUser, clientCustomData map[string]interface{}) bool

type OptInFilter added in v2.10.4

type OptInFilter struct {
	NoPassFilter
}

OptInFilter never passes, because it's only supported by Cloud Bucketing.

type OptionsType

type OptionsType struct {
	Lexicographical bool
	ZeroExtend      bool
}

type PassFilter added in v2.10.4

type PassFilter struct{}

func (PassFilter) Evaluate added in v2.10.4

func (filter PassFilter) Evaluate(audiences map[string]NoIdAudience, user api.PopulatedUser, clientCustomData map[string]interface{}) bool

type Rollout

type Rollout struct {
	Type            string         `json:"type" validate:"regexp=^(schedule|gradual|stepped)$"`
	StartPercentage float64        `json:"startPercentage"`
	StartDate       time.Time      `json:"startDate"`
	Stages          []RolloutStage `json:"stages"`
}

type RolloutStage

type RolloutStage struct {
	Type       string    `json:"type"`
	Date       time.Time `json:"date"`
	Percentage float64   `json:"percentage" validate:"regexp=^(linear|discrete)$"`
}

type Target

type Target struct {
	Id           string               `json:"_id"`
	Audience     *Audience            `json:"_audience"`
	Rollout      *Rollout             `json:"rollout"`
	Distribution []TargetDistribution `json:"distribution"`
}

func (*Target) DecideTargetVariation

func (t *Target) DecideTargetVariation(boundedHash float64) (string, error)

type TargetDistribution

type TargetDistribution struct {
	Variation  string  `json:"_variation"`
	Percentage float64 `json:"percentage"`
}

type UserEventQueue

type UserEventQueue map[string]api.UserEventsBatchRecord

func (*UserEventQueue) BuildBatchRecords

func (u *UserEventQueue) BuildBatchRecords() []api.UserEventsBatchRecord

type UserFilter

type UserFilter struct {
	Values []interface{} `json:"values"`

	CompiledStringVals []string
	CompiledBoolVals   []bool
	CompiledNumVals    []float64
	// contains filtered or unexported fields
}

func (*UserFilter) Evaluate added in v2.10.4

func (filter *UserFilter) Evaluate(audiences map[string]NoIdAudience, user api.PopulatedUser, clientCustomData map[string]interface{}) bool

func (UserFilter) GetComparator

func (f UserFilter) GetComparator() string

func (UserFilter) GetSubType

func (f UserFilter) GetSubType() string

func (UserFilter) GetType

func (f UserFilter) GetType() string

func (*UserFilter) Initialize

func (f *UserFilter) Initialize() error

func (UserFilter) Type

func (f UserFilter) Type() string

type Variable

type Variable struct {
	Id   string `json:"_id" validate:"required"`
	Type string `json:"type" validate:"oneof=String Boolean Number JSON"`
	Key  string `json:"key" validate:"required"`
}

type VariableAggMap

type VariableAggMap map[string]FeatureAggMap

type Variation

type Variation struct {
	Id        string              `json:"_id"`
	Name      string              `json:"name"`
	Key       string              `json:"key"`
	Variables []VariationVariable `json:"variables"`
}

func (*Variation) GetVariableById

func (v *Variation) GetVariableById(id string) *VariationVariable

type VariationAggMap

type VariationAggMap map[string]int64

type VariationVariable

type VariationVariable struct {
	Var   string      `json:"_var"`
	Value interface{} `json:"value"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL