Skip to content

Commit

Permalink
tiltfile: add an api for adjusting the metrics reporting period (#3746)
Browse files Browse the repository at this point in the history
  • Loading branch information
nicks committed Sep 3, 2020
1 parent 65794cd commit f00b759
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
12 changes: 10 additions & 2 deletions internal/tiltfile/metrics/metrics.go
Expand Up @@ -4,6 +4,7 @@ import (
"go.starlark.net/starlark"

"github.com/tilt-dev/tilt/internal/tiltfile/starkit"
"github.com/tilt-dev/tilt/internal/tiltfile/value"
"github.com/tilt-dev/tilt/pkg/model"
)

Expand All @@ -15,7 +16,8 @@ func NewExtension() Extension {

func (e Extension) NewState() interface{} {
return model.MetricsSettings{
Address: "opentelemetry.tilt.dev:443",
Address: "opentelemetry.tilt.dev:443",
ReportingPeriod: model.DefaultReportingPeriod,
}
}

Expand All @@ -25,13 +27,19 @@ func (Extension) OnStart(env *starkit.Environment) error {

func setMetricsSettings(thread *starlark.Thread, fn *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
err := starkit.SetState(thread, func(settings model.MetricsSettings) (model.MetricsSettings, error) {
var reportingPeriod value.Duration
err := starkit.UnpackArgs(thread, fn.Name(), args, kwargs,
"enabled?", &settings.Enabled,
"address?", &settings.Address,
"insecure?", &settings.Insecure)
"insecure?", &settings.Insecure,
"reporting_period?", &reportingPeriod)
if err != nil {
return model.MetricsSettings{}, err
}

if !reportingPeriod.IsZero() {
settings.ReportingPeriod = reportingPeriod.AsDuration()
}
return settings, nil
})

Expand Down
5 changes: 5 additions & 0 deletions internal/tiltfile/metrics/metrics_test.go
Expand Up @@ -2,10 +2,12 @@ package metrics

import (
"testing"
"time"

"github.com/stretchr/testify/assert"

"github.com/tilt-dev/tilt/internal/tiltfile/starkit"
"github.com/tilt-dev/tilt/pkg/model"
)

func TestMetricsEnabled(t *testing.T) {
Expand All @@ -18,6 +20,7 @@ func TestMetricsEnabled(t *testing.T) {
assert.True(t, MustState(result).Enabled)
assert.Equal(t, "opentelemetry.tilt.dev:443", MustState(result).Address)
assert.False(t, MustState(result).Insecure)
assert.Equal(t, model.DefaultReportingPeriod, MustState(result).ReportingPeriod)
}

func TestMetricsAddress(t *testing.T) {
Expand All @@ -28,12 +31,14 @@ func TestMetricsAddress(t *testing.T) {
experimental_metrics_settings(enabled=True)
experimental_metrics_settings(address='localhost:5678')
experimental_metrics_settings(insecure=True)
experimental_metrics_settings(reporting_period='1s')
`)
result, err := f.ExecFile("Tiltfile")
assert.NoError(t, err)
assert.True(t, MustState(result).Enabled)
assert.Equal(t, "localhost:5678", MustState(result).Address)
assert.True(t, MustState(result).Insecure)
assert.Equal(t, time.Second, MustState(result).ReportingPeriod)
}

func newFixture(tb testing.TB) *starkit.Fixture {
Expand Down
8 changes: 8 additions & 0 deletions pkg/model/metrics.go
@@ -1,9 +1,17 @@
package model

import "time"

var DefaultReportingPeriod = 5 * time.Minute

// Metrics settings generally map to exporter options
// https://pkg.go.dev/contrib.go.opencensus.io/exporter/ocagent?tab=doc#ExporterOption
type MetricsSettings struct {
Enabled bool
Address string
Insecure bool

// How often Tilt reports its metrics. Useful for testing.
// https://pkg.go.dev/go.opencensus.io/stats/view?tab=doc#SetReportingPeriod
ReportingPeriod time.Duration
}

0 comments on commit f00b759

Please sign in to comment.