mirror of
https://github.com/grafana/grafana.git
synced 2024-11-29 12:14:08 -06:00
44 lines
1.2 KiB
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}
|
|
}
|