blob: 1315813d25b1a8d0ef978412bba75b7f9c42b443 [file] [log] [blame]
// Copyright 2020 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 cmdconfig contains functions for configuring commands.
package cmdconfig
import (
"context"
"os"
"time"
"cloud.google.com/go/errorreporting"
"golang.org/x/pkgsite/internal"
"golang.org/x/pkgsite/internal/config"
"golang.org/x/pkgsite/internal/log"
"golang.org/x/pkgsite/internal/middleware"
)
// Logger configures a middleware.Logger.
func Logger(ctx context.Context, cfg *config.Config, logName string) middleware.Logger {
if cfg.OnGCP() {
logger, err := log.UseStackdriver(ctx, cfg, logName)
if err != nil {
log.Fatal(ctx, err)
}
return logger
}
return middleware.LocalLogger{}
}
// ReportingClient configures an Error Reporting client.
func ReportingClient(ctx context.Context, cfg *config.Config) *errorreporting.Client {
if !cfg.OnGCP() {
return nil
}
reporter, err := errorreporting.NewClient(ctx, cfg.ProjectID, errorreporting.Config{
ServiceName: cfg.ServiceID,
OnError: func(err error) {
log.Errorf(ctx, "Error reporting failed: %v", err)
},
})
if err != nil {
log.Fatal(ctx, err)
}
return reporter
}
// Experimenter configures a middleware.Experimenter.
func Experimenter(ctx context.Context, cfg *config.Config, getter middleware.ExperimentGetter, reportingClient *errorreporting.Client) *middleware.Experimenter {
if os.Getenv("GO_DISCOVERY_EXPERIMENTS_FROM_CONFIG") == "true" {
// Ignore getter, use dynamic config.
log.Infof(ctx, "using dynamic config for experiments")
getter = func(ctx context.Context) ([]*internal.Experiment, error) {
var exps []*internal.Experiment
dc, err := cfg.ReadDynamic(ctx)
if err != nil {
return nil, err
}
for _, cexp := range dc.Experiments {
exps = append(exps, &internal.Experiment{
Name: cexp.Name,
Description: cexp.Description,
Rollout: cexp.Rollout,
})
}
return exps, nil
}
}
e, err := middleware.NewExperimenter(ctx, 1*time.Minute, getter, reportingClient)
if err != nil {
log.Fatal(ctx, err)
}
return e
}