Skip to content

Commit 3bd8ded

Browse files
committed
Add lookup processor skeleton
- introduce pkg/lookup with functional Source/LookupExtension constructors and a placeholder BaseSource/cache to be shared by upcoming extensions - scaffold the lookup processor (config, factory, processor stub, tests) and sample config/README showing how to bind an external lookup extension - add a noop lookup extension module plus factory/tests to demonstrate extension-based sources
1 parent b66e064 commit 3bd8ded

File tree

32 files changed

+1606
-0
lines changed

32 files changed

+1606
-0
lines changed

.checkapi.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ ignored_paths:
66
- extension/observer
77
- extension/encoding
88
- extension/opampcustommessages
9+
- extension/lookup/nooplookupextension
910
- pkg/batchperresourceattr
1011
- pkg/batchpersignal
1112
- pkg/core/xidutils
@@ -19,6 +20,7 @@ ignored_paths:
1920
- pkg/resourcetotelemetry
2021
- pkg/sampling
2122
- pkg/status
23+
- pkg/lookup
2224
- pkg/translator/azure
2325
- pkg/translator/azurelogs
2426
- pkg/translator/faro
@@ -31,6 +33,7 @@ ignored_paths:
3133
- pkg/translator/skywalking
3234
- pkg/winperfcounters
3335
- pkg/xk8stest
36+
- processor/lookupprocessor
3437
- processor/tailsamplingprocessor
3538
- receiver/hostmetricsreceiver # issue with the parser not identifying Config as a config struct
3639
- receiver/pulsarreceiver # 38930
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: new_component
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
7+
component: lookupprocessor
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Adds lookup processor skeleton, shared lookup package, and noop lookup extension to define the new lookup interface surface.
11+
12+
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
13+
issues: [41816]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# If your change doesn't affect end users or the exported elements of any package,
21+
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
22+
# Optional: The change log or logs in which this entry should be included.
23+
# e.g. '[user]' or '[user, api]'
24+
# Include 'user' if the change is relevant to end users.
25+
# Include 'api' if there is a change to a library API.
26+
# Default: '[user]'
27+
change_logs: [user]

.codecov.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,10 @@ component_management:
352352
name: extension_k8sleaderelector
353353
paths:
354354
- extension/k8sleaderelector/**
355+
- component_id: extension_lookup_nooplookup
356+
name: extension_lookup_nooplookup
357+
paths:
358+
- extension/lookup/nooplookupextension/**
355359
- component_id: extension_oauth2clientauth
356360
name: extension_oauth2clientauth
357361
paths:
@@ -500,6 +504,10 @@ component_management:
500504
name: processor_logstransform
501505
paths:
502506
- processor/logstransformprocessor/**
507+
- component_id: processor_lookup
508+
name: processor_lookup
509+
paths:
510+
- processor/lookupprocessor/**
503511
- component_id: processor_metricsgeneration
504512
name: processor_metricsgeneration
505513
paths:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
include ../../../Makefile.Common
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
// Package nooplookupextension exposes a minimal lookup extension that always
5+
// reports no results. It demonstrates the functional composition RFC for
6+
// extension implementations.
7+
package nooplookupextension // import "github.com/open-telemetry/opentelemetry-collector-contrib/extension/lookup/nooplookupextension"
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package nooplookupextension // import "github.com/open-telemetry/opentelemetry-collector-contrib/extension/lookup/nooplookupextension"
5+
6+
import (
7+
"context"
8+
9+
"go.opentelemetry.io/collector/component"
10+
"go.opentelemetry.io/collector/extension"
11+
12+
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/lookup"
13+
)
14+
15+
const typeStr = "nooplookup"
16+
17+
var Type = component.MustNewType(typeStr)
18+
19+
type Config struct{}
20+
21+
var _ component.Config = (*Config)(nil)
22+
23+
func (*Config) Validate() error { return nil }
24+
25+
func NewFactory() extension.Factory {
26+
return extension.NewFactory(
27+
Type,
28+
createDefaultConfig,
29+
createExtension,
30+
component.StabilityLevelDevelopment,
31+
)
32+
}
33+
34+
func NewLookupExtensionFactory() extension.Factory {
35+
return NewFactory()
36+
}
37+
38+
func createDefaultConfig() component.Config {
39+
return &Config{}
40+
}
41+
42+
func createExtension(_ context.Context, set extension.Settings, _ component.Config) (extension.Extension, error) {
43+
return NewLookupExtension(set.TelemetrySettings)
44+
}
45+
46+
// NewLookupExtension creates the noop lookup extension using functional composition.
47+
func NewLookupExtension(settings component.TelemetrySettings) (lookup.LookupExtension, error) {
48+
base, err := lookup.NewBaseSource(typeStr, settings, nil)
49+
if err != nil {
50+
return nil, err
51+
}
52+
53+
return lookup.NewLookupExtension(
54+
base.WrapLookup(func(context.Context, string) (any, bool, error) {
55+
return nil, false, nil
56+
}),
57+
base.TypeFunc(),
58+
lookup.StartFunc(base.Start),
59+
lookup.ShutdownFunc(base.Shutdown),
60+
), nil
61+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package nooplookupextension
5+
6+
import (
7+
"testing"
8+
9+
"github.com/stretchr/testify/require"
10+
"go.opentelemetry.io/collector/component/componenttest"
11+
"go.opentelemetry.io/collector/extension/extensiontest"
12+
"go.opentelemetry.io/otel/metric/noop"
13+
)
14+
15+
func TestFactoryCreatesExtension(t *testing.T) {
16+
factory := NewFactory()
17+
18+
cfg := factory.CreateDefaultConfig()
19+
require.IsType(t, &Config{}, cfg)
20+
21+
settings := extensiontest.NewNopSettings(Type)
22+
23+
ext, err := factory.Create(t.Context(), settings, cfg)
24+
require.NoError(t, err)
25+
require.NoError(t, ext.Start(t.Context(), componenttest.NewNopHost()))
26+
require.NoError(t, ext.Shutdown(t.Context()))
27+
}
28+
29+
func TestNewLookupExtensionBehaviour(t *testing.T) {
30+
settings := componenttest.NewNopTelemetrySettings()
31+
settings.MeterProvider = noop.NewMeterProvider()
32+
33+
ext, err := NewLookupExtension(settings)
34+
require.NoError(t, err)
35+
36+
ctx := t.Context()
37+
require.NoError(t, ext.Start(ctx, componenttest.NewNopHost()))
38+
val, found, err := ext.Lookup(ctx, "missing")
39+
require.NoError(t, err)
40+
require.False(t, found)
41+
require.Nil(t, val)
42+
require.NoError(t, ext.Shutdown(ctx))
43+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
module github.com/open-telemetry/opentelemetry-collector-contrib/extension/lookup/nooplookupextension
2+
3+
go 1.24.0
4+
5+
require (
6+
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/lookup v0.118.0
7+
github.com/stretchr/testify v1.11.1
8+
go.opentelemetry.io/collector/component v1.42.1-0.20251002223229-5ec1466578ef
9+
go.opentelemetry.io/collector/component/componenttest v0.136.1-0.20251002223229-5ec1466578ef
10+
go.opentelemetry.io/collector/extension v1.42.1-0.20251002223229-5ec1466578ef
11+
go.opentelemetry.io/collector/extension/extensiontest v0.136.1-0.20251002223229-5ec1466578ef
12+
go.opentelemetry.io/otel/metric v1.38.0
13+
)
14+
15+
require (
16+
github.com/davecgh/go-spew v1.1.1 // indirect
17+
github.com/go-logr/logr v1.4.3 // indirect
18+
github.com/go-logr/stdr v1.2.2 // indirect
19+
github.com/gogo/protobuf v1.3.2 // indirect
20+
github.com/google/uuid v1.6.0 // indirect
21+
github.com/hashicorp/go-version v1.7.0 // indirect
22+
github.com/json-iterator/go v1.1.12 // indirect
23+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
24+
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
25+
github.com/pmezard/go-difflib v1.0.0 // indirect
26+
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
27+
go.opentelemetry.io/collector/featuregate v1.42.1-0.20251002223229-5ec1466578ef // indirect
28+
go.opentelemetry.io/collector/internal/telemetry v0.136.1-0.20251002223229-5ec1466578ef // indirect
29+
go.opentelemetry.io/collector/pdata v1.42.1-0.20251002223229-5ec1466578ef // indirect
30+
go.opentelemetry.io/contrib/bridges/otelzap v0.13.0 // indirect
31+
go.opentelemetry.io/otel v1.38.0 // indirect
32+
go.opentelemetry.io/otel/log v0.14.0 // indirect
33+
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
34+
go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect
35+
go.opentelemetry.io/otel/trace v1.38.0 // indirect
36+
go.uber.org/multierr v1.11.0 // indirect
37+
go.uber.org/zap v1.27.0 // indirect
38+
golang.org/x/net v0.41.0 // indirect
39+
golang.org/x/sys v0.35.0 // indirect
40+
golang.org/x/text v0.26.0 // indirect
41+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
42+
google.golang.org/grpc v1.75.1 // indirect
43+
google.golang.org/protobuf v1.36.9 // indirect
44+
gopkg.in/yaml.v3 v3.0.1 // indirect
45+
)
46+
47+
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/lookup => ../../../pkg/lookup

0 commit comments

Comments
 (0)