v3.3.0 b164fe9

metrics_test.go RawHistoryFolder

1package telemetry
2
3import (
4	"context"
5	"errors"
6	"testing"
7
8	"github.com/stretchr/testify/assert"
9	"github.com/stretchr/testify/require"
10	"go.opentelemetry.io/otel"
11	sdkmetric "go.opentelemetry.io/otel/sdk/metric"
12	"go.opentelemetry.io/otel/sdk/metric/metricdata"
13)
14
15func collectManaged(t *testing.T, reader *sdkmetric.ManualReader) (int64, bool) {
16	t.Helper()
17	var rm metricdata.ResourceMetrics
18	require.NoError(t, reader.Collect(context.Background(), &rm))
19	for _, sm := range rm.ScopeMetrics {
20		for _, m := range sm.Metrics {
21			if m.Name != "gordon.container.managed" {
22				continue
23			}
24			gauge, ok := m.Data.(metricdata.Gauge[int64])
25			require.True(t, ok)
26			require.Len(t, gauge.DataPoints, 1)
27			assert.Equal(t, 0, gauge.DataPoints[0].Attributes.Len(), "gauge must stay label-free")
28			return gauge.DataPoints[0].Value, true
29		}
30	}
31	return 0, false
32}
33
34func TestObserveManagedContainers(t *testing.T) {
35	reader := sdkmetric.NewManualReader()
36	prev := otel.GetMeterProvider()
37	otel.SetMeterProvider(sdkmetric.NewMeterProvider(sdkmetric.WithReader(reader)))
38	t.Cleanup(func() { otel.SetMeterProvider(prev) })
39
40	m, err := NewMetrics()
41	require.NoError(t, err)
42
43	current := int64(3)
44	var countErr error
45	require.NoError(t, m.ObserveManagedContainers(func(context.Context) (int64, error) {
46		return current, countErr
47	}))
48
49	v, ok := collectManaged(t, reader)
50	require.True(t, ok)
51	assert.Equal(t, int64(3), v)
52
53	current = 1
54	v, ok = collectManaged(t, reader)
55	require.True(t, ok)
56	assert.Equal(t, int64(1), v)
57
58	// A failed count skips the observation instead of exporting a wrong value.
59	countErr = errors.New("state unavailable")
60	var rm metricdata.ResourceMetrics
61	_ = reader.Collect(context.Background(), &rm)
62	for _, sm := range rm.ScopeMetrics {
63		for _, metric := range sm.Metrics {
64			assert.NotEqual(t, "gordon.container.managed", metric.Name)
65		}
66	}
67}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close