diff options
author | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-08-30 14:18:42 +0200 |
---|---|---|
committer | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-08-30 14:18:42 +0200 |
commit | 7f1877f760a5ecdd0356010dd14c7606d44abfb0 (patch) | |
tree | 138c9ae13260b92bac0a0bff0911e249e4a541f7 /plugins/check_snmp.c | |
parent | 77a5db04d7ccc954096c2d86c21fa7b05948072d (diff) | |
download | monitoring-plugins-7f1877f760a5ecdd0356010dd14c7606d44abfb0.tar.gz |
check_snmp: Fix number processing (offset + multiplier)
Diffstat (limited to 'plugins/check_snmp.c')
-rw-r--r-- | plugins/check_snmp.c | 71 |
1 files changed, 58 insertions, 13 deletions
diff --git a/plugins/check_snmp.c b/plugins/check_snmp.c index a939f078..0a9c6752 100644 --- a/plugins/check_snmp.c +++ b/plugins/check_snmp.c | |||
@@ -286,9 +286,21 @@ int main(int argc, char **argv) { | |||
286 | } | 286 | } |
287 | struct counter64 tmp = *(vars->val.counter64); | 287 | struct counter64 tmp = *(vars->val.counter64); |
288 | uint64_t counter = (tmp.high << 32) + tmp.low; | 288 | uint64_t counter = (tmp.high << 32) + tmp.low; |
289 | counter *= (uint64_t)config.multiplier; | 289 | |
290 | counter += (uint64_t)config.offset; | 290 | if (config.multiplier_set || config.offset_set) { |
291 | pd_result_val = mp_create_pd_value(counter); | 291 | double processed = 0; |
292 | if (config.multiplier_set) { | ||
293 | processed = (double)counter * config.multiplier; | ||
294 | } | ||
295 | |||
296 | if (config.offset_set) { | ||
297 | processed += config.offset; | ||
298 | } | ||
299 | pd_result_val = mp_create_pd_value(processed); | ||
300 | } else { | ||
301 | pd_result_val = mp_create_pd_value(counter); | ||
302 | } | ||
303 | |||
292 | } break; | 304 | } break; |
293 | /* Numerical values */ | 305 | /* Numerical values */ |
294 | case ASN_GAUGE: // same as ASN_UNSIGNED | 306 | case ASN_GAUGE: // same as ASN_UNSIGNED |
@@ -299,10 +311,20 @@ int main(int argc, char **argv) { | |||
299 | printf("Debug: Got a Integer like\n"); | 311 | printf("Debug: Got a Integer like\n"); |
300 | } | 312 | } |
301 | unsigned long tmp = (unsigned long)*(vars->val.integer); | 313 | unsigned long tmp = (unsigned long)*(vars->val.integer); |
302 | tmp *= (unsigned long)config.multiplier; | ||
303 | 314 | ||
304 | tmp += (unsigned long)config.offset; | 315 | if (config.multiplier_set || config.offset_set) { |
305 | pd_result_val = mp_create_pd_value(tmp); | 316 | double processed = 0; |
317 | if (config.multiplier_set) { | ||
318 | processed = (double)tmp * config.multiplier; | ||
319 | } | ||
320 | |||
321 | if (config.offset_set) { | ||
322 | processed += config.offset; | ||
323 | } | ||
324 | pd_result_val = mp_create_pd_value(processed); | ||
325 | } else { | ||
326 | pd_result_val = mp_create_pd_value(tmp); | ||
327 | } | ||
306 | break; | 328 | break; |
307 | } | 329 | } |
308 | case ASN_INTEGER: { | 330 | case ASN_INTEGER: { |
@@ -311,19 +333,36 @@ int main(int argc, char **argv) { | |||
311 | } | 333 | } |
312 | 334 | ||
313 | long tmp = *(vars->val.integer); | 335 | long tmp = *(vars->val.integer); |
314 | tmp *= (long)config.multiplier; | ||
315 | tmp += (long)config.offset; | ||
316 | 336 | ||
317 | pd_result_val = mp_create_pd_value(tmp); | 337 | if (config.multiplier_set || config.offset_set) { |
338 | double processed = 0; | ||
339 | if (config.multiplier_set) { | ||
340 | processed = (double)tmp * config.multiplier; | ||
341 | } | ||
342 | |||
343 | if (config.offset_set) { | ||
344 | processed += config.offset; | ||
345 | } | ||
346 | pd_result_val = mp_create_pd_value(processed); | ||
347 | } else { | ||
348 | pd_result_val = mp_create_pd_value(tmp); | ||
349 | } | ||
350 | |||
318 | } break; | 351 | } break; |
319 | case ASN_FLOAT: { | 352 | case ASN_FLOAT: { |
320 | if (verbose) { | 353 | if (verbose) { |
321 | printf("Debug: Got a float\n"); | 354 | printf("Debug: Got a float\n"); |
322 | } | 355 | } |
323 | double tmp = *(vars->val.floatVal); | 356 | double tmp = *(vars->val.floatVal); |
324 | tmp *= config.multiplier; | ||
325 | 357 | ||
326 | tmp += config.offset; | 358 | if (config.multiplier_set) { |
359 | tmp *= config.multiplier; | ||
360 | } | ||
361 | |||
362 | if (config.offset_set) { | ||
363 | tmp += config.offset; | ||
364 | } | ||
365 | |||
327 | pd_result_val = mp_create_pd_value(tmp); | 366 | pd_result_val = mp_create_pd_value(tmp); |
328 | break; | 367 | break; |
329 | } | 368 | } |
@@ -332,8 +371,14 @@ int main(int argc, char **argv) { | |||
332 | printf("Debug: Got a double\n"); | 371 | printf("Debug: Got a double\n"); |
333 | } | 372 | } |
334 | double tmp = *(vars->val.doubleVal); | 373 | double tmp = *(vars->val.doubleVal); |
335 | tmp *= config.multiplier; | 374 | if (config.multiplier_set) { |
336 | tmp += config.offset; | 375 | tmp *= config.multiplier; |
376 | } | ||
377 | |||
378 | if (config.offset_set) { | ||
379 | tmp += config.offset; | ||
380 | } | ||
381 | |||
337 | pd_result_val = mp_create_pd_value(tmp); | 382 | pd_result_val = mp_create_pd_value(tmp); |
338 | break; | 383 | break; |
339 | } | 384 | } |