Documentation ¶
Overview ¶
Example ¶
package main import ( "context" "fmt" "time" "github.com/stripe/goforit" ) func main() { ctx := context.Background() // flags.csv contains comma-separated flag names and sample rates. // See: testdata/flags2_example.json backend := goforit.BackendFromJSONFile2("testdata/flags2_example.json") flags := goforit.New(30*time.Second, backend, goforit.WithOwnedStats(true)) defer func() { _ = flags.Close() }() if flags.Enabled(ctx, "go.sun.mercury", nil) { fmt.Println("The go.sun.mercury feature is enabled for 100% of requests") } // Same thing. if flags.Enabled(nil, "go.sun.mercury", nil) { fmt.Println("The go.sun.mercury feature is enabled for 100% of requests") } if flags.Enabled(ctx, "go.stars.money", nil) { fmt.Println("The go.stars.money feature is enabled for 50% of requests") } }
Output:
Index ¶
- Constants
- func Override(ctx context.Context, name string, value bool) context.Context
- type Backend
- type Goforit
- type MetricsClient
- type Option
- func DeletedCallback(cb evaluationCallback) Option
- func EvaluationCallback(cb evaluationCallback) Option
- func Logger(printf func(msg string, args ...interface{})) Option
- func Statsd(stats MetricsClient) Option
- func WithContextOverrideDisabled(disabled bool) Option
- func WithOwnedStats(isOwned bool) Option
Examples ¶
Constants ¶
const DefaultInterval = 30 * time.Second
const DefaultStatsdAddr = "127.0.0.1:8200"
DefaultStatsdAddr is the address we will emit metrics to if not overridden.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Backend ¶
type Backend interface { // Refresh returns a new set of flags. // It also returns the age of these flags, or an empty time if no age is known. Refresh() ([]*flags2.Flag2, time.Time, error) }
func BackendFromJSONFile2 ¶
BackendFromJSONFile2 creates a v2 backend powered by a JSON file
type Goforit ¶
type Goforit interface { Enabled(ctx context.Context, name string, props map[string]string) (enabled bool) RefreshFlags(backend Backend) TryRefreshFlags(backend Backend) error SetStalenessThreshold(threshold time.Duration) AddDefaultTags(tags map[string]string) ReportCounts(callback func(name string, total, enabled uint64, isDeleted bool)) Close() error }
Goforit is the main interface for the library to check if flags enabled, refresh flags customizing behavior or mocking.
type MetricsClient ¶
type MetricsClient interface { Histogram(string, float64, []string, float64) error TimeInMilliseconds(name string, milli float64, tags []string, rate float64) error Gauge(string, float64, []string, float64) error Count(string, int64, []string, float64) error io.Closer }
MetricsClient is the set of methods required to emit metrics to statsd, for customizing behavior or mocking.
type Option ¶
type Option interface {
// contains filtered or unexported methods
}
func DeletedCallback ¶
func DeletedCallback(cb evaluationCallback) Option
DeletedCallback registers a callback to execute for each flag that is scheduled for deletion
func EvaluationCallback ¶
func EvaluationCallback(cb evaluationCallback) Option
EvaluationCallback registers a callback to execute for each evaluated flag
func Logger ¶
Logger uses the supplied function to log errors. By default, errors are written to os.Stderr.
func Statsd ¶
func Statsd(stats MetricsClient) Option
Statsd uses the supplied client to emit metrics to. By default, a client is created and configured to emit metrics to DefaultStatsdAddr.
func WithOwnedStats ¶
WithOwnedStats instructs the returned Goforit instance to call Close() on its stats client when Goforit is closed.