@@ -2,15 +2,32 @@ package otelcfg
22
33import (
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