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 | |
| parent | 77a5db04d7ccc954096c2d86c21fa7b05948072d (diff) | |
| download | monitoring-plugins-7f1877f760a5ecdd0356010dd14c7606d44abfb0.tar.gz | |
check_snmp: Fix number processing (offset + multiplier)
| -rw-r--r-- | plugins/check_snmp.c | 71 | ||||
| -rw-r--r-- | plugins/check_snmp.d/check_snmp_helpers.c | 2 | ||||
| -rw-r--r-- | plugins/check_snmp.d/config.h | 2 |
3 files changed, 62 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 | } |
diff --git a/plugins/check_snmp.d/check_snmp_helpers.c b/plugins/check_snmp.d/check_snmp_helpers.c index 7725cc18..8f4bcb9c 100644 --- a/plugins/check_snmp.d/check_snmp_helpers.c +++ b/plugins/check_snmp.d/check_snmp_helpers.c | |||
| @@ -97,7 +97,9 @@ check_snmp_config check_snmp_config_init() { | |||
| 97 | .string_cmp_value = "", | 97 | .string_cmp_value = "", |
| 98 | 98 | ||
| 99 | .multiplier = 1.0, | 99 | .multiplier = 1.0, |
| 100 | .multiplier_set = false, | ||
| 100 | .offset = 0, | 101 | .offset = 0, |
| 102 | .offset_set = false, | ||
| 101 | 103 | ||
| 102 | .use_perf_data_labels_from_input = false, | 104 | .use_perf_data_labels_from_input = false, |
| 103 | }; | 105 | }; |
diff --git a/plugins/check_snmp.d/config.h b/plugins/check_snmp.d/config.h index e96dff5c..e68986e2 100644 --- a/plugins/check_snmp.d/config.h +++ b/plugins/check_snmp.d/config.h | |||
| @@ -58,7 +58,9 @@ typedef struct check_snmp_config { | |||
| 58 | 58 | ||
| 59 | // Modify data | 59 | // Modify data |
| 60 | double multiplier; | 60 | double multiplier; |
| 61 | bool multiplier_set; | ||
| 61 | double offset; | 62 | double offset; |
| 63 | bool offset_set; | ||
| 62 | 64 | ||
| 63 | // Modify output | 65 | // Modify output |
| 64 | bool use_perf_data_labels_from_input; | 66 | bool use_perf_data_labels_from_input; |
