Skip to content

Commit 308dbb1

Browse files
committed
added new route for safe experiments
1 parent 2422316 commit 308dbb1

File tree

6 files changed

+121
-46
lines changed

6 files changed

+121
-46
lines changed

coderd/apidoc/docs.go

Lines changed: 27 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 23 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/coderd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,7 @@ func New(options *Options) *API {
597597
})
598598
r.Route("/experiments", func(r chi.Router) {
599599
r.Use(apiKeyMiddleware)
600+
r.Get("/available", api.handleExperimentsSafe)
600601
r.Get("/", api.handleExperimentsGet)
601602
})
602603
r.Get("/updatecheck", api.updateCheck)

coderd/experiments.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,28 @@ import (
77
"github.com/coder/coder/v2/codersdk"
88
)
99

10-
// @Summary Get experiments
11-
// @ID get-experiments
10+
// @Summary Get enabled experiments
11+
// @ID get-enabled-experiments
1212
// @Security CoderSessionToken
1313
// @Produce json
1414
// @Tags General
15-
// @Param include_all query bool false "All available experiments"
1615
// @Success 200 {array} codersdk.Experiment
1716
// @Router /experiments [get]
1817
func (api *API) handleExperimentsGet(rw http.ResponseWriter, r *http.Request) {
1918
ctx := r.Context()
20-
all := r.URL.Query().Has("include_all")
21-
22-
if !all {
23-
httpapi.Write(ctx, rw, http.StatusOK, api.Experiments)
24-
return
25-
}
19+
httpapi.Write(ctx, rw, http.StatusOK, api.Experiments)
20+
}
2621

27-
httpapi.Write(ctx, rw, http.StatusOK, codersdk.ExperimentsAll)
22+
// @Summary Get safe experiments
23+
// @ID get-safe-experiments
24+
// @Security CoderSessionToken
25+
// @Produce json
26+
// @Tags General
27+
// @Success 200 {array} codersdk.Experiment
28+
// @Router /experiments/available [get]
29+
func (api *API) handleExperimentsSafe(rw http.ResponseWriter, r *http.Request) {
30+
ctx := r.Context()
31+
httpapi.Write(ctx, rw, http.StatusOK, codersdk.AvailableExperiments{
32+
Safe: codersdk.ExperimentsAll,
33+
})
2834
}

codersdk/deployment.go

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2029,26 +2029,27 @@ func (e Experiments) Enabled(ex Experiment) bool {
20292029
return false
20302030
}
20312031

2032-
type ExperimentOptions struct {
2033-
// All signifies that all experiments - rather than just those that are enabled -
2034-
// should be returned
2035-
IncludeAll bool `json:"include_all,omitempty"`
2032+
func (c *Client) Experiments(ctx context.Context) (Experiments, error) {
2033+
res, err := c.Request(ctx, http.MethodGet, "/api/v2/experiments", nil)
2034+
if err != nil {
2035+
return nil, err
2036+
}
2037+
defer res.Body.Close()
2038+
if res.StatusCode != http.StatusOK {
2039+
return nil, ReadBodyAsError(res)
2040+
}
2041+
var exp []Experiment
2042+
return exp, json.NewDecoder(res.Body).Decode(&exp)
20362043
}
20372044

2038-
// asRequestOption returns a function that can be used in (*Client).Request.
2039-
// It modifies the request query parameters.
2040-
func (o ExperimentOptions) asRequestOption() RequestOption {
2041-
return func(r *http.Request) {
2042-
q := r.URL.Query()
2043-
if o.IncludeAll {
2044-
q.Set("include_all", "true")
2045-
}
2046-
r.URL.RawQuery = q.Encode()
2047-
}
2045+
// AvailableExperiments is an expandable type that returns all safe experiments
2046+
// available to be used with a deployment.
2047+
type AvailableExperiments struct {
2048+
Safe []Experiment `json:"safe"`
20482049
}
20492050

2050-
func (c *Client) Experiments(ctx context.Context, opts ExperimentOptions) (Experiments, error) {
2051-
res, err := c.Request(ctx, http.MethodGet, "/api/v2/experiments", nil, opts.asRequestOption())
2051+
func (c *Client) SafeExperiments(ctx context.Context) (Experiments, error) {
2052+
res, err := c.Request(ctx, http.MethodGet, "/api/v2/experiments/available", nil)
20522053
if err != nil {
20532054
return nil, err
20542055
}

docs/api/general.md

Lines changed: 37 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)