@cryptotaxi247 / netdata-1 / commits / 244dbe37f

Add missing modulo operator to alerts (#21267)

Add missing modulo operator code

Stelios Fragkakis committed Nov 5, 2025 at 21:54 UTC 244dbe37f611810f225ff5b4658a690c6753f6e6
1 file changed +27
src/libnetdata/eval/eval-evaluate.c
+27
@@ -176,6 +176,32 @@ static NETDATA_DOUBLE eval_divide(EVAL_EXPRESSION *exp, EVAL_NODE *op, int *erro
176 return n1 / n2;
177 }
178
179 +ALWAYS_INLINE
180 +static NETDATA_DOUBLE eval_modulo(EVAL_EXPRESSION *exp, EVAL_NODE *op, int *error) {
181 + NETDATA_DOUBLE n1 = eval_value(exp, &op->ops[0], error);
182 + if(*error != EVAL_ERROR_OK) return NAN;
183 +
184 + NETDATA_DOUBLE n2 = eval_value(exp, &op->ops[1], error);
185 + if(*error != EVAL_ERROR_OK) return NAN;
186 +
187 + if(isnan(n1) || isnan(n2)) {
188 + *error = EVAL_ERROR_VALUE_IS_NAN;
189 + return NAN;
190 + }
191 +
192 + if(isinf(n1) || isinf(n2)) {
193 + *error = EVAL_ERROR_VALUE_IS_INFINITE;
194 + return INFINITY;
195 + }
196 +
197 + if(n2 == 0) {
198 + *error = EVAL_ERROR_VALUE_IS_INFINITE;
199 + return NAN; // Modulo by zero is undefined
200 + }
201 +
202 + return fmod(n1, n2);
203 +}
204 +
205 ALWAYS_INLINE
206 static NETDATA_DOUBLE eval_nop(EVAL_EXPRESSION *exp, EVAL_NODE *op, int *error) {
207 return eval_value(exp, &op->ops[0], error);
@@ -232,6 +258,7 @@ struct operator operators[256] = {
258 [EVAL_OPERATOR_MINUS] = { "-", 4, 2, 0, eval_minus },
259 [EVAL_OPERATOR_MULTIPLY] = { "*", 5, 2, 0, eval_multiply },
260 [EVAL_OPERATOR_DIVIDE] = { "/", 5, 2, 0, eval_divide },
261 + [EVAL_OPERATOR_MODULO] = { "%", 5, 2, 0, eval_modulo },
262 [EVAL_OPERATOR_NOT] = { "!", 6, 1, 0, eval_not },
263 [EVAL_OPERATOR_SIGN_PLUS] = { "+", 6, 1, 0, eval_sign_plus },
264 [EVAL_OPERATOR_SIGN_MINUS] = { "-", 6, 1, 0, eval_sign_minus },