@@ -147,11 +147,12 @@ use constant {
147147 DEBUG_MSG_THRESHOLDS => ' found %d (limit %d); thresholds are %s (warn) %s (crit)'
148148};
149149
150- my $REGEX_PARSE_VALUES = ' ([ud]?),' .
150+ my $REGEX_PARSE_VALUES = ' ([udx]?)' .
151+ ' (?:,' .
151152 ' (?:(?:((?:0?\.)?[0-9]+|[0-9]+)(%)?|)' .
152153 ' (?:,(?:((?:0?\.)?[0-9]+|[0-9]+)(%)?|)' .
153154 ' (?:,(?:((?:0?\.)?[0-9]+|[0-9]+)(%)?|)' .
154- ' (?:,(?:((?:0?\.)?[0-9]+|[0-9]+)(%)?|))?)?)?)?' ;
155+ ' (?:,(?:((?:0?\.)?[0-9]+|[0-9]+)(%)?|))?)?)?)?)? ' ;
155156BEGIN {
156157 eval {
157158 require Monitoring::Plugin;
@@ -456,36 +457,70 @@ sub build_checks {
456457 $override
457458 );
458459
459- next unless ($override =~ / ([a-zA-Z0-9-_:.]+):$REGEX_PARSE_VALUES / );
460+ my (
461+ $override_name ,
462+ $override_state ,
463+ $override_be_warn ,
464+ $override_be_warn_unit ,
465+ $override_be_crit ,
466+ $override_be_crit_unit ,
467+ $override_limit_warn ,
468+ $override_limit_warn_unit ,
469+ $override_limit_crit ,
470+ $override_limit_crit_unit
471+ );
472+ my @matches ;
473+ if (@matches = $override =~ / ^([a-zA-Z0-9-_:.]+):${REGEX_PARSE_VALUES} $ / ) {
474+ $override_name = shift @matches ;
475+ (
476+ $override_state ,
477+ $override_be_warn ,
478+ $override_be_warn_unit ,
479+ $override_be_crit ,
480+ $override_be_crit_unit ,
481+ $override_limit_warn ,
482+ $override_limit_warn_unit ,
483+ $override_limit_crit ,
484+ $override_limit_crit_unit
485+ ) = @matches ;
486+ } else {
487+ wrap_exit(
488+ UNKNOWN,
489+ sprintf (
490+ ' Unable to parse override "%s"' ,
491+ $override
492+ )
493+ );
494+ }
460495
461- next unless exists $data {$1 };
496+ next unless exists $data {$override_name };
462497
463- if ($data {$1 }{' type' } eq TYPE_BACKEND) {
464- $checks {$1 }{' state' } = $2 if $2 and ($2 eq ' u' or $2 eq ' d' or $2 eq ' x' );
465- if (looks_like_number($3 )) {
466- $checks {$1 }{' be_warn' } = (defined ($4 ) and $4 eq ' %' ) ? $3 / 100 : $3 ;
498+ if ($data {$override_name }{' type' } eq TYPE_BACKEND) {
499+ $checks {$override_name }{' state' } = $override_state if $override_state and ($override_state eq ' u' or $override_state eq ' d' or $override_state eq ' x' );
500+ if (looks_like_number($override_be_warn )) {
501+ $checks {$override_name }{' be_warn' } = (defined ($override_be_warn_unit ) and $override_be_warn_unit eq ' %' ) ? $override_be_warn / 100 : $override_be_warn ;
467502 }
468- if (looks_like_number($5 )) {
469- $checks {$1 }{' be_crit' } = (defined ($6 ) and $$6 eq ' %' ) ? $5 / 100 : $5 ;
503+ if (looks_like_number($override_be_crit )) {
504+ $checks {$override_name }{' be_crit' } = (defined ($override_be_crit_unit ) and $override_be_crit_unit eq ' %' ) ? $override_be_crit / 100 : $override_be_crit ;
470505 }
471506 }
472507
473- if (looks_like_number($7 )) {
474- $checks {$1 }{' limit_warn' } = (defined ($8 ) and $$8 eq ' %' ) ? $7 / 100 : $7 ;
508+ if (looks_like_number($override_limit_warn )) {
509+ $checks {$override_name }{' limit_warn' } = (defined ($override_limit_warn_unit ) and $override_limit_warn_unit eq ' %' ) ? $override_limit_warn / 100 : $override_limit_warn ;
475510 }
476- if (looks_like_number($9 )) {
477- $checks {$1 }{' limit_crit' } = (defined ($10 ) and $$10 eq ' %' ) ? $9 / 100 : $9 ;
511+ if (looks_like_number($override_limit_crit )) {
512+ $checks {$override_name }{' limit_crit' } = (defined ($override_limit_crit_unit ) and $override_limit_crit_unit eq ' %' ) ? $override_limit_crit / 100 : $override_limit_crit ;
478513 }
479514
480515 _debug(
481516 ' build_checks' ,
482517 ' setting override for %s to %s,%.2f,%.2f,%.2f,%.2f' ,
483- $1 ,
484- $checks {$1 }{' state' },
485- $checks {$1 }{' be_warn' },
486- $checks {$1 }{' be_crit' },
487- $checks {$1 }{' limit_warn' },
488- $checks {$1 }{' limit_crit' },
518+ $override_name ,
519+ $checks {$override_name }{' state' },
520+ $checks {$override_name }{' be_warn' },
521+ $checks {$override_name }{' be_crit' },
522+ $checks {$override_name }{' limit_warn' },
523+ $checks {$override_name }{' limit_crit' },
489524 );
490525 }
491526
0 commit comments