@@ -4273,53 +4273,91 @@ function perf_table(write, state, plugin_output, perfdata, check_command, pnp_ur
4273
4273
/* figures out where warning/critical values should go
4274
4274
* on the perfbars
4275
4275
*/
4276
- function plot_point ( value , max , size ) {
4277
- return ( Math . round ( ( Math . abs ( value ) / max * 100 ) / 100 * size ) ) ;
4276
+ function plot_point ( value , min , max , size ) {
4277
+ diff = max - min ;
4278
+ value = value - min ;
4279
+ //console.log(Math.round(value * size / diff));
4280
+ return ( Math . round ( value * size / diff ) ) ;
4278
4281
}
4279
4282
4280
4283
/* return human readable perfdata */
4281
4284
function perf_parse_data ( check_command , state , plugin_output , perfdata ) {
4282
4285
var size = 75 ;
4283
4286
var result = [ ] ;
4284
4287
var worst_graphs = { } ;
4288
+ var min = '' ;
4289
+ var max = '' ;
4285
4290
for ( var nr = 0 ; nr < perfdata . length ; nr ++ ) {
4286
4291
var d = perfdata [ nr ] ;
4287
- if ( d . max == '' && d . unit == '%' ) { d . max = 100 ; }
4288
- if ( d . max == '' && d . crit_max != '' ) { d . max = d . crit_max ; }
4289
- if ( d . max == '' && d . warn_max != '' ) { d . max = d . warn_max ; }
4290
- if ( d . val !== '' && d . max !== '' ) {
4291
- var perc = ( Math . abs ( d . val ) / ( d . max - d . min ) * 100 ) . toFixed ( 2 ) ;
4292
- if ( perc < 5 ) { perc = 5 ; }
4293
- if ( perc > 100 ) { perc = 100 ; }
4292
+
4293
+ if ( d . max !== '' ) { max = d . max ; }
4294
+ if ( d . min !== '' ) { min = d . min ; }
4295
+
4296
+ if ( max == '' && d . unit == '%' ) { max = 100 ; }
4297
+ if ( max == '' && d . crit_max != '' ) { max = d . crit_max + 0.15 * ( d . crit_max - d . crit_min ) ; }
4298
+ if ( max == '' && d . warn_max != '' ) { max = d . warn_max + 0.15 * ( d . crit_max - d . crit_min ) ; }
4299
+ if ( min == '' && d . unit == '%' ) { min = 0 ; }
4300
+ if ( min == '' && d . crit_min != '' ) { min = d . crit_min - 0.15 * ( d . crit_max - d . crit_min ) ; }
4301
+ if ( min == '' && d . warn_min != '' ) { min = d . warn_min - 0.15 * ( d . crit_max - d . crit_min ) ; }
4302
+
4303
+ if ( d . val !== '' && max !== '' ) {
4304
+ var perc = plot_point ( d . val , min , max , size ) ;
4305
+ //console.log(JSON.stringify(d));
4306
+
4294
4307
var pic = 'thermok.png' ;
4295
- if ( state == 1 ) { var pic = 'thermwarn.png' ; }
4296
- if ( state == 2 ) { var pic = 'thermcrit.png' ; }
4297
- if ( state == 4 ) { var pic = 'thermgrey.png' ; }
4298
- perc = Math . round ( perc / 100 * size ) ;
4308
+
4309
+ if ( d . crit_max && d . crit_min && d . warn_max && d . warn_min ) { /* range */
4310
+ if ( d . crit_max > d . warn_max ) { /* alert if outside range */
4311
+ if ( d . val <= d . warn_min ) { var pic = 'thermwarn.png' ; }
4312
+ if ( d . val <= d . crit_min ) { var pic = 'thermcrit.png' ; }
4313
+ if ( d . val >= d . warn_max ) { var pic = 'thermwarn.png' ; }
4314
+ if ( d . val >= d . crit_max ) { var pic = 'thermcrit.png' ; }
4315
+ }
4316
+ if ( d . crit_max < d . warn_max ) { /* alert if inside range */
4317
+ if ( d . val >= d . warn_min ) { var pic = 'thermwarn.png' ; }
4318
+ if ( d . val >= d . crit_min ) { var pic = 'thermcrit.png' ; }
4319
+ if ( d . val <= d . warn_max ) { var pic = 'thermwarn.png' ; }
4320
+ if ( d . val <= d . crit_max ) { var pic = 'thermcrit.png' ; }
4321
+ }
4322
+ }
4323
+ if ( d . crit_max && ! d . crit_min && d . warn_max && ! d . warn_min ) {
4324
+ if ( d . crit_max > d . warn_max ) { /* alert if above threshold */
4325
+ if ( d . val >= d . warn_max ) { var pic = 'thermwarn.png' ; }
4326
+ if ( d . val >= d . crit_max ) { var pic = 'thermcrit.png' ; }
4327
+ }
4328
+ if ( d . crit_max < d . warn_max ) { /* alert if below threshold */
4329
+ if ( d . val <= d . warn_max ) { var pic = 'thermwarn.png' ; }
4330
+ if ( d . val <= d . crit_max ) { var pic = 'thermcrit.png' ; }
4331
+ }
4332
+ }
4333
+
4334
+ if ( perc <= 3 ) { perc = 3 ; }
4335
+ if ( perc >= size - 3 ) { perc = size - 3 ; }
4336
+
4299
4337
var warn_perc_min = null ;
4300
- if ( d . warn_min != '' && d . warn_min > d . min ) {
4301
- warn_perc_min = plot_point ( d . warn_min , d . max , size ) ;
4338
+ if ( d . warn_min != '' && d . warn_min > min ) {
4339
+ warn_perc_min = plot_point ( d . warn_min , min , max , size ) ;
4302
4340
if ( warn_perc_min == 0 ) { warn_perc_min = null ; }
4303
4341
}
4304
4342
var crit_perc_min = null ;
4305
- if ( d . crit_min != '' && d . crit_min > d . min ) {
4306
- crit_perc_min = plot_point ( d . crit_min , d . max , size ) ;
4343
+ if ( d . crit_min != '' && d . crit_min > min ) {
4344
+ crit_perc_min = plot_point ( d . crit_min , min , max , size )
4307
4345
if ( crit_perc_min == 0 ) { crit_perc_min = null ; }
4308
4346
if ( crit_perc_min == warn_perc_min ) { warn_perc_min = null ; }
4309
4347
}
4310
4348
var warn_perc_max = null ;
4311
- if ( d . warn_max != '' && d . warn_max < d . max ) {
4312
- warn_perc_max = plot_point ( d . warn_max , d . max , size ) ;
4349
+ if ( d . warn_max != '' && d . warn_max < max ) {
4350
+ warn_perc_max = plot_point ( d . warn_max , min , max , size ) ;
4313
4351
if ( warn_perc_max == size ) { warn_perc_max = null ; }
4314
4352
}
4315
4353
var crit_perc_max = null ;
4316
- if ( d . crit_max != '' && d . crit_max < d . max ) {
4317
- crit_perc_max = plot_point ( d . crit_max , d . max , size ) ;
4354
+ if ( d . crit_max != '' && d . crit_max < max ) {
4355
+ crit_perc_max = plot_point ( d . crit_max , min , max , size )
4318
4356
if ( crit_perc_max == size ) { crit_perc_max = null ; }
4319
4357
if ( crit_perc_max == warn_perc_max ) { warn_perc_max = null ; }
4320
4358
}
4321
4359
var graph = {
4322
- title : d . key + ': ' + perf_reduce ( d . val , d . unit ) + ' of ' + perf_reduce ( d . max , d . unit ) ,
4360
+ title : d . key + ': ' + perf_reduce ( d . val , d . unit ) + ( ( d . max ) ? ' of ' + perf_reduce ( d . max , d . unit ) : '' ) ,
4323
4361
div_width : size ,
4324
4362
img_width : perc ,
4325
4363
pic : pic ,
0 commit comments