func evaluateRule()

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
	}
}