| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Package internal contains data used through x/pkgsite. |
| package internal |
| |
| import ( |
| "context" |
| ) |
| |
| const ( |
| ExperimentAutocomplete = "autocomplete" |
| ExperimentFrontendFetch = "frontend-fetch" |
| ExperimentMasterVersion = "master-version" |
| ExperimentSidenav = "sidenav" |
| ExperimentUnitPage = "unit-page" |
| ExperimentUseUnits = "use-units" |
| ExperimentUsePathInfo = "use-path-info" |
| ) |
| |
| // Experiments represents all of the active experiments in the codebase and |
| // a description of each experiment. |
| var Experiments = map[string]string{ |
| ExperimentAutocomplete: "Enable autocomplete with search.", |
| ExperimentFrontendFetch: "Enable ability to fetch a package that doesn't exist on pkg.go.dev.", |
| ExperimentMasterVersion: "Enable viewing path@master.", |
| ExperimentSidenav: "Display documentation index on the left sidenav.", |
| ExperimentUnitPage: "Enable the redesigned details page.", |
| ExperimentUseUnits: "Read from paths, documentation, readmes, and package_imports tables.", |
| ExperimentUsePathInfo: "Check the paths table if a path exists, as opposed to the packages or modules table.", |
| } |
| |
| // Experiment holds data associated with an experimental feature for frontend |
| // or worker. |
| type Experiment struct { |
| // Name is the name of the feature. |
| Name string |
| |
| // Rollout is the percentage of requests enrolled in the experiment. |
| Rollout uint |
| |
| // Description provides a description of the experiment. |
| Description string |
| } |
| |
| // ExperimentSource is the interface used by the middleware to interact with |
| // experiments data. |
| type ExperimentSource interface { |
| // GetExperiments fetches active experiments from the |
| // ExperimentSource. |
| GetExperiments(ctx context.Context) ([]*Experiment, error) |
| } |
| |
| // LocalExperimentSource is used when developing locally using the direct proxy |
| // mode. |
| type LocalExperimentSource struct { |
| experiments []*Experiment |
| } |
| |
| // NewLocalExperimentSource returns a LocalExperimentSource with the provided experiments. |
| func NewLocalExperimentSource(experiments []*Experiment) *LocalExperimentSource { |
| return &LocalExperimentSource{experiments: experiments} |
| } |
| |
| // GetExperiments returns the experiments for the given LocalExperimentSource. |
| func (e *LocalExperimentSource) GetExperiments(ctx context.Context) ([]*Experiment, error) { |
| return e.experiments, nil |
| } |