summaryrefslogtreecommitdiffstats
path: root/lib/perfdata.c
diff options
context:
space:
mode:
authorLorenz Kästle <12514511+RincewindsHat@users.noreply.github.com>2025-07-06 22:49:04 +0200
committerLorenz Kästle <12514511+RincewindsHat@users.noreply.github.com>2025-07-06 22:49:04 +0200
commit92c7b91002b64187a67463e79ae3d306f5de923c (patch)
tree0a167d65d488fd07641789e45c6863e2b982fe43 /lib/perfdata.c
parentbb4ce15997a3023c5c4f2bb434b37699797272da (diff)
parente63acdb83d9edcc8c1e244fc34043b4876b74f16 (diff)
downloadmonitoring-plugins-92c7b91002b64187a67463e79ae3d306f5de923c.tar.gz
Merge branch 'master' into refactor/check_load
Diffstat (limited to 'lib/perfdata.c')
-rw-r--r--lib/perfdata.c91
1 files changed, 90 insertions, 1 deletions
diff --git a/lib/perfdata.c b/lib/perfdata.c
index 661756c5..b87de7e0 100644
--- a/lib/perfdata.c
+++ b/lib/perfdata.c
@@ -33,7 +33,7 @@ char *pd_value_to_string(const mp_perfdata_value pd) {
33char *pd_to_string(mp_perfdata pd) { 33char *pd_to_string(mp_perfdata pd) {
34 assert(pd.label != NULL); 34 assert(pd.label != NULL);
35 char *result = NULL; 35 char *result = NULL;
36 asprintf(&result, "%s=", pd.label); 36 asprintf(&result, "'%s'=", pd.label);
37 37
38 asprintf(&result, "%s%s", result, pd_value_to_string(pd.value)); 38 asprintf(&result, "%s%s", result, pd_value_to_string(pd.value));
39 39
@@ -257,6 +257,10 @@ mp_perfdata mp_set_pd_value_double(mp_perfdata pd, double value) {
257 return pd; 257 return pd;
258} 258}
259 259
260mp_perfdata mp_set_pd_value_char(mp_perfdata pd, char value) { return mp_set_pd_value_long_long(pd, (long long)value); }
261
262mp_perfdata mp_set_pd_value_u_char(mp_perfdata pd, unsigned char value) { return mp_set_pd_value_u_long_long(pd, (unsigned long long)value); }
263
260mp_perfdata mp_set_pd_value_int(mp_perfdata pd, int value) { return mp_set_pd_value_long_long(pd, (long long)value); } 264mp_perfdata mp_set_pd_value_int(mp_perfdata pd, int value) { return mp_set_pd_value_long_long(pd, (long long)value); }
261 265
262mp_perfdata mp_set_pd_value_u_int(mp_perfdata pd, unsigned int value) { return mp_set_pd_value_u_long_long(pd, (unsigned long long)value); } 266mp_perfdata mp_set_pd_value_u_int(mp_perfdata pd, unsigned int value) { return mp_set_pd_value_u_long_long(pd, (unsigned long long)value); }
@@ -288,6 +292,10 @@ mp_perfdata_value mp_create_pd_value_double(double value) {
288 292
289mp_perfdata_value mp_create_pd_value_float(float value) { return mp_create_pd_value_double((double)value); } 293mp_perfdata_value mp_create_pd_value_float(float value) { return mp_create_pd_value_double((double)value); }
290 294
295mp_perfdata_value mp_create_pd_value_char(char value) { return mp_create_pd_value_long_long((long long)value); }
296
297mp_perfdata_value mp_create_pd_value_u_char(unsigned char value) { return mp_create_pd_value_u_long_long((unsigned long long)value); }
298
291mp_perfdata_value mp_create_pd_value_int(int value) { return mp_create_pd_value_long_long((long long)value); } 299mp_perfdata_value mp_create_pd_value_int(int value) { return mp_create_pd_value_long_long((long long)value); }
292 300
293mp_perfdata_value mp_create_pd_value_u_int(unsigned int value) { return mp_create_pd_value_u_long_long((unsigned long long)value); } 301mp_perfdata_value mp_create_pd_value_u_int(unsigned int value) { return mp_create_pd_value_u_long_long((unsigned long long)value); }
@@ -514,3 +522,84 @@ perfdata_value_parser_wrapper parse_pd_value(const char *input) {
514 } 522 }
515 return result; 523 return result;
516} 524}
525
526mp_perfdata mp_set_pd_max_value(mp_perfdata perfdata, mp_perfdata_value value) {
527 perfdata.max = value;
528 perfdata.max_present = true;
529 return perfdata;
530}
531
532mp_perfdata mp_set_pd_min_value(mp_perfdata perfdata, mp_perfdata_value value) {
533 perfdata.min = value;
534 perfdata.min_present = true;
535 return perfdata;
536}
537
538double mp_get_pd_value(mp_perfdata_value value) {
539 assert(value.type != PD_TYPE_NONE);
540 switch (value.type) {
541 case PD_TYPE_DOUBLE:
542 return value.pd_double;
543 case PD_TYPE_INT:
544 return (double)value.pd_int;
545 case PD_TYPE_UINT:
546 return (double)value.pd_uint;
547 default:
548 return 0; // just to make the compiler happy
549 }
550}
551
552mp_perfdata_value mp_pd_value_multiply(mp_perfdata_value left, mp_perfdata_value right) {
553 if (left.type == right.type) {
554 switch (left.type) {
555 case PD_TYPE_DOUBLE:
556 left.pd_double *= right.pd_double;
557 return left;
558 case PD_TYPE_INT:
559 left.pd_int *= right.pd_int;
560 return left;
561 case PD_TYPE_UINT:
562 left.pd_uint *= right.pd_uint;
563 return left;
564 default:
565 // what to here?
566 return left;
567 }
568 }
569
570 // Different types, oh boy, just do the lazy thing for now and switch to double
571 switch (left.type) {
572 case PD_TYPE_INT:
573 left.pd_double = (double)left.pd_int;
574 left.type = PD_TYPE_DOUBLE;
575 break;
576 case PD_TYPE_UINT:
577 left.pd_double = (double)left.pd_uint;
578 left.type = PD_TYPE_DOUBLE;
579 break;
580 }
581
582 switch (right.type) {
583 case PD_TYPE_INT:
584 right.pd_double = (double)right.pd_int;
585 right.type = PD_TYPE_DOUBLE;
586 break;
587 case PD_TYPE_UINT:
588 right.pd_double = (double)right.pd_uint;
589 right.type = PD_TYPE_DOUBLE;
590 break;
591 }
592
593 left.pd_double *= right.pd_double;
594 return left;
595}
596
597mp_range mp_range_multiply(mp_range range, mp_perfdata_value factor) {
598 if (!range.end_infinity) {
599 range.end = mp_pd_value_multiply(range.end, factor);
600 }
601 if (!range.start_infinity) {
602 range.start = mp_pd_value_multiply(range.start, factor);
603 }
604 return range;
605}