// EvalPredicate - Evaluate a given expression as a boolean predicate against a set of fields and tags func EvalPredicate(se stateful.Expression, scopePool stateful.ScopePool, now time.Time, fields models.Fields, tags models.Tags) (bool, error) { vars := scopePool.Get() defer scopePool.Put(vars) err := fillScope(vars, scopePool.ReferenceVariables(), now, fields, tags) if err != nil { return false, err } b, err := se.EvalBool(vars) if err != nil { return false, err } return b, nil }
// evalInt - Evaluate a given expression as an int64 against a set of fields and tags. // The CurrentField is also set on the scope if not empty. func (k *K8sAutoscaleNode) evalInt(current int64, se stateful.Expression, scopePool stateful.ScopePool, now time.Time, fields models.Fields, tags models.Tags) (int64, error) { vars := scopePool.Get() defer scopePool.Put(vars) // Set the current replicas value on the scope if requested. if k.k.CurrentField != "" { vars.Set(k.k.CurrentField, current) } // Fill the scope with the rest of the values err := fillScope(vars, scopePool.ReferenceVariables(), now, fields, tags) if err != nil { return 0, err } i, err := se.EvalInt(vars) if err != nil { return 0, err } return i, nil }