in sharedlibraries/configurablemetrics/configurablemetrics.go [186:233]
func evaluateRule(ctx context.Context, rule *cmpb.EvalRule, output Output) bool {
source := outputSource(output, rule.GetOutputSource())
switch rule.GetEvalRuleTypes().(type) {
case *cmpb.EvalRule_OutputEquals:
return rule.GetOutputEquals() == source
case *cmpb.EvalRule_OutputNotEquals:
return rule.GetOutputNotEquals() != source
case *cmpb.EvalRule_OutputLessThan:
f, err := strconv.ParseFloat(source, 64)
if err != nil {
log.CtxLogger(ctx).Warnw("Failed to parse output as float", "error", err)
return false
}
return f < rule.GetOutputLessThan()
case *cmpb.EvalRule_OutputLessThanOrEqual:
f, err := strconv.ParseFloat(source, 64)
if err != nil {
log.CtxLogger(ctx).Warnw("Failed to parse output as float", "error", err)
return false
}
return f <= rule.GetOutputLessThanOrEqual()
case *cmpb.EvalRule_OutputGreaterThan:
f, err := strconv.ParseFloat(source, 64)
if err != nil {
log.CtxLogger(ctx).Warnw("Failed to parse output as float", "error", err)
return false
}
return f > rule.GetOutputGreaterThan()
case *cmpb.EvalRule_OutputGreaterThanOrEqual:
f, err := strconv.ParseFloat(source, 64)
if err != nil {
log.CtxLogger(ctx).Warnw("Failed to parse output as float", "error", err)
return false
}
return f >= rule.GetOutputGreaterThanOrEqual()
case *cmpb.EvalRule_OutputStartsWith:
return strings.HasPrefix(source, rule.GetOutputStartsWith())
case *cmpb.EvalRule_OutputEndsWith:
return strings.HasSuffix(source, rule.GetOutputEndsWith())
case *cmpb.EvalRule_OutputContains:
return strings.Contains(source, rule.GetOutputContains())
case *cmpb.EvalRule_OutputNotContains:
return !strings.Contains(source, rule.GetOutputNotContains())
default:
log.CtxLogger(ctx).Debug("No evaluation rule detected, defaulting to false")
return false
}
}