From a48d880bcc534ea974b9ae97e2eb69f9a7cdcce9 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Sun, 19 Jan 2025 15:53:08 -0800 Subject: [PATCH 1/2] [chore] remove init function from prehook package --- cmd/otel-allocator/prehook/prehook.go | 15 ++---- cmd/otel-allocator/prehook/prehook_test.go | 57 ++++++++++++++++++++++ cmd/otel-allocator/prehook/relabel.go | 18 ++++--- 3 files changed, 71 insertions(+), 19 deletions(-) create mode 100644 cmd/otel-allocator/prehook/prehook_test.go diff --git a/cmd/otel-allocator/prehook/prehook.go b/cmd/otel-allocator/prehook/prehook.go index f356f7c2d8..e3463b4b1b 100644 --- a/cmd/otel-allocator/prehook/prehook.go +++ b/cmd/otel-allocator/prehook/prehook.go @@ -23,10 +23,6 @@ import ( "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" ) -const ( - relabelConfigTargetFilterName = "relabel-config" -) - type Hook interface { Apply(map[string]*target.Item) map[string]*target.Item SetConfig(map[string][]*relabel.Config) @@ -36,7 +32,9 @@ type Hook interface { type HookProvider func(log logr.Logger) Hook var ( - registry = map[string]HookProvider{} + registry = map[string]HookProvider{ + relabelConfigTargetFilterName: newRelabelConfigTargetFilter, + } ) func New(name string, log logr.Logger) Hook { @@ -55,10 +53,3 @@ func Register(name string, provider HookProvider) error { registry[name] = provider return nil } - -func init() { - err := Register(relabelConfigTargetFilterName, NewRelabelConfigTargetFilter) - if err != nil { - panic(err) - } -} diff --git a/cmd/otel-allocator/prehook/prehook_test.go b/cmd/otel-allocator/prehook/prehook_test.go new file mode 100644 index 0000000000..c0a49806a6 --- /dev/null +++ b/cmd/otel-allocator/prehook/prehook_test.go @@ -0,0 +1,57 @@ +// Copyright The OpenTelemetry Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package prehook + +import ( + "testing" + + "github.com/go-logr/logr" + "github.com/prometheus/prometheus/model/relabel" + "github.com/stretchr/testify/require" + "sigs.k8s.io/controller-runtime/pkg/log" + + "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" +) + +type myHook struct { +} + +func (m myHook) Apply(_ map[string]*target.Item) map[string]*target.Item { + panic("implement me") +} + +func (m myHook) SetConfig(_ map[string][]*relabel.Config) { + panic("implement me") +} + +func (m myHook) GetConfig() map[string][]*relabel.Config { + panic("implement me") +} + +func TestRegister(t *testing.T) { + myProvider := func(log logr.Logger) Hook { + return myHook{} + } + + require.NoError(t, Register("foo", myProvider)) + + hook := New("foo", logr.New(log.NullLogSink{})) + require.NotNil(t, hook) +} + +func TestRegisterMissing(t *testing.T) { + hook := New("bar", logr.New(log.NullLogSink{})) + require.Nil(t, hook) +} diff --git a/cmd/otel-allocator/prehook/relabel.go b/cmd/otel-allocator/prehook/relabel.go index 6c96affa39..e07a721e0e 100644 --- a/cmd/otel-allocator/prehook/relabel.go +++ b/cmd/otel-allocator/prehook/relabel.go @@ -21,19 +21,23 @@ import ( "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" ) -type RelabelConfigTargetFilter struct { +const ( + relabelConfigTargetFilterName = "relabel-config" +) + +type relabelConfigTargetFilter struct { log logr.Logger relabelCfg map[string][]*relabel.Config } -func NewRelabelConfigTargetFilter(log logr.Logger) Hook { - return &RelabelConfigTargetFilter{ +func newRelabelConfigTargetFilter(log logr.Logger) Hook { + return &relabelConfigTargetFilter{ log: log, relabelCfg: make(map[string][]*relabel.Config), } } -func (tf *RelabelConfigTargetFilter) Apply(targets map[string]*target.Item) map[string]*target.Item { +func (tf *relabelConfigTargetFilter) Apply(targets map[string]*target.Item) map[string]*target.Item { numTargets := len(targets) // need to wait until relabelCfg is set @@ -58,7 +62,7 @@ func (tf *RelabelConfigTargetFilter) Apply(targets map[string]*target.Item) map[ return targets } -func (tf *RelabelConfigTargetFilter) SetConfig(cfgs map[string][]*relabel.Config) { +func (tf *relabelConfigTargetFilter) SetConfig(cfgs map[string][]*relabel.Config) { relabelCfgCopy := make(map[string][]*relabel.Config) for key, val := range cfgs { relabelCfgCopy[key] = tf.replaceRelabelConfig(val) @@ -71,7 +75,7 @@ func (tf *RelabelConfigTargetFilter) SetConfig(cfgs map[string][]*relabel.Config // for why SHARD == 0 is a necessary substitution. Otherwise the keep action that uses this env variable, // would not match the regex and all targets end up dropped. Also note, $(SHARD) will always be 0 and it // does not make sense to read from the environment because it is never set in the allocator. -func (tf *RelabelConfigTargetFilter) replaceRelabelConfig(cfg []*relabel.Config) []*relabel.Config { +func (tf *relabelConfigTargetFilter) replaceRelabelConfig(cfg []*relabel.Config) []*relabel.Config { for i := range cfg { str := cfg[i].Regex.String() if str == "$(SHARD)" { @@ -82,7 +86,7 @@ func (tf *RelabelConfigTargetFilter) replaceRelabelConfig(cfg []*relabel.Config) return cfg } -func (tf *RelabelConfigTargetFilter) GetConfig() map[string][]*relabel.Config { +func (tf *relabelConfigTargetFilter) GetConfig() map[string][]*relabel.Config { relabelCfgCopy := make(map[string][]*relabel.Config) for k, v := range tf.relabelCfg { relabelCfgCopy[k] = v From 27a7b13b93c2b90bd784cb356b7228eb8732cd14 Mon Sep 17 00:00:00 2001 From: Antoine Toulme Date: Fri, 24 Jan 2025 22:52:25 -0800 Subject: [PATCH 2/2] remove Register --- cmd/otel-allocator/prehook/prehook.go | 10 ---- cmd/otel-allocator/prehook/prehook_test.go | 57 ---------------------- 2 files changed, 67 deletions(-) delete mode 100644 cmd/otel-allocator/prehook/prehook_test.go diff --git a/cmd/otel-allocator/prehook/prehook.go b/cmd/otel-allocator/prehook/prehook.go index e3463b4b1b..abddaf618d 100644 --- a/cmd/otel-allocator/prehook/prehook.go +++ b/cmd/otel-allocator/prehook/prehook.go @@ -15,8 +15,6 @@ package prehook import ( - "errors" - "github.com/go-logr/logr" "github.com/prometheus/prometheus/model/relabel" @@ -45,11 +43,3 @@ func New(name string, log logr.Logger) Hook { log.Info("Unrecognized filter strategy; filtering disabled") return nil } - -func Register(name string, provider HookProvider) error { - if _, ok := registry[name]; ok { - return errors.New("already registered") - } - registry[name] = provider - return nil -} diff --git a/cmd/otel-allocator/prehook/prehook_test.go b/cmd/otel-allocator/prehook/prehook_test.go deleted file mode 100644 index c0a49806a6..0000000000 --- a/cmd/otel-allocator/prehook/prehook_test.go +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright The OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prehook - -import ( - "testing" - - "github.com/go-logr/logr" - "github.com/prometheus/prometheus/model/relabel" - "github.com/stretchr/testify/require" - "sigs.k8s.io/controller-runtime/pkg/log" - - "github.com/open-telemetry/opentelemetry-operator/cmd/otel-allocator/target" -) - -type myHook struct { -} - -func (m myHook) Apply(_ map[string]*target.Item) map[string]*target.Item { - panic("implement me") -} - -func (m myHook) SetConfig(_ map[string][]*relabel.Config) { - panic("implement me") -} - -func (m myHook) GetConfig() map[string][]*relabel.Config { - panic("implement me") -} - -func TestRegister(t *testing.T) { - myProvider := func(log logr.Logger) Hook { - return myHook{} - } - - require.NoError(t, Register("foo", myProvider)) - - hook := New("foo", logr.New(log.NullLogSink{})) - require.NotNil(t, hook) -} - -func TestRegisterMissing(t *testing.T) { - hook := New("bar", logr.New(log.NullLogSink{})) - require.Nil(t, hook) -}