/
gouges_sys.go
40 lines (32 loc) · 1009 Bytes
/
gouges_sys.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package system
import (
"context"
"runtime"
"go.opentelemetry.io/otel/metric"
)
func NewSysGauge(meter metric.Meter) (BasicGauges, error) {
ggThreads, err := meter.Int64ObservableGauge("go_threads", metric.WithDescription("Number of OS threads created."))
if err != nil {
return nil, err
}
ggCgo, err := meter.Int64ObservableGauge("go_cgo", metric.WithDescription("umber of CGO."))
if err != nil {
return nil, err
}
ggGRoutines, err := meter.Int64ObservableGauge("go_goroutines", metric.WithDescription("Number of goroutines."))
if err != nil {
return nil, err
}
return &sysGauges{
ggThreads, ggCgo, ggGRoutines,
}, nil
}
func (s *sysGauges) Collect(meter metric.Meter) {
cb := func(ctx context.Context, observer metric.Observer) error {
observer.ObserveInt64(s.ggThreads, int64(runtime.NumCPU()))
observer.ObserveInt64(s.ggCgo, int64(runtime.NumCgoCall()))
observer.ObserveInt64(s.ggGRoutines, int64(runtime.NumGoroutine()))
return nil
}
meter.RegisterCallback(cb)
}