@@ -234,7 +234,7 @@ impl Command {
234234 target : & str ,
235235 version : & str ,
236236 community : & str ,
237- check_format : bool
237+ check_format : bool ,
238238 ) -> Vec < SnmpResult > {
239239 let mut collect: Vec < SnmpResult > = Vec :: new ( ) ;
240240
@@ -307,7 +307,7 @@ impl Command {
307307 community : & str ,
308308 filter_in : & Vec < String > ,
309309 filter_out : & Vec < String > ,
310- check_format : bool
310+ check_format : bool ,
311311 ) -> Result < CmdResult > {
312312 let mut collect = self . execute_snmp_collect ( target, version, community, check_format) ;
313313
@@ -333,21 +333,25 @@ impl Command {
333333 let value = & metric. value ;
334334 let parser = Parser :: new ( & collect, check_format) ;
335335 let value = parser. eval ( value) . map_err ( |e| error:: Error :: InvalidJSON {
336- message : format ! ( "Metric \" {}\" , field \" value\" : {}" , metric. name, e)
336+ message : format ! ( "Metric \" {}\" , field \" value\" : {}" , metric. name, e) ,
337337 } ) ?;
338338 let min = if let Some ( min_expr) = metric. min_expr . as_ref ( ) {
339- parser. eval ( & min_expr) . map_err ( |e| error:: Error :: InvalidJSON {
340- message : format ! ( "Metric \" {}\" , field \" min_expr\" : {}" , metric. name, e)
341- } ) ?
339+ parser
340+ . eval ( & min_expr)
341+ . map_err ( |e| error:: Error :: InvalidJSON {
342+ message : format ! ( "Metric \" {}\" , field \" min_expr\" : {}" , metric. name, e) ,
343+ } ) ?
342344 } else if let Some ( min_value) = metric. min {
343345 ExprResult :: Number ( min_value)
344346 } else {
345347 ExprResult :: Empty
346348 } ;
347349 let max = if let Some ( max_expr) = metric. max_expr . as_ref ( ) {
348- parser. eval ( & max_expr) . map_err ( |e| error:: Error :: InvalidJSON {
349- message : format ! ( "Metric \" {}\" , field \" max_expr\" : {}" , metric. name, e)
350- } ) ?
350+ parser
351+ . eval ( & max_expr)
352+ . map_err ( |e| error:: Error :: InvalidJSON {
353+ message : format ! ( "Metric \" {}\" , field \" max_expr\" : {}" , metric. name, e) ,
354+ } ) ?
351355 } else if let Some ( max_value) = metric. max {
352356 ExprResult :: Number ( max_value)
353357 } else {
@@ -362,38 +366,44 @@ impl Command {
362366 match & value {
363367 ExprResult :: Vector ( v) => {
364368 let prefix_str = match & metric. prefix {
365- Some ( prefix) => parser. eval_str ( prefix) . map_err ( |e| error:: Error :: InvalidJSON {
366- message : format ! ( "Metric \" {}\" , field \" prefix\" : {}" , metric. name, e)
367- } ) ?,
369+ Some ( prefix) => {
370+ parser
371+ . eval_str ( prefix)
372+ . map_err ( |e| error:: Error :: InvalidJSON {
373+ message : format ! (
374+ "Metric \" {}\" , field \" prefix\" : {}" ,
375+ metric. name, e
376+ ) ,
377+ } ) ?
378+ }
368379 None => ExprResult :: Empty ,
369380 } ;
370381 for ( i, item) in v. iter ( ) . enumerate ( ) {
371- let name = match & prefix_str {
372- ExprResult :: StrVector ( v) => {
373- format ! ( "{:?}#{}" , v[ i] , metric. name)
374- }
375- ExprResult :: Str ( s) => {
376- format ! ( "{}#{}" , s, metric. name)
377- }
382+ // first, compose the instance name
383+ let instance_name = match & prefix_str {
384+ ExprResult :: StrVector ( v) => v[ i] . to_string ( ) ,
385+ ExprResult :: Str ( s) => s. to_string ( ) ,
378386 ExprResult :: Empty => {
379- let res = format ! ( "{}#{}" , idx, metric . name ) ;
387+ let res = idx. to_string ( ) ;
380388 idx += 1 ;
381389 res
382390 }
383391 _ => {
384392 panic ! ( "A label must be a string" ) ;
385393 }
386394 } ;
387- if !re_in . is_empty ( ) {
388- if !re_in . iter ( ) . any ( |re| re. is_match ( & name ) ) {
389- continue ;
390- }
395+ // then apply filters exclusion and inclusion filters
396+ if !re_out . is_empty ( ) && re_out . iter ( ) . any ( |re| re. is_match ( & instance_name ) )
397+ {
398+ continue ;
391399 }
392- if !re_out . is_empty ( ) {
393- if re_out . iter ( ) . any ( |re| re. is_match ( & name ) ) {
394- continue ;
395- }
400+ if ( !re_in . is_empty ( )
401+ && !re_in . iter ( ) . any ( |re| re. is_match ( & instance_name ) ) )
402+ {
403+ continue ;
396404 }
405+ // and now concatenate to form the full perfdata
406+ let name = format ! ( "'{}#{}'" , instance_name, metric. name) ;
397407 let current_status =
398408 compute_status ( item, & metric. warning , & metric. critical ) ?;
399409 status = worst ( status, current_status) ;
@@ -422,7 +432,7 @@ impl Command {
422432 ExprResult :: Number ( s) => {
423433 let name = match & metric. prefix {
424434 Some ( prefix) => {
425- format ! ( "{:? }#{}" , prefix, metric. name)
435+ format ! ( "{}#{}" , prefix, metric. name)
426436 }
427437 None => {
428438 let res = format ! ( "{}#{}" , idx, metric. name) ;
@@ -477,9 +487,14 @@ impl Command {
477487 let value = & metric. value ;
478488 let parser = Parser :: new ( & collect, check_format) ;
479489 let max = if let Some ( max_expr) = metric. max_expr . as_ref ( ) {
480- let res = parser. eval ( & max_expr) . map_err ( |e| error:: Error :: InvalidJSON {
481- message : format ! ( "Aggregation \" {}\" , field \" max_expr\" : {}" , metric. name, e)
482- } ) ?;
490+ let res = parser
491+ . eval ( & max_expr)
492+ . map_err ( |e| error:: Error :: InvalidJSON {
493+ message : format ! (
494+ "Aggregation \" {}\" , field \" max_expr\" : {}" ,
495+ metric. name, e
496+ ) ,
497+ } ) ?;
483498 Some ( match res {
484499 ExprResult :: Number ( v) => v,
485500 ExprResult :: Vector ( v) => {
@@ -494,9 +509,14 @@ impl Command {
494509 None
495510 } ;
496511 let min = if let Some ( min_expr) = metric. min_expr . as_ref ( ) {
497- let res = parser. eval ( & min_expr) . map_err ( |e| error:: Error :: InvalidJSON {
498- message : format ! ( "Aggregation \" {}\" , field \" min_expr\" : {}" , metric. name, e)
499- } ) ?;
512+ let res = parser
513+ . eval ( & min_expr)
514+ . map_err ( |e| error:: Error :: InvalidJSON {
515+ message : format ! (
516+ "Aggregation \" {}\" , field \" min_expr\" : {}" ,
517+ metric. name, e
518+ ) ,
519+ } ) ?;
500520 Some ( match res {
501521 ExprResult :: Number ( v) => v,
502522 ExprResult :: Vector ( v) => {
@@ -511,7 +531,7 @@ impl Command {
511531 None
512532 } ;
513533 let value = parser. eval ( value) . map_err ( |e| error:: Error :: InvalidJSON {
514- message : format ! ( "Aggregation \" {}\" , field \" value\" : {}" , metric. name, e)
534+ message : format ! ( "Aggregation \" {}\" , field \" value\" : {}" , metric. name, e) ,
515535 } ) ?;
516536 match & value {
517537 ExprResult :: Vector ( v) => {
0 commit comments