cmd/amazon-cloudwatch-agent-target-allocator/prehook/prehook.go (39 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package prehook
import (
"errors"
"github.com/go-logr/logr"
"github.com/prometheus/prometheus/model/relabel"
"github.com/aws/amazon-cloudwatch-agent-operator/cmd/amazon-cloudwatch-agent-target-allocator/target"
)
const (
relabelConfigTargetFilterName = "relabel-config"
)
type Hook interface {
Apply(map[string]*target.Item) map[string]*target.Item
SetConfig(map[string][]*relabel.Config)
GetConfig() map[string][]*relabel.Config
}
type HookProvider func(log logr.Logger) Hook
var (
registry = map[string]HookProvider{}
)
func New(name string, log logr.Logger) Hook {
if p, ok := registry[name]; ok {
return p(log.WithName("Prehook").WithName(name))
}
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
}
func init() {
err := Register(relabelConfigTargetFilterName, NewRelabelConfigTargetFilter)
if err != nil {
panic(err)
}
}