Skip to content

Commit 8f29d03

Browse files
authored
Merge pull request #14 from joaopenteado/otelcfg-resourcegen
Enhance resource creation by adding support for custom attributes
2 parents 1c3a5d5 + 6ebcc71 commit 8f29d03

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

otelcfg/resources.go

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,32 @@ package otelcfg
22

33
import (
44
"github.com/joaopenteado/runcfg"
5+
"go.opentelemetry.io/otel/attribute"
56
"go.opentelemetry.io/otel/sdk/resource"
67
semconv "go.opentelemetry.io/otel/semconv/v1.30.0"
78
)
89

10+
type resourceConfig struct {
11+
attrs []attribute.KeyValue
12+
}
13+
14+
type ResourceOption = option[resourceConfig]
15+
16+
// WithAttributes sets additional attributes for the resource.
17+
func WithAttributes(attrs ...attribute.KeyValue) ResourceOption {
18+
return optionFunc[resourceConfig](func(cfg *resourceConfig) {
19+
cfg.attrs = append(cfg.attrs, attrs...)
20+
})
21+
}
22+
923
// NewServiceResource creates a new OpenTelemetry resource for a Cloud Run service.
10-
func NewServiceResource(metadata *runcfg.Metadata, service *runcfg.Service) *resource.Resource {
11-
return resource.NewWithAttributes(
12-
semconv.SchemaURL,
24+
func NewServiceResource(metadata *runcfg.Metadata, service *runcfg.Service, opts ...ResourceOption) *resource.Resource {
25+
cfg := &resourceConfig{}
26+
for _, opt := range opts {
27+
opt.apply(cfg)
28+
}
1329

30+
attrs := append(cfg.attrs,
1431
// https://github.com/open-telemetry/opentelemetry-go-contrib/blob/f368d047b7c605a7805094537a6922db36eabcdc/detectors/gcp/detector.go#L35
1532
semconv.CloudProviderGCP,
1633
semconv.CloudAccountID(metadata.ProjectID),
@@ -20,13 +37,21 @@ func NewServiceResource(metadata *runcfg.Metadata, service *runcfg.Service) *res
2037
semconv.FaaSInstance(metadata.InstanceID),
2138
semconv.CloudRegion(metadata.Region),
2239
)
23-
}
2440

25-
// NewJobResource creates a new OpenTelemetry resource for a Cloud Run job.
26-
func NewJobResource(metadata *runcfg.Metadata, job *runcfg.Job) *resource.Resource {
2741
return resource.NewWithAttributes(
2842
semconv.SchemaURL,
43+
attrs...,
44+
)
45+
}
46+
47+
// NewJobResource creates a new OpenTelemetry resource for a Cloud Run job.
48+
func NewJobResource(metadata *runcfg.Metadata, job *runcfg.Job, opts ...ResourceOption) *resource.Resource {
49+
cfg := &resourceConfig{}
50+
for _, opt := range opts {
51+
opt.apply(cfg)
52+
}
2953

54+
attrs := append(cfg.attrs,
3055
// https://github.com/open-telemetry/opentelemetry-go-contrib/blob/f368d047b7c605a7805094537a6922db36eabcdc/detectors/gcp/detector.go#L35
3156
semconv.CloudProviderGCP,
3257
semconv.CloudAccountID(metadata.ProjectID),
@@ -37,4 +62,9 @@ func NewJobResource(metadata *runcfg.Metadata, job *runcfg.Job) *resource.Resour
3762
semconv.GCPCloudRunJobTaskIndex(int(job.TaskIndex)),
3863
semconv.CloudRegion(metadata.Region),
3964
)
65+
66+
return resource.NewWithAttributes(
67+
semconv.SchemaURL,
68+
attrs...,
69+
)
4070
}

0 commit comments

Comments
 (0)