Skip to content

Commit

Permalink
Make clearer what are factories
Browse files Browse the repository at this point in the history
  • Loading branch information
jhesketh committed Jun 12, 2024
1 parent 8f40b7d commit 75506d6
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
16 changes: 8 additions & 8 deletions pkg/streamingpromql/functions.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/grafana/mimir/pkg/streamingpromql/types"
)

type InstantVectorFunctionOperator func(args []types.Operator, pool *pooling.LimitingPool) (types.InstantVectorOperator, error)
type instantVectorFunctionOperatorFactory func(args []types.Operator, pool *pooling.LimitingPool) (types.InstantVectorOperator, error)

// SingleInputVectorFunctionOperator creates an InstantVectorFunctionOperator for functions
// that have exactly 1 argument (v instant-vector).
Expand All @@ -24,7 +24,7 @@ type InstantVectorFunctionOperator func(args []types.Operator, pool *pooling.Lim
// Returns:
//
// An InstantVectorFunctionOperator.
func SingleInputVectorFunctionOperator(name string, metadataFunc functions.SeriesMetadataFunction, seriesDataFunc functions.InstantVectorFunction) InstantVectorFunctionOperator {
func SingleInputVectorFunctionOperator(name string, metadataFunc functions.SeriesMetadataFunction, seriesDataFunc functions.InstantVectorFunction) instantVectorFunctionOperatorFactory {
return func(args []types.Operator, pool *pooling.LimitingPool) (types.InstantVectorOperator, error) {
if len(args) != 1 {
// Should be caught by the PromQL parser, but we check here for safety.
Expand Down Expand Up @@ -57,7 +57,7 @@ func SingleInputVectorFunctionOperator(name string, metadataFunc functions.Serie
// Returns:
//
// An InstantVectorFunctionOperator.
func TransformationFunctionOperator(name string, seriesDataFunc functions.InstantVectorFunction) InstantVectorFunctionOperator {
func TransformationFunctionOperator(name string, seriesDataFunc functions.InstantVectorFunction) instantVectorFunctionOperatorFactory {
return SingleInputVectorFunctionOperator(name, functions.DropSeriesName, seriesDataFunc)
}

Expand All @@ -73,7 +73,7 @@ func TransformationFunctionOperator(name string, seriesDataFunc functions.Instan
// Returns:
//
// An InstantVectorFunctionOperator.
func LabelManipulationFunctionOperator(name string, metadataFunc functions.SeriesMetadataFunction) InstantVectorFunctionOperator {
func LabelManipulationFunctionOperator(name string, metadataFunc functions.SeriesMetadataFunction) instantVectorFunctionOperatorFactory {
return SingleInputVectorFunctionOperator(name, metadataFunc, functions.Passthrough)
}

Expand All @@ -96,18 +96,18 @@ func rateFunctionOperator(args []types.Operator, pool *pooling.LimitingPool) (ty
}

// These functions return an instant-vector.
var instantVectorFunctions = map[string]InstantVectorFunctionOperator{
var instantVectorFunctionOperatorFactories = map[string]instantVectorFunctionOperatorFactory{
"acos": TransformationFunctionOperator("acos", functions.Acos),
"histogram_count": TransformationFunctionOperator("histogram_count", functions.HistogramCount),
"histogram_sum": TransformationFunctionOperator("histogram_sum", functions.HistogramSum),
"rate": rateFunctionOperator,
}

func RegisterInstantVectorFunctionOperator(functionName string, functionOperator InstantVectorFunctionOperator) error {
if _, exists := instantVectorFunctions[functionName]; exists {
func RegisterInstantVectorFunctionOperator(functionName string, functionOperator instantVectorFunctionOperatorFactory) error {
if _, exists := instantVectorFunctionOperatorFactories[functionName]; exists {
return fmt.Errorf("function '%s' has already been registered", functionName)
}

instantVectorFunctions[functionName] = functionOperator
instantVectorFunctionOperatorFactories[functionName] = functionOperator
return nil
}
2 changes: 1 addition & 1 deletion pkg/streamingpromql/functions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,5 @@ func TestRegisterInstantVectorFunctionOperator(t *testing.T) {
newFunc := LabelManipulationFunctionOperator("new_function", functions.DropSeriesName)
err = RegisterInstantVectorFunctionOperator("new_function", newFunc)
require.NoError(t, err)
require.Contains(t, instantVectorFunctions, "new_function")
require.Contains(t, instantVectorFunctionOperatorFactories, "new_function")
}
2 changes: 1 addition & 1 deletion pkg/streamingpromql/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ func (q *Query) convertToInstantVectorOperator(expr parser.Expr) (types.InstantV
}

func (q *Query) convertFunctionCallToOperator(e *parser.Call) (types.InstantVectorOperator, error) {
factory, ok := instantVectorFunctions[e.Func.Name]
factory, ok := instantVectorFunctionOperatorFactories[e.Func.Name]
if !ok {
return nil, compat.NewNotSupportedError(fmt.Sprintf("'%s' function", e.Func.Name))
}
Expand Down

0 comments on commit 75506d6

Please sign in to comment.