Skip to content

Add monitoring package #1446

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 10 commits into from
Closed
Prev Previous commit
Next Next commit
Rename TelemetryLevel to Telemetry
  • Loading branch information
code-asher committed May 18, 2022
commit 117b94921d95573b3b02d79fef364e8577ca349d
10 changes: 5 additions & 5 deletions cli/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func server() *cobra.Command {
oauth2GithubClientSecret string
oauth2GithubAllowedOrganizations []string
oauth2GithubAllowSignups bool
telemetryLevelRaw string
telemetryRaw string
tlsCertFile string
tlsClientCAFile string
tlsClientAuth string
Expand Down Expand Up @@ -194,9 +194,9 @@ func server() *cobra.Command {
return xerrors.Errorf("parse ssh keygen algorithm %s: %w", sshKeygenAlgorithmRaw, err)
}

telemetryLevel, err := monitoring.ParseTelemetryLevel(telemetryLevelRaw)
telemetry, err := monitoring.ParseTelemetry(telemetryRaw)
if err != nil {
return xerrors.Errorf("parse telemetry level %s: %w", telemetryLevelRaw, err)
return xerrors.Errorf("parse telemetry %s: %w", telemetryRaw, err)
}

turnServer, err := turnconn.New(&turn.RelayAddressGeneratorStatic{
Expand Down Expand Up @@ -260,7 +260,7 @@ func server() *cobra.Command {
Database: options.Database,
Logger: options.Logger,
RefreshInterval: time.Hour,
TelemetryLevel: telemetryLevel,
Telemetry: telemetry,
})

handler, closeCoderd := coderd.New(options)
Expand Down Expand Up @@ -475,7 +475,7 @@ func server() *cobra.Command {
"Specifies organizations the user must be a member of to authenticate with GitHub.")
cliflag.BoolVarP(root.Flags(), &oauth2GithubAllowSignups, "oauth2-github-allow-signups", "", "CODER_OAUTH2_GITHUB_ALLOW_SIGNUPS", false,
"Specifies whether new users can sign up with GitHub.")
cliflag.StringVarP(root.Flags(), &telemetryLevelRaw, "telemetry", "", "CODER_TELEMETRY", "all", "The level of telemetry to send. "+
cliflag.StringVarP(root.Flags(), &telemetryRaw, "telemetry", "", "CODER_TELEMETRY", "all", "The level of telemetry to send. "+
`Accepted values are "all", "core", or "none"`)
cliflag.BoolVarP(root.Flags(), &tlsEnable, "tls-enable", "", "CODER_TLS_ENABLE", false, "Specifies if TLS will be enabled")
cliflag.StringVarP(root.Flags(), &tlsCertFile, "tls-cert-file", "", "CODER_TLS_CERT_FILE", "",
Expand Down
2 changes: 1 addition & 1 deletion coderd/coderdtest/coderdtest.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ func NewMemoryCoderd(t *testing.T, options *Options) (*httptest.Server, *codersd
Database: db,
Logger: slogtest.Make(t, nil),
RefreshInterval: time.Minute,
TelemetryLevel: monitoring.TelemetryLevelNone,
Telemetry: monitoring.TelemetryNone,
}),
SSHKeygenAlgorithm: options.SSHKeygenAlgorithm,
TURNServer: turnServer,
Expand Down
2 changes: 1 addition & 1 deletion coderd/httpmw/prometheus.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func durationToFloatMs(d time.Duration) float64 {

func Prometheus(monitor *monitoring.Monitor) func(http.Handler) http.Handler {
monitor.MustRegister(
monitoring.TelemetryLevelNone,
monitoring.TelemetryNone,
requestsProcessed,
requestsConcurrent,
websocketsConcurrent,
Expand Down
40 changes: 20 additions & 20 deletions coderd/monitoring/monitoring.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,25 @@ import (
"github.com/coder/coder/coderd/database"
)

type TelemetryLevel string
type Telemetry string

const (
TelemetryLevelAll TelemetryLevel = "all"
TelemetryLevelCore TelemetryLevel = "core"
TelemetryLevelNone TelemetryLevel = "none"
TelemetryAll Telemetry = "all"
TelemetryCore Telemetry = "core"
TelemetryNone Telemetry = "none"
)

// ParseTelemetryLevel returns a valid TelemetryLevel or error if input is not a valid.
func ParseTelemetryLevel(t string) (TelemetryLevel, error) {
// ParseTelemetry returns a valid Telemetry or error if input is not a valid.
func ParseTelemetry(t string) (Telemetry, error) {
ok := []string{
string(TelemetryLevelAll),
string(TelemetryLevelCore),
string(TelemetryLevelNone),
string(TelemetryAll),
string(TelemetryCore),
string(TelemetryNone),
}

for _, a := range ok {
if strings.EqualFold(a, t) {
return TelemetryLevel(a), nil
return Telemetry(a), nil
}
}

Expand All @@ -45,7 +45,7 @@ type Options struct {
Database database.Store
Logger slog.Logger
RefreshInterval time.Duration
TelemetryLevel TelemetryLevel
Telemetry Telemetry
}

type Monitor struct {
Expand All @@ -58,14 +58,14 @@ type Monitor struct {
// coreRegistry registers metrics that will be sent when the telemetry level
// is `core` or `all`.
coreRegistry *prometheus.Registry
// internalRegisry registers metrics that will never be sent.
// internalRegistry registers metrics that will never be sent.
internalRegistry *prometheus.Registry
// refreshMutex is used to prevent multiple refreshes at a time.
refreshMutex *sync.Mutex
// stats are internally registered metrics that update via Refresh.
stats Stats
// TelemetryLevel determines which metrics are sent to Coder.
TelemetryLevel TelemetryLevel
// Telemetry determines which metrics are sent to Coder.
Telemetry Telemetry
}

type Stats struct {
Expand Down Expand Up @@ -109,11 +109,11 @@ func New(ctx context.Context, options *Options) *Monitor {
"workspace_resource_type",
}),
},
TelemetryLevel: options.TelemetryLevel,
Telemetry: options.Telemetry,
}

monitor.MustRegister(
TelemetryLevelAll,
TelemetryAll,
monitor.stats.Users,
monitor.stats.Workspaces,
monitor.stats.WorkspaceResources,
Expand All @@ -137,13 +137,13 @@ func New(ctx context.Context, options *Options) *Monitor {
}

// MustRegister registers collectors at the specified level.
func (t Monitor) MustRegister(level TelemetryLevel, cs ...prometheus.Collector) {
func (t Monitor) MustRegister(level Telemetry, cs ...prometheus.Collector) {
switch level {
case TelemetryLevelAll:
case TelemetryAll:
t.allRegistry.MustRegister(cs...)
case TelemetryLevelCore:
case TelemetryCore:
t.coreRegistry.MustRegister(cs...)
case TelemetryLevelNone:
case TelemetryNone:
t.internalRegistry.MustRegister(cs...)
}
}
Expand Down
2 changes: 1 addition & 1 deletion coderd/monitoring/monitoring_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func TestMonitoring(t *testing.T) {
Database: db,
Logger: slogtest.Make(t, nil),
RefreshInterval: time.Minute,
TelemetryLevel: monitoring.TelemetryLevelNone,
Telemetry: monitoring.TelemetryNone,
})

user, _ := db.InsertUser(ctx, database.InsertUserParams{
Expand Down