Documentation
¶
Index ¶
- func IsCacheEnabled(expManager ExperimentManager) bool
- func IsStandardExperimentManager(expManager ExperimentManager) bool
- func ListVariablesForExperiments(expManager ExperimentManager, exps []Experiment) (map[string][]Variable, error)
- type BaseStandardExperimentManager
- func (em *BaseStandardExperimentManager) GetEngineInfo() (Engine, error)
- func (*BaseStandardExperimentManager) IsCacheEnabled() (bool, error)
- func (*BaseStandardExperimentManager) ListClients() ([]Client, error)
- func (*BaseStandardExperimentManager) ListExperiments() ([]Experiment, error)
- func (*BaseStandardExperimentManager) ListExperimentsForClient(Client) ([]Experiment, error)
- func (*BaseStandardExperimentManager) ListVariablesForClient(Client) ([]Variable, error)
- func (*BaseStandardExperimentManager) ListVariablesForExperiments([]Experiment) (map[string][]Variable, error)
- func (em *BaseStandardExperimentManager) ValidateExperimentConfig(cfg json.RawMessage) error
- type Client
- type CustomExperimentManager
- type CustomExperimentManagerConfig
- type Engine
- type Experiment
- type ExperimentManager
- type ExperimentManagerType
- type RemoteUI
- type StandardExperimentManager
- type StandardExperimentManagerConfig
- type TuringExperimentConfig
- type Variable
- type VariableConfig
- type VariableType
- type Variables
- type Variant
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsCacheEnabled ¶
func IsCacheEnabled(expManager ExperimentManager) bool
func IsStandardExperimentManager ¶
func IsStandardExperimentManager(expManager ExperimentManager) bool
func ListVariablesForExperiments ¶
func ListVariablesForExperiments(expManager ExperimentManager, exps []Experiment) (map[string][]Variable, error)
Types ¶
type BaseStandardExperimentManager ¶
type BaseStandardExperimentManager struct {
// contains filtered or unexported fields
}
BaseStandardExperimentManager provides dummy implementations for the optional StandardExperimentManager methods and can be composed into other concrete implementations of the interface to provide the base behavior.
func NewBaseStandardExperimentManager ¶
func NewBaseStandardExperimentManager(info Engine) *BaseStandardExperimentManager
NewBaseStandardExperimentManager is a constructor for the base experiment manager
func (*BaseStandardExperimentManager) GetEngineInfo ¶
func (em *BaseStandardExperimentManager) GetEngineInfo() (Engine, error)
func (*BaseStandardExperimentManager) IsCacheEnabled ¶
func (*BaseStandardExperimentManager) IsCacheEnabled() (bool, error)
func (*BaseStandardExperimentManager) ListClients ¶
func (*BaseStandardExperimentManager) ListClients() ([]Client, error)
func (*BaseStandardExperimentManager) ListExperiments ¶
func (*BaseStandardExperimentManager) ListExperiments() ([]Experiment, error)
func (*BaseStandardExperimentManager) ListExperimentsForClient ¶
func (*BaseStandardExperimentManager) ListExperimentsForClient(Client) ([]Experiment, error)
func (*BaseStandardExperimentManager) ListVariablesForClient ¶
func (*BaseStandardExperimentManager) ListVariablesForClient(Client) ([]Variable, error)
func (*BaseStandardExperimentManager) ListVariablesForExperiments ¶
func (*BaseStandardExperimentManager) ListVariablesForExperiments([]Experiment) (map[string][]Variable, error)
func (*BaseStandardExperimentManager) ValidateExperimentConfig ¶
func (em *BaseStandardExperimentManager) ValidateExperimentConfig(cfg json.RawMessage) error
type Client ¶
type Client struct {
ID string `json:"id" validate:"required"`
Username string `json:"username" validate:"required"`
Passkey string `json:"passkey,omitempty"`
}
Client describes the properties of a client registered on an experiment engine
func ListClients ¶
func ListClients(expManager ExperimentManager) ([]Client, error)
type CustomExperimentManager ¶
type CustomExperimentManager interface {
ExperimentManager
}
type CustomExperimentManagerConfig ¶
type CustomExperimentManagerConfig struct {
// RemoteUI specifies the information for the custom experiment engine UI to be
// consumed by the Turing app, using Module Federation
RemoteUI RemoteUI `json:"remote_ui"`
// ExperimentConfigSchema is the serialised schema as supported by https://github.com/WASD-Team/yup-ast.
// If set, it will be used by the UI to validate experiment engine configuration in the Turing router.
ExperimentConfigSchema string `json:"experiment_config_schema,omitempty"`
}
type Engine ¶
type Engine struct {
// Name is the unique identifier for the experiment engine and will be used as
// the display name in the UI if the optional `DisplayName` field is not set.
Name string `json:"name"`
// DisplayName is the name of the experiment engine that will be used in the UI,
// solely for the purpose of display. The Turing API still relies on the `Name`.
DisplayName string `json:"display_name"`
// Type describes the class of the experiment engine manager
Type ExperimentManagerType `json:"type"`
// StandardExperimentManagerConfig is expected to be set by a "standard" experiment engine manager
// and is used by the generic Turing experiment engine UI.
StandardExperimentManagerConfig *StandardExperimentManagerConfig `json:"standard_experiment_manager_config,omitempty"`
// CustomExperimentManagerConfig is expected to be set by a "custom" experiment engine manager
// and is used to load the custom experiment engine UI.
CustomExperimentManagerConfig *CustomExperimentManagerConfig `json:"custom_experiment_manager_config,omitempty"`
}
Engine describes the properties of an experiment engine
type Experiment ¶
type Experiment struct {
ID string `json:"id" validate:"required"`
Name string `json:"name" validate:"required"`
ClientID string `json:"client_id"`
Variants []Variant `json:"variants"`
}
Experiment describes the properties of an experiment registered on an experiment engine
func ListExperiments ¶
func ListExperiments(expManager ExperimentManager) ([]Experiment, error)
func ListExperimentsForClient ¶
func ListExperimentsForClient(expManager ExperimentManager, client Client) ([]Experiment, error)
type ExperimentManager ¶
type ExperimentManager interface {
// GetEngineInfo returns the configuration of the experiment engine
GetEngineInfo() (Engine, error)
// ValidateExperimentConfig validates the given Turing experiment config for the expected data and format
ValidateExperimentConfig(cfg json.RawMessage) error
// GetExperimentRunnerConfig converts the given config (as retrieved from the DB) into a format suitable
// for the Turing router (i.e., to be passed to the Experiment Runner). This interface method will be
// called at the time of router deployment.
//
// cfg holds the experiment configuration in a format that is suitable for use with the Turing UI and
// this is the data that is saved to the Turing DB.
//
// In case of StandardExperimentManager, cfg is expected to be unmarshalled into TuringExperimentConfig
GetExperimentRunnerConfig(cfg json.RawMessage) (json.RawMessage, error)
}
ExperimentManager describes the minimal set of methods to be implemented by an experiment engine's Manager, providing access to the information required to set up experiments on Turing.
type ExperimentManagerType ¶
type ExperimentManagerType string
var ( StandardExperimentManagerType ExperimentManagerType = "standard" CustomExperimentManagerType ExperimentManagerType = "custom" )
type RemoteUI ¶
type RemoteUI struct {
// Name is the name of the remote app declared in the Module Federation plugin
Name string `json:"name"`
// URL is the Host + Remote Entry file at which the remote UI can be found
URL string `json:"url"`
// Config is an optional URL that will be loaded at run-time, to provide the experiment engine
// configs dynamically
Config string `json:"config,omitempty"`
}
type StandardExperimentManager ¶
type StandardExperimentManager interface {
ExperimentManager
// IsCacheEnabled returns whether the experiment engine wants to cache its responses in the Turing API cache
IsCacheEnabled() (bool, error)
// ListClients returns a list of the clients registered on the experiment engine
ListClients() ([]Client, error)
// ListExperiments returns a list of the experiments registered on the experiment engine
ListExperiments() ([]Experiment, error)
// ListExperimentsForClient returns a list of the experiments registered on the experiment engine,
// for the given client
ListExperimentsForClient(Client) ([]Experiment, error)
// ListVariablesForClient returns a list of the variables registered on the given client
ListVariablesForClient(Client) ([]Variable, error)
// ListVariablesForExperiments returns a list of the variables registered on the given experiments
ListVariablesForExperiments([]Experiment) (map[string][]Variable, error)
}
type StandardExperimentManagerConfig ¶
type StandardExperimentManagerConfig struct {
// ClientSelectionEnabled is set to true if the experiment engine has the concept of
// clients, that can be used to authenticate the experiment run requests.
ClientSelectionEnabled bool `json:"client_selection_enabled"`
// ExperimentSelectionEnabled is set to true if the experiment engine allows selecting
// individual experiments configured elsewhere
ExperimentSelectionEnabled bool `json:"experiment_selection_enabled"`
// HomePageURL is an optional string which, if set, will be used by the UI to redirect
// to the experiment engine's home page, to view more details on the experiment
// configured in Turing.
HomePageURL string `json:"home_page_url"`
}
type TuringExperimentConfig ¶
type TuringExperimentConfig struct {
Client Client `json:"client" validate:"dive"`
Experiments []Experiment `json:"experiments" validate:"dive"`
Variables Variables `json:"variables" validate:"dive"`
}
TuringExperimentConfig is the saved experiment config on Turing, when using the generic UI, that captures the key pieces of info about the experiment engine
func ParseStandardExperimentConfig ¶
func ParseStandardExperimentConfig(raw json.RawMessage) (stdExpCfg TuringExperimentConfig, err error)
type Variable ¶
type Variable struct {
Name string `json:"name" validate:"required"`
Required bool `json:"required"`
Type VariableType `json:"type" validate:"required"`
}
Variable describes the properties of a variable registered on a client / experiment
func ListVariablesForClient ¶
func ListVariablesForClient(expManager ExperimentManager, client Client) ([]Variable, error)
type VariableConfig ¶
type VariableConfig struct {
Name string `json:"name" validate:"required"`
Required bool `json:"required"`
Field string `json:"field" validate:"required_with=Required"`
FieldSource request.FieldSource `json:"field_source" validate:"field-src"`
}
VariableConfig describes the request parsing configuration for a variable
type VariableType ¶
type VariableType string
VariableType is used to describe experiment variables
const ( // UnsupportedVariableType variable type is used when the experiment engine does not classify // the variable (None) or the type is not known or relevant to the API UnsupportedVariableType VariableType = "unsupported" // UnitVariableType variable type is used for variables that as experiment units (typically, // their hash is used to randomly assign variants / parameter values) UnitVariableType VariableType = "unit" // FilterVariableType variable type is used for variables that act as filters (i.e., if the // incoming value for the variable in a request does nt fit certain criteria, the experiment is // considered to be not applicable) FilterVariableType VariableType = "filter" )
type Variables ¶
type Variables struct {
// ClientVariables represents the list of variables configured on the experiment engine's
// client, if applicable
ClientVariables []Variable `json:"client_variables" validate:"dive"`
// ExperimentVariables is a map of experiment_id -> []Variable, representing the
// variables configured on each experiment on the experiment engine
ExperimentVariables map[string][]Variable `json:"experiment_variables" validate:"dive,dive"`
// Config represents the request parsing configuration for all the Turing experiment variables
Config []VariableConfig `json:"config" validate:"dive"`
}
Variables represents the configuration of all experiment variables