@@ -32,7 +32,7 @@ type TelemetryBuilder struct {
3232 meter metric.Meter
3333 {{- range $name, $metric := .Telemetry.Metrics }}
3434 {{ $name.Render }} metric.{{ $metric.Data.Instrument }}
35- {{- if $metric.Data.Async }}
35+ {{- if and ( $metric.Data.Async) (not $metric.Optional) }}
3636 observe{{ $name.Render }} func() {{ $metric.Data.BasicType }}
3737 {{- end }}
3838 {{- end }}
@@ -60,6 +60,28 @@ func WithAttributeSet(set attribute.Set) telemetryBuilderOption {
6060{{- end }}
6161
6262{{- range $name, $metric := .Telemetry.Metrics }}
63+ {{- if $metric.Optional }}
64+ // Init{{ $name.Render }} configures the {{ $name.Render }} metric.
65+ func (builder *TelemetryBuilder) Init{{ $name.Render }}({{ if $metric.Data.Async -}}cb func() {{ $metric.Data.BasicType }}{{- end }}) error {
66+ var err error
67+ builder.{{ $name.Render }}, err = builder.meter.{{ $metric.Data.Instrument }}(
68+ "{{ $name }}",
69+ metric.WithDescription("{{ $metric.Description }}"),
70+ metric.WithUnit("{{ $metric.Unit }}"),
71+ {{- if eq $metric.Data.Type "Histogram" -}}
72+ {{ if $metric.Data.Boundaries -}}metric.WithExplicitBucketBoundaries([]float64{ {{- range $metric.Data.Boundaries }} {{.}}, {{- end }} }...),{{- end }}
73+ {{- end }}
74+ {{ if $metric.Data.Async -}}
75+ metric.With{{ casesTitle $metric.Data.BasicType }}Callback(func(_ context.Context, o metric.{{ casesTitle $metric.Data.BasicType }}Observer) error {
76+ o.Observe(cb(), metric.WithAttributeSet(builder.attributeSet))
77+ return nil
78+ }),
79+ {{- end }}
80+ )
81+ return err
82+ }
83+
84+ {{- else }}
6385 {{ if $metric.Data.Async -}}
6486// With{{ $name.Render }}Callback sets callback for observable {{ $name.Render }} metric.
6587func With{{ $name.Render }}Callback(cb func() {{ $metric.Data.BasicType }}) telemetryBuilderOption {
@@ -68,6 +90,7 @@ func With{{ $name.Render }}Callback(cb func() {{ $metric.Data.BasicType }}) tele
6890 }
6991}
7092 {{- end }}
93+ {{- end }}
7194{{- end }}
7295
7396
@@ -86,6 +109,7 @@ func NewTelemetryBuilder(settings component.TelemetrySettings, options ...teleme
86109 }
87110
88111 {{- range $name, $metric := .Telemetry.Metrics }}
112+ {{- if not $metric.Optional }}
89113 builder.{{ $name.Render }}, err = builder.meter.{{ $metric.Data.Instrument }}(
90114 "{{ $name }}",
91115 metric.WithDescription("{{ $metric.Description }}"),
@@ -102,6 +126,7 @@ func NewTelemetryBuilder(settings component.TelemetrySettings, options ...teleme
102126 )
103127 errs = errors.Join(errs, err)
104128 {{- end }}
129+ {{- end }}
105130 return &builder, errs
106131}
107132
0 commit comments