grafana/pkg/services/live/pipeline/frame_condition_checker_multiple.go

44 lines
1.2 KiB
Go

package pipeline
import (
"context"
"github.com/grafana/grafana-plugin-sdk-go/data"
)
// MultipleFrameConditionChecker can check multiple conditions according to ConditionType.
type MultipleFrameConditionChecker struct {
ConditionType ConditionType
Conditions []FrameConditionChecker
}
const FrameConditionCheckerTypeMultiple = "multiple"
func (c *MultipleFrameConditionChecker) Type() string {
return FrameConditionCheckerTypeMultiple
}
func (c *MultipleFrameConditionChecker) CheckFrameCondition(ctx context.Context, frame *data.Frame) (bool, error) {
for _, cond := range c.Conditions {
ok, err := cond.CheckFrameCondition(ctx, frame)
if err != nil {
return false, err
}
if ok && c.ConditionType == ConditionAny {
return true, nil
}
if !ok && c.ConditionType == ConditionAll {
return false, nil
}
}
if c.ConditionType == ConditionAny {
return false, nil
}
return true, nil
}
// NewMultipleFrameConditionChecker creates new MultipleFrameConditionChecker.
func NewMultipleFrameConditionChecker(conditionType ConditionType, conditions ...FrameConditionChecker) *MultipleFrameConditionChecker {
return &MultipleFrameConditionChecker{ConditionType: conditionType, Conditions: conditions}
}