Documentation ¶
Overview ¶
Package statsig implements feature gating and a/b testing
Index ¶
- Constants
- Variables
- func CheckGate(user User, gate string) bool
- func CheckGateWithExposureLoggingDisabled(user User, gate string) bool
- func Initialize(sdkKey string)
- func InitializeGlobalOutputLogger(options OutputLoggerOptions)
- func InitializeWithOptions(sdkKey string, options *Options)
- func IsInitialized() bool
- func LogEvent(event Event)
- func LogImmediate(events []Event) (*http.Response, error)
- func ManuallyLogConfigExposure(user User, config string)
- func ManuallyLogExperimentExposure(user User, experiment string)
- func ManuallyLogGateExposure(user User, config string)
- func ManuallyLogLayerParameterExposure(user User, layer string, parameter string)
- func OverrideConfig(config string, val map[string]interface{})
- func OverrideGate(gate string, val bool)
- func OverrideLayer(layer string, val map[string]interface{})
- func Shutdown()
- func ShutdownAndDangerouslyClearInstance()
- type Client
- func (c *Client) CheckGate(user User, gate string) bool
- func (c *Client) CheckGateWithExposureLoggingDisabled(user User, gate string) bool
- func (c *Client) GetClientInitializeResponse(user User) ClientInitializeResponse
- func (c *Client) GetConfig(user User, config string) DynamicConfig
- func (c *Client) GetConfigWithExposureLoggingDisabled(user User, config string) DynamicConfig
- func (c *Client) GetExperiment(user User, experiment string) DynamicConfig
- func (c *Client) GetExperimentWithExposureLoggingDisabled(user User, experiment string) DynamicConfig
- func (c *Client) GetLayer(user User, layer string) Layer
- func (c *Client) GetLayerWithExposureLoggingDisabled(user User, layer string) Layer
- func (c *Client) LogEvent(event Event)
- func (c *Client) LogImmediate(events []Event) (*http.Response, error)
- func (c *Client) ManuallyLogConfigExposure(user User, config string)
- func (c *Client) ManuallyLogExperimentExposure(user User, experiment string)
- func (c *Client) ManuallyLogGateExposure(user User, gate string)
- func (c *Client) ManuallyLogLayerParameterExposure(user User, layer string, parameter string)
- func (c *Client) OverrideConfig(config string, val map[string]interface{})
- func (c *Client) OverrideGate(gate string, val bool)
- func (c *Client) OverrideLayer(layer string, val map[string]interface{})
- func (c *Client) Shutdown()
- type ClientInitializeResponse
- type ConfigInitializeResponse
- type DiagnosticsAction
- type DiagnosticsContext
- type DiagnosticsKey
- type DiagnosticsStep
- type DynamicConfig
- func GetConfig(user User, config string) DynamicConfig
- func GetConfigWithExposureLoggingDisabled(user User, config string) DynamicConfig
- func GetExperiment(user User, experiment string) DynamicConfig
- func GetExperimentWithExposureLoggingDisabled(user User, experiment string) DynamicConfig
- func NewConfig(name string, value map[string]interface{}, ruleID string) *DynamicConfig
- func (d *DynamicConfig) GetBool(key string, fallback bool) bool
- func (d *DynamicConfig) GetMap(key string, fallback map[string]interface{}) map[string]interface{}
- func (d *DynamicConfig) GetNumber(key string, fallback float64) float64
- func (d *DynamicConfig) GetSlice(key string, fallback []interface{}) []interface{}
- func (d *DynamicConfig) GetString(key string, fallback string) string
- type Environment
- type Event
- type GateInitializeResponse
- type GlobalState
- type IDataAdapter
- type Layer
- func (d *Layer) GetBool(key string, fallback bool) bool
- func (d *Layer) GetMap(key string, fallback map[string]interface{}) map[string]interface{}
- func (d *Layer) GetNumber(key string, fallback float64) float64
- func (d *Layer) GetSlice(key string, fallback []interface{}) []interface{}
- func (d *Layer) GetString(key string, fallback string) string
- type LayerInitializeResponse
- type Options
- type OutputLogger
- type OutputLoggerOptions
- type StatsigLoggerOptions
- type StatsigProcess
- type User
Constants ¶
const ( InvalidSDKKeyError string = "Must provide a valid SDK key." EmptyUserError string = "" /* 127-byte string literal not displayed */ EventBatchSizeError string = "The max number of events supported in one batch is 500. Please reduce the slice size and try again." )
const CONFIG_SPECS_KEY = "statsig.cache"
const DefaultEndpoint = "https://statsigapi.net/v1"
Variables ¶
var ErrorBoundaryAPI = "https://statsigapi.net/v1"
var ErrorBoundaryEndpoint = "/sdk_exception"
Functions ¶
func CheckGateWithExposureLoggingDisabled ¶ added in v1.8.0
Checks the value of a Feature Gate for the given user without logging an exposure event
func Initialize ¶
func Initialize(sdkKey string)
Initializes the global Statsig instance with the given sdkKey
func InitializeGlobalOutputLogger ¶ added in v1.10.0
func InitializeGlobalOutputLogger(options OutputLoggerOptions)
func InitializeWithOptions ¶
Initializes the global Statsig instance with the given sdkKey and options
func IsInitialized ¶ added in v1.9.0
func IsInitialized() bool
IsInitialized returns whether the global Statsig instance has already been initialized or not
func LogImmediate ¶ added in v1.2.0
Logs a slice of events to Statsig server immediately
func ManuallyLogConfigExposure ¶ added in v1.8.0
Logs an exposure event for the dynamic config
func ManuallyLogExperimentExposure ¶ added in v1.8.0
Logs an exposure event for the experiment
func ManuallyLogGateExposure ¶ added in v1.8.0
Logs an exposure event for the gate
func ManuallyLogLayerParameterExposure ¶ added in v1.8.0
Logs an exposure event for the parameter in the given layer
func OverrideConfig ¶ added in v1.3.0
Override the DynamicConfig value for the given user
func OverrideGate ¶ added in v1.3.0
Override the value of a Feature Gate for the given user
func OverrideLayer ¶ added in v1.9.0
Override the Layer value for the given user
func Shutdown ¶
func Shutdown()
Cleans up Statsig, persisting any Event Logs and cleanup processes Using any method is undefined after Shutdown() has been called
func ShutdownAndDangerouslyClearInstance ¶ added in v1.11.0
func ShutdownAndDangerouslyClearInstance()
For test only so we can clear the shared instance. Not thread safe.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
An instance of a StatsigClient for interfacing with Statsig Feature Gates, Dynamic Configs, Experiments, and Event Logging
func NewClientWithOptions ¶ added in v1.0.0
Initializes a Statsig Client with the given sdkKey and options
func (*Client) CheckGateWithExposureLoggingDisabled ¶ added in v1.8.0
Checks the value of a Feature Gate for the given user without logging an exposure event
func (*Client) GetClientInitializeResponse ¶ added in v1.8.1
func (c *Client) GetClientInitializeResponse(user User) ClientInitializeResponse
func (*Client) GetConfig ¶
func (c *Client) GetConfig(user User, config string) DynamicConfig
Gets the DynamicConfig value for the given user
func (*Client) GetConfigWithExposureLoggingDisabled ¶ added in v1.8.0
func (c *Client) GetConfigWithExposureLoggingDisabled(user User, config string) DynamicConfig
Gets the DynamicConfig value for the given user without logging an exposure event
func (*Client) GetExperiment ¶
func (c *Client) GetExperiment(user User, experiment string) DynamicConfig
Gets the DynamicConfig value of an Experiment for the given user
func (*Client) GetExperimentWithExposureLoggingDisabled ¶ added in v1.8.0
func (c *Client) GetExperimentWithExposureLoggingDisabled(user User, experiment string) DynamicConfig
Gets the DynamicConfig value of an Experiment for the given user without logging an exposure event
func (*Client) GetLayerWithExposureLoggingDisabled ¶ added in v1.8.0
Gets the Layer object for the given user without logging an exposure event
func (*Client) LogImmediate ¶ added in v1.2.0
func (*Client) ManuallyLogConfigExposure ¶ added in v1.8.0
Logs an exposure event for the config
func (*Client) ManuallyLogExperimentExposure ¶ added in v1.8.0
Logs an exposure event for the experiment
func (*Client) ManuallyLogGateExposure ¶ added in v1.8.0
Logs an exposure event for the dynamic config
func (*Client) ManuallyLogLayerParameterExposure ¶ added in v1.8.0
Logs an exposure event for the parameter in the given layer
func (*Client) OverrideConfig ¶ added in v1.3.0
Override the DynamicConfig value for the given user
func (*Client) OverrideGate ¶ added in v1.3.0
Override the value of a Feature Gate for the given user
func (*Client) OverrideLayer ¶ added in v1.9.0
Override the Layer value for the given user
type ClientInitializeResponse ¶ added in v1.8.1
type ClientInitializeResponse struct { FeatureGates map[string]GateInitializeResponse `json:"feature_gates"` DynamicConfigs map[string]ConfigInitializeResponse `json:"dynamic_configs"` LayerConfigs map[string]LayerInitializeResponse `json:"layer_configs"` SdkParams map[string]string `json:"sdkParams"` HasUpdates bool `json:"has_updates"` Generator string `json:"generator"` EvaluatedKeys map[string]interface{} `json:"evaluated_keys"` Time int64 `json:"time"` }
func GetClientInitializeResponse ¶ added in v1.8.1
func GetClientInitializeResponse(user User) ClientInitializeResponse
type ConfigInitializeResponse ¶ added in v1.8.1
type ConfigInitializeResponse struct { Value map[string]interface{} `json:"value"` Group string `json:"group"` IsDeviceBased bool `json:"is_device_based"` IsExperimentActive *bool `json:"is_experiment_active,omitempty"` IsUserInExperiment *bool `json:"is_user_in_experiment,omitempty"` IsInLayer *bool `json:"is_in_layer,omitempty"` ExplicitParameters *[]string `json:"explicit_parameters,omitempty"` // contains filtered or unexported fields }
type DiagnosticsAction ¶ added in v1.11.0
type DiagnosticsAction string
const ( StartAction DiagnosticsAction = "start" EndAction DiagnosticsAction = "end" )
type DiagnosticsContext ¶ added in v1.11.0
type DiagnosticsContext string
const ( InitializeContext DiagnosticsContext = "initialize" ConfigSyncContext DiagnosticsContext = "config_sync" )
type DiagnosticsKey ¶ added in v1.11.0
type DiagnosticsKey string
const ( DownloadConfigSpecsKey DiagnosticsKey = "download_config_specs" BootstrapKey DiagnosticsKey = "bootstrap" GetIDListSourcesKey DiagnosticsKey = "get_id_list_sources" GetIDListKey DiagnosticsKey = "get_id_list" OverallKey DiagnosticsKey = "overall" DataStoreConfigSpecsKey DiagnosticsKey = "data_store_config_specs" )
type DiagnosticsStep ¶ added in v1.11.0
type DiagnosticsStep string
const ( NetworkRequestStep DiagnosticsStep = "network_request" FetchStep DiagnosticsStep = "fetch" ProcessStep DiagnosticsStep = "process" )
type DynamicConfig ¶ added in v1.0.0
type DynamicConfig struct {
// contains filtered or unexported fields
}
A json blob configured in the Statsig Console
func GetConfig ¶
func GetConfig(user User, config string) DynamicConfig
Gets the DynamicConfig value for the given user
func GetConfigWithExposureLoggingDisabled ¶ added in v1.8.0
func GetConfigWithExposureLoggingDisabled(user User, config string) DynamicConfig
Gets the DynamicConfig value for the given user without logging an exposure event
func GetExperiment ¶
func GetExperiment(user User, experiment string) DynamicConfig
Gets the DynamicConfig value of an Experiment for the given user
func GetExperimentWithExposureLoggingDisabled ¶ added in v1.8.0
func GetExperimentWithExposureLoggingDisabled(user User, experiment string) DynamicConfig
Gets the DynamicConfig value of an Experiment for the given user without logging an exposure event
func NewConfig ¶ added in v1.0.0
func NewConfig(name string, value map[string]interface{}, ruleID string) *DynamicConfig
func (*DynamicConfig) GetBool ¶ added in v1.0.0
Gets the boolean value at the given key in the DynamicConfig Returns the fallback boolean if the item at the given key is not found or not of type boolean
func (*DynamicConfig) GetNumber ¶ added in v1.0.0
Gets the float64 value at the given key in the DynamicConfig Returns the fallback float64 if the item at the given key is not found or not of type float64
type Environment ¶ added in v1.0.0
type Event ¶ added in v1.0.0
type Event struct { EventName string `json:"eventName"` User User `json:"user"` Value string `json:"value"` Metadata map[string]string `json:"metadata"` Time int64 `json:"time"` }
an event to be sent to Statsig for logging and analysis
type GateInitializeResponse ¶ added in v1.8.1
type GateInitializeResponse struct { Value bool `json:"value"` // contains filtered or unexported fields }
type GlobalState ¶ added in v1.10.0
type GlobalState struct {
// contains filtered or unexported fields
}
Using global state variables directly will lead to race conditions Instead, define an accessor below using the Mutex lock
func (*GlobalState) Logger ¶ added in v1.10.0
func (g *GlobalState) Logger() *OutputLogger
type IDataAdapter ¶ added in v1.8.0
type IDataAdapter interface {
// contains filtered or unexported methods
}
*
- An adapter for implementing custom storage of config specs.
- Can be used to bootstrap Statsig (priority over bootstrapValues if both provided)
- Also useful for backing up cached data
type Layer ¶ added in v1.4.0
type Layer struct {
// contains filtered or unexported fields
}
func GetLayerWithExposureLoggingDisabled ¶ added in v1.8.0
Gets the Layer object for the given user without logging an exposure event
func (*Layer) GetBool ¶ added in v1.4.0
Gets the boolean value at the given key in the DynamicConfig Returns the fallback boolean if the item at the given key is not found or not of type boolean
func (*Layer) GetNumber ¶ added in v1.4.0
Gets the float64 value at the given key in the DynamicConfig Returns the fallback float64 if the item at the given key is not found or not of type float64
type LayerInitializeResponse ¶ added in v1.8.1
type LayerInitializeResponse struct { Value map[string]interface{} `json:"value"` Group string `json:"group"` IsDeviceBased bool `json:"is_device_based"` IsExperimentActive *bool `json:"is_experiment_active,omitempty"` IsUserInExperiment *bool `json:"is_user_in_experiment,omitempty"` ExplicitParameters *[]string `json:"explicit_parameters,omitempty"` AllocatedExperimentName string `json:"allocated_experiment_name,omitempty"` UndelegatedSecondaryExposures []map[string]string `json:"undelegated_secondary_exposures"` // contains filtered or unexported fields }
type Options ¶ added in v1.0.0
type Options struct { API string `json:"api"` Environment Environment `json:"environment"` LocalMode bool `json:"localMode"` ConfigSyncInterval time.Duration IDListSyncInterval time.Duration LoggingInterval time.Duration LoggingMaxBufferSize int BootstrapValues string RulesUpdatedCallback func(rules string, time int64) InitTimeout time.Duration DataAdapter IDataAdapter OutputLoggerOptions OutputLoggerOptions StatsigLoggerOptions StatsigLoggerOptions }
Advanced options for configuring the Statsig SDK
type OutputLogger ¶ added in v1.10.0
type OutputLogger struct {
// contains filtered or unexported fields
}
func (*OutputLogger) Log ¶ added in v1.10.0
func (o *OutputLogger) Log(msg string, err error)
func (*OutputLogger) LogError ¶ added in v1.10.0
func (o *OutputLogger) LogError(err interface{})
func (*OutputLogger) LogStep ¶ added in v1.10.0
func (o *OutputLogger) LogStep(process StatsigProcess, msg string)
type OutputLoggerOptions ¶ added in v1.10.0
type StatsigLoggerOptions ¶ added in v1.11.0
type StatsigProcess ¶ added in v1.10.0
type StatsigProcess string
const ( StatsigProcessInitialize StatsigProcess = "Initialize" StatsigProcessSync StatsigProcess = "Sync" )
type User ¶ added in v1.0.0
type User struct { UserID string `json:"userID"` Email string `json:"email"` IpAddress string `json:"ip"` UserAgent string `json:"userAgent"` Country string `json:"country"` Locale string `json:"locale"` AppVersion string `json:"appVersion"` Custom map[string]interface{} `json:"custom"` PrivateAttributes map[string]interface{} `json:"privateAttributes"` StatsigEnvironment map[string]string `json:"statsigEnvironment"` CustomIDs map[string]string `json:"customIDs"` }
User specific attributes for evaluating Feature Gates, Experiments, and DynamicConfigs
NOTE: UserID is **required** - see https://docs.statsig.com/messages/serverRequiredUserID\ PrivateAttributes are only used for user targeting/grouping in feature gates, dynamic configs, experiments and etc; they are omitted in logs.