| 72 | | $ENV{'MUNIN_CONFDIR'} = $CONFDIR; |
|---|
| 73 | | my $BINDIR = '@@BINDIR@@'; |
|---|
| 74 | | $ENV{'MUNIN_BINDIR'} = $BINDIR; |
|---|
| 75 | | my $SBINDIR = '@@SBINDIR@@'; |
|---|
| 76 | | $ENV{'MUNIN_SBINDIR'} = $SBINDIR; |
|---|
| 77 | | my $DOCDIR = '@@DOCDIR@@'; |
|---|
| 78 | | $ENV{'MUNIN_DOCDIR'} = $DOCDIR; |
|---|
| 79 | | my $LIBDIR = '@@LIBDIR@@'; # LIBDIR/plugins contains plugin.sh |
|---|
| 80 | | $ENV{'MUNIN_LIBDIR'} = $LIBDIR; |
|---|
| 81 | | my $HTMLDIR = '@@HTMLDIR@@'; |
|---|
| 82 | | $ENV{'MUNIN_HTMLDIR'} = $HTMLDIR; |
|---|
| 83 | | my $CGIDIR = '@@CGIDIR@@'; |
|---|
| 84 | | $ENV{'MUNIN_CGIDIR'} = $CGIDIR; |
|---|
| 85 | | my $DBDIR = '@@DBDIR@@'; |
|---|
| 86 | | $ENV{'MUNIN_DBDIR'} = $DBDIR; |
|---|
| 87 | | my $PLUGSTATE = '@@PLUGSTATE@@'; # Put plugin state files here! |
|---|
| 88 | | $ENV{'MUNIN_PLUGSTATE'} = $PLUGSTATE; # Put plugin state files here! |
|---|
| 89 | | my $MANDIR = '@@MANDIR@@'; |
|---|
| 90 | | $ENV{'MUNIN_MANDIR'} = $MANDIR; |
|---|
| 91 | | my $LOGDIR = '@@LOGDIR@@'; |
|---|
| 92 | | $ENV{'MUNIN_LOGDIR'} = $LOGDIR; |
|---|
| 93 | | my $STATEDIR = '@@STATEDIR@@'; # This is for .pid files |
|---|
| 94 | | $ENV{'MUNIN_STATEDIR'} = $STATEDIR; # This is for .pid files |
|---|
| 95 | | my $USER = '@@USER@@'; # User munin runs as (mostly) |
|---|
| 96 | | $ENV{'MUNIN_USER'} = $USER; # User munin runs as (mostly) |
|---|
| 97 | | my $GROUP = '@@GROUP@@'; # Group ditto |
|---|
| 98 | | $ENV{'MUNIN_GROUP'} = $GROUP; # Group ditto |
|---|
| 99 | | my $PLUGINUSER = '@@PLUGINUSER@@';# Default user for plugin running |
|---|
| 100 | | $ENV{'MUNIN_PLUGINUSER'} = $PLUGINUSER; # Default user for plugin running |
|---|
| | 62 | $ENV{'MUNIN_CONFDIR'} = $CONFDIR; |
|---|
| | 63 | my $BINDIR = '@@BINDIR@@'; |
|---|
| | 64 | $ENV{'MUNIN_BINDIR'} = $BINDIR; |
|---|
| | 65 | my $SBINDIR = '@@SBINDIR@@'; |
|---|
| | 66 | $ENV{'MUNIN_SBINDIR'} = $SBINDIR; |
|---|
| | 67 | my $DOCDIR = '@@DOCDIR@@'; |
|---|
| | 68 | $ENV{'MUNIN_DOCDIR'} = $DOCDIR; |
|---|
| | 69 | my $LIBDIR = '@@LIBDIR@@'; # LIBDIR/plugins contains plugin.sh |
|---|
| | 70 | $ENV{'MUNIN_LIBDIR'} = $LIBDIR; |
|---|
| | 71 | my $HTMLDIR = '@@HTMLDIR@@'; |
|---|
| | 72 | $ENV{'MUNIN_HTMLDIR'} = $HTMLDIR; |
|---|
| | 73 | my $CGIDIR = '@@CGIDIR@@'; |
|---|
| | 74 | $ENV{'MUNIN_CGIDIR'} = $CGIDIR; |
|---|
| | 75 | my $DBDIR = '@@DBDIR@@'; |
|---|
| | 76 | $ENV{'MUNIN_DBDIR'} = $DBDIR; |
|---|
| | 77 | my $PLUGSTATE = '@@PLUGSTATE@@'; # Put plugin state files here! |
|---|
| | 78 | $ENV{'MUNIN_PLUGSTATE'} = $PLUGSTATE; # Put plugin state files here! |
|---|
| | 79 | my $MANDIR = '@@MANDIR@@'; |
|---|
| | 80 | $ENV{'MUNIN_MANDIR'} = $MANDIR; |
|---|
| | 81 | my $LOGDIR = '@@LOGDIR@@'; |
|---|
| | 82 | $ENV{'MUNIN_LOGDIR'} = $LOGDIR; |
|---|
| | 83 | my $STATEDIR = '@@STATEDIR@@'; # This is for .pid files |
|---|
| | 84 | $ENV{'MUNIN_STATEDIR'} = $STATEDIR; # This is for .pid files |
|---|
| | 85 | my $USER = '@@USER@@'; # User munin runs as (mostly) |
|---|
| | 86 | $ENV{'MUNIN_USER'} = $USER; # User munin runs as (mostly) |
|---|
| | 87 | my $GROUP = '@@GROUP@@'; # Group ditto |
|---|
| | 88 | $ENV{'MUNIN_GROUP'} = $GROUP; # Group ditto |
|---|
| | 89 | my $PLUGINUSER = '@@PLUGINUSER@@'; # Default user for plugin running |
|---|
| | 90 | $ENV{'MUNIN_PLUGINUSER'} = $PLUGINUSER; # Default user for plugin running |
|---|
| 102 | | my $PERL = '@@PERL@@'; |
|---|
| 103 | | $ENV{'MUNIN_PERL'} = $PERL; |
|---|
| 104 | | my $PERLLIB = '@@PERLLIB@@'; |
|---|
| 105 | | $ENV{'MUNIN_PERLLIB'} = $PERLLIB; |
|---|
| 106 | | my $GOODSH = '@@GOODSH@@'; |
|---|
| 107 | | $ENV{'MUNIN_GOODSH'} = $GOODSH; |
|---|
| 108 | | my $BASH = '@@BASH@@'; |
|---|
| 109 | | $ENV{'MUNIN_BASH'} = $BASH; |
|---|
| 110 | | my $PYTHON = '@@PYTHON@@'; |
|---|
| 111 | | $ENV{'MUNIN_PYTHON'} = $PYTHON; |
|---|
| 112 | | my $OSTYPE = '@@OSTYPE@@'; |
|---|
| 113 | | $ENV{'MUNIN_OSTYPE'} = $OSTYPE; |
|---|
| 114 | | my $HOSTNAME = '@@HOSTNAME@@'; |
|---|
| 115 | | $ENV{'MUNIN_HOSTNAME'} = $HOSTNAME; |
|---|
| 116 | | my $MKTEMP = '@@MKTEMP@@'; |
|---|
| 117 | | $ENV{'MUNIN_MKTEMP'} = $MKTEMP; |
|---|
| | 92 | my $PERL = '@@PERL@@'; |
|---|
| | 93 | $ENV{'MUNIN_PERL'} = $PERL; |
|---|
| | 94 | my $PERLLIB = '@@PERLLIB@@'; |
|---|
| | 95 | $ENV{'MUNIN_PERLLIB'} = $PERLLIB; |
|---|
| | 96 | my $GOODSH = '@@GOODSH@@'; |
|---|
| | 97 | $ENV{'MUNIN_GOODSH'} = $GOODSH; |
|---|
| | 98 | my $BASH = '@@BASH@@'; |
|---|
| | 99 | $ENV{'MUNIN_BASH'} = $BASH; |
|---|
| | 100 | my $PYTHON = '@@PYTHON@@'; |
|---|
| | 101 | $ENV{'MUNIN_PYTHON'} = $PYTHON; |
|---|
| | 102 | my $OSTYPE = '@@OSTYPE@@'; |
|---|
| | 103 | $ENV{'MUNIN_OSTYPE'} = $OSTYPE; |
|---|
| | 104 | my $HOSTNAME = '@@HOSTNAME@@'; |
|---|
| | 105 | $ENV{'MUNIN_HOSTNAME'} = $HOSTNAME; |
|---|
| | 106 | my $MKTEMP = '@@MKTEMP@@'; |
|---|
| | 107 | $ENV{'MUNIN_MKTEMP'} = $MKTEMP; |
|---|
| 152 | | if (-f $lockname) { |
|---|
| 153 | | # Is the lockpid alive? |
|---|
| 154 | | |
|---|
| 155 | | # To check this is inteligent and so on. It also makes for a |
|---|
| 156 | | # nice locking racing-condition. BUT, since munin-* runs from |
|---|
| 157 | | # cron every 5 minutes this should not be a real threat. This |
|---|
| 158 | | # ream of code should complete in less than 5 minutes. |
|---|
| 159 | | |
|---|
| 160 | | open LOCK,$lockname or |
|---|
| 161 | | die "Could not open $lockname for reading: $!\n"; |
|---|
| 162 | | my $pid = <LOCK>; |
|---|
| 163 | | close(LOCK) or die "Could not close $lockname: $!\n"; |
|---|
| 164 | | if (defined($pid) and $pid =~ /^\d+$/ and kill(0,$pid)) { |
|---|
| 165 | | return 0; |
|---|
| 166 | | } |
|---|
| 167 | | &munin_removelock($lockname); |
|---|
| 168 | | &munin_createlock($lockname); |
|---|
| 169 | | } |
|---|
| | 147 | if ( -f $lockname ) { |
|---|
| | 148 | |
|---|
| | 149 | # Is the lockpid alive? |
|---|
| | 150 | # To check this is inteligent and so on. It also makes for a |
|---|
| | 151 | # nice locking racing-condition. BUT, since munin-* runs from |
|---|
| | 152 | # cron every 5 minutes this should not be a real threat. This |
|---|
| | 153 | # ream of code should complete in less than 5 minutes. |
|---|
| | 154 | open LOCK, $lockname |
|---|
| | 155 | or die "Could not open $lockname for reading: $!\n"; |
|---|
| | 156 | my $pid = <LOCK>; |
|---|
| | 157 | close(LOCK) or die "Could not close $lockname: $!\n"; |
|---|
| | 158 | if ( defined($pid) and $pid =~ /^\d+$/ and kill( 0, $pid ) ) { |
|---|
| | 159 | |
|---|
| | 160 | # Process still alive. Do not die, just return. |
|---|
| | 161 | return 0; |
|---|
| | 162 | } |
|---|
| | 163 | |
|---|
| | 164 | # Process not alive, steal lock. munin_createlock will die if failed. |
|---|
| | 165 | &munin_removelock($lockname); |
|---|
| | 166 | &munin_createlock($lockname); |
|---|
| | 167 | } ## end if ( -f $lockname ) |
|---|
| 309 | | |
|---|
| 310 | | my $conf = shift; |
|---|
| 311 | | my $field = shift; |
|---|
| 312 | | my $default = shift; |
|---|
| 313 | | my $domain = shift; |
|---|
| 314 | | my $node = shift; |
|---|
| 315 | | my $service = shift; |
|---|
| 316 | | my $plot = shift; |
|---|
| 317 | | |
|---|
| 318 | | if (defined $field) { |
|---|
| 319 | | |
|---|
| 320 | | return $conf->{domain}->{$domain}->{node}->{$node}->{client}->{$service}->{"$plot.$field"} |
|---|
| 321 | | if (defined $domain and |
|---|
| 322 | | defined $node and |
|---|
| 323 | | defined $service and |
|---|
| 324 | | defined $plot and |
|---|
| 325 | | defined $conf->{domain}->{$domain}->{node}->{$node}->{client}->{$service}->{"$plot.$field"}); |
|---|
| 326 | | |
|---|
| 327 | | return $conf->{domain}->{$domain}->{node}->{$node}->{client}->{$service}->{$field} |
|---|
| 328 | | if (defined $domain and |
|---|
| 329 | | defined $node and |
|---|
| 330 | | defined $service and |
|---|
| 331 | | defined $conf->{domain}->{$domain}->{node}->{$node}->{client}->{$service}->{$field}); |
|---|
| 332 | | |
|---|
| 333 | | return $conf->{domain}->{$domain}->{node}->{$node}->{$field} |
|---|
| 334 | | if (defined $domain and |
|---|
| 335 | | defined $node and |
|---|
| 336 | | defined $conf->{domain}->{$domain}->{node}->{$node}->{$field}); |
|---|
| 337 | | |
|---|
| 338 | | return $conf->{domain}->{$domain}->{$field} |
|---|
| 339 | | if (defined $domain and |
|---|
| 340 | | defined $conf->{domain}->{$domain}->{$field}); |
|---|
| 341 | | |
|---|
| 342 | | return $conf->{$field} |
|---|
| 343 | | if (defined $conf->{$field}); |
|---|
| 344 | | |
|---|
| 345 | | return $default; |
|---|
| 346 | | |
|---|
| | 310 | my $conf = shift; |
|---|
| | 311 | my $field = shift; |
|---|
| | 312 | my $default = shift; |
|---|
| | 313 | my $domain = shift; |
|---|
| | 314 | my $node = shift; |
|---|
| | 315 | my $service = shift; |
|---|
| | 316 | my $plot = shift; |
|---|
| | 317 | if ( defined $field ) { |
|---|
| | 318 | return $conf->{domain}->{$domain}->{node}->{$node}->{client}->{$service} |
|---|
| | 319 | ->{"$plot.$field"} |
|---|
| | 320 | if ( |
|---|
| | 321 | defined $domain |
|---|
| | 322 | and defined $node |
|---|
| | 323 | and defined $service |
|---|
| | 324 | and defined $plot |
|---|
| | 325 | and defined $conf->{domain}->{$domain}->{node}->{$node}->{client} |
|---|
| | 326 | ->{$service}->{"$plot.$field"} ); |
|---|
| | 327 | return $conf->{domain}->{$domain}->{node}->{$node}->{client}->{$service} |
|---|
| | 328 | ->{$field} |
|---|
| | 329 | if ( |
|---|
| | 330 | defined $domain |
|---|
| | 331 | and defined $node |
|---|
| | 332 | and defined $service |
|---|
| | 333 | and defined $conf->{domain}->{$domain}->{node}->{$node}->{client} |
|---|
| | 334 | ->{$service}->{$field} ); |
|---|
| | 335 | return $conf->{domain}->{$domain}->{node}->{$node}->{$field} |
|---|
| | 336 | if ( |
|---|
| | 337 | defined $domain |
|---|
| | 338 | and defined $node |
|---|
| | 339 | and defined $conf->{domain}->{$domain}->{node}->{$node}->{$field} ); |
|---|
| | 340 | return $conf->{domain}->{$domain}->{$field} |
|---|
| | 341 | if ( |
|---|
| | 342 | defined $domain |
|---|
| | 343 | and defined $conf->{domain}->{$domain}->{$field} ); |
|---|
| | 344 | return $conf->{$field} |
|---|
| | 345 | if ( defined $conf->{$field} ); |
|---|
| | 346 | return $default; |
|---|
| 403 | | |
|---|
| 404 | | foreach my $service (keys %{$snode->{client}}) { |
|---|
| 405 | | next if ((not defined $snode->{client}->{$service}->{graph_category}) |
|---|
| 406 | | and $category ne 'other'); |
|---|
| 407 | | |
|---|
| 408 | | next if ((defined $snode->{client}->{$service}->{graph_category}) and |
|---|
| 409 | | ($snode->{client}->{$service}->{graph_category} ne |
|---|
| 410 | | $category)); |
|---|
| 411 | | |
|---|
| 412 | | my $fres = &munin_service_status ($config, $limits, |
|---|
| 413 | | $domain, $node, |
|---|
| 414 | | $service, $check_draw); |
|---|
| 415 | | |
|---|
| 416 | | if (defined $fres) { |
|---|
| 417 | | if ($fres eq "critical") { |
|---|
| 418 | | $state = $fres; |
|---|
| 419 | | last; |
|---|
| 420 | | } elsif ($fres eq "warning") { |
|---|
| 421 | | $state = $fres; |
|---|
| 422 | | } |
|---|
| 423 | | } |
|---|
| 424 | | } |
|---|
| 425 | | |
|---|
| | 397 | foreach my $service ( keys %{ $snode->{client} } ) { |
|---|
| | 398 | next |
|---|
| | 399 | if ( |
|---|
| | 400 | ( not defined $snode->{client}->{$service}->{graph_category} ) |
|---|
| | 401 | and $category ne 'other' ); |
|---|
| | 402 | next |
|---|
| | 403 | if ( |
|---|
| | 404 | ( defined $snode->{client}->{$service}->{graph_category} ) |
|---|
| | 405 | and ( $snode->{client}->{$service}->{graph_category} ne $category ) |
|---|
| | 406 | ); |
|---|
| | 407 | my $fres = |
|---|
| | 408 | &munin_service_status( |
|---|
| | 409 | $config, $limits, $domain, $node, $service, |
|---|
| | 410 | $check_draw ); |
|---|
| | 411 | if ( defined $fres ) { |
|---|
| | 412 | if ( $fres eq "critical" ) { |
|---|
| | 413 | $state = $fres; |
|---|
| | 414 | last; |
|---|
| | 415 | } elsif ( $fres eq "warning" ) { |
|---|
| | 416 | $state = $fres; |
|---|
| | 417 | } |
|---|
| | 418 | } |
|---|
| | 419 | } ## end foreach my $service ( keys ... |
|---|
| 466 | | unless ((defined $config->{domain}->{$domain}->{node}->{$node}->{client}->{$service}->{"$field.warning"}) or |
|---|
| 467 | | (defined $config->{domain}->{$domain}->{node}->{$node}->{client}->{$service}->{"$field.critical"})) { |
|---|
| 468 | | return undef; |
|---|
| 469 | | } |
|---|
| 470 | | |
|---|
| 471 | | if (defined $limits->{domain}->{$domain}->{node}->{$node}->{client}->{$service}->{"$field.critical"} and |
|---|
| 472 | | (!defined $check_draw or !$check_draw or |
|---|
| 473 | | &munin_draw_field ($config->{domain}->{$domain}->{node}->{$node}, $service, $field))) |
|---|
| 474 | | { |
|---|
| 475 | | return "critical"; |
|---|
| 476 | | } |
|---|
| 477 | | elsif (defined $limits->{domain}->{$domain}->{node}->{$node}->{client}->{$service}->{"$field.warning"} and (!defined $check_draw or !$check_draw or |
|---|
| 478 | | &munin_draw_field ($config->{domain}->{$domain}->{node}->{$node}, $service, $field))) |
|---|
| 479 | | { |
|---|
| 480 | | return "warning"; |
|---|
| 481 | | } |
|---|
| 482 | | else |
|---|
| 483 | | { |
|---|
| 484 | | return "ok"; |
|---|
| 485 | | } |
|---|
| 486 | | } |
|---|
| 487 | | |
|---|
| 488 | | sub munin_graph_column_headers |
|---|
| 489 | | { |
|---|
| 490 | | my ($config, $domain, $node, $serv) = @_; |
|---|
| 491 | | my $ret = 0; |
|---|
| | 461 | unless ( |
|---|
| | 462 | ( |
|---|
| | 463 | defined $config->{domain}->{$domain}->{node}->{$node}->{client} |
|---|
| | 464 | ->{$service}->{"$field.warning"} |
|---|
| | 465 | ) |
|---|
| | 466 | or ( |
|---|
| | 467 | defined $config->{domain}->{$domain}->{node}->{$node}->{client} |
|---|
| | 468 | ->{$service}->{"$field.critical"} ) |
|---|
| | 469 | ) |
|---|
| | 470 | { |
|---|
| | 471 | return undef; |
|---|
| | 472 | } |
|---|
| | 473 | if ( |
|---|
| | 474 | defined $limits->{domain}->{$domain}->{node}->{$node}->{client} |
|---|
| | 475 | ->{$service}->{"$field.critical"} |
|---|
| | 476 | and ( |
|---|
| | 477 | !defined $check_draw |
|---|
| | 478 | or !$check_draw |
|---|
| | 479 | or &munin_draw_field( |
|---|
| | 480 | $config->{domain}->{$domain}->{node}->{$node}, |
|---|
| | 481 | $service, $field |
|---|
| | 482 | ) |
|---|
| | 483 | ) |
|---|
| | 484 | ) |
|---|
| | 485 | { |
|---|
| | 486 | return "critical"; |
|---|
| | 487 | } |
|---|
| | 488 | elsif ( |
|---|
| | 489 | defined $limits->{domain}->{$domain}->{node}->{$node}->{client} |
|---|
| | 490 | ->{$service}->{"$field.warning"} |
|---|
| | 491 | and ( |
|---|
| | 492 | !defined $check_draw |
|---|
| | 493 | or !$check_draw |
|---|
| | 494 | or &munin_draw_field( |
|---|
| | 495 | $config->{domain}->{$domain}->{node}->{$node}, |
|---|
| | 496 | $service, $field |
|---|
| | 497 | ) |
|---|
| | 498 | ) |
|---|
| | 499 | ) |
|---|
| | 500 | { |
|---|
| | 501 | return "warning"; |
|---|
| | 502 | } else { |
|---|
| | 503 | return "ok"; |
|---|
| | 504 | } |
|---|
| | 505 | } ## end sub munin_field_status |
|---|
| | 506 | |
|---|
| | 507 | sub munin_graph_column_headers { |
|---|
| | 508 | my ( $config, $domain, $node, $serv ) = @_; |
|---|
| | 509 | my $ret = 0; |
|---|
| 493 | | |
|---|
| 494 | | foreach my $field (keys %{$config->{domain}->{$domain}->{node}->{$node}->{client}->{$serv}}) |
|---|
| 495 | | { |
|---|
| 496 | | if ($field =~ /^([^\.]+)\.negative$/ and munin_draw_field ($config->{domain}->{$domain}->{node}->{$node}, $serv, $1)) |
|---|
| 497 | | { |
|---|
| 498 | | return 1; |
|---|
| 499 | | } |
|---|
| 500 | | elsif ($field =~ /^([^\.]+)\.label$/ and munin_draw_field ($config->{domain}->{$domain}->{node}->{$node}, $serv, $1)) |
|---|
| 501 | | { |
|---|
| 502 | | push @fields, $1; |
|---|
| 503 | | } |
|---|
| 504 | | } |
|---|
| 505 | | |
|---|
| 506 | | return 1 if (munin_get_max_label_length ($config->{'domain'}->{$domain}->{'node'}->{$node}, $config, $domain, $node, $serv, \@fields) > 20); |
|---|
| 507 | | |
|---|
| | 511 | foreach my $field ( |
|---|
| | 512 | keys |
|---|
| | 513 | %{ $config->{domain}->{$domain}->{node}->{$node}->{client}->{$serv} } ) |
|---|
| | 514 | { |
|---|
| | 515 | if ( |
|---|
| | 516 | $field =~ /^([^\.]+)\.negative$/ |
|---|
| | 517 | and munin_draw_field( |
|---|
| | 518 | $config->{domain}->{$domain}->{node}->{$node}, |
|---|
| | 519 | $serv, $1 |
|---|
| | 520 | ) |
|---|
| | 521 | ) |
|---|
| | 522 | { |
|---|
| | 523 | return 1; |
|---|
| | 524 | } |
|---|
| | 525 | elsif ( |
|---|
| | 526 | $field =~ /^([^\.]+)\.label$/ |
|---|
| | 527 | and munin_draw_field( |
|---|
| | 528 | $config->{domain}->{$domain}->{node}->{$node}, |
|---|
| | 529 | $serv, $1 |
|---|
| | 530 | ) |
|---|
| | 531 | ) |
|---|
| | 532 | { |
|---|
| | 533 | push @fields, $1; |
|---|
| | 534 | } |
|---|
| | 535 | } ## end foreach my $field ( keys %{... |
|---|
| | 536 | return 1 |
|---|
| | 537 | if ( |
|---|
| | 538 | munin_get_max_label_length( |
|---|
| | 539 | $config->{'domain'}->{$domain}->{'node'}->{$node}, |
|---|
| | 540 | $config, $domain, $node, $serv, \@fields |
|---|
| | 541 | ) > 20 |
|---|
| | 542 | ); |
|---|
| 522 | | my $path = undef; |
|---|
| 523 | | (my $f = $field) =~ s/=.+//; |
|---|
| 524 | | next if (exists $node->{client}->{$service}->{$f.".process"} and |
|---|
| 525 | | $node->{client}->{$service}->{$f.".process"} ne "yes"); |
|---|
| 526 | | next if (exists $node->{client}->{$service}->{$f.".skipdraw"}); |
|---|
| 527 | | next unless (!exists $node->{client}->{$service}->{$f.".graph"} or |
|---|
| 528 | | $node->{client}->{$service}->{$f.".graph"} eq "yes"); |
|---|
| 529 | | if ($result < length ($node->{client}->{$service}->{$f.".label"} || $f)) { |
|---|
| 530 | | $result = length ($node->{client}->{$service}->{$f.".label"} || $f); |
|---|
| 531 | | } |
|---|
| 532 | | if (exists $node->{client}->{$service}->{graph_total} and |
|---|
| 533 | | length $node->{client}->{$service}->{graph_total} > $result) |
|---|
| 534 | | { |
|---|
| 535 | | $result = length $node->{client}->{$service}->{graph_total}; |
|---|
| 536 | | } |
|---|
| 537 | | } |
|---|
| | 555 | my $path = undef; |
|---|
| | 556 | ( my $f = $field ) =~ s/=.+//; |
|---|
| | 557 | next |
|---|
| | 558 | if ( |
|---|
| | 559 | exists $node->{client}->{$service}->{ $f . ".process" } |
|---|
| | 560 | and $node->{client}->{$service}->{ $f . ".process" } ne "yes" ); |
|---|
| | 561 | next if ( exists $node->{client}->{$service}->{ $f . ".skipdraw" } ); |
|---|
| | 562 | next |
|---|
| | 563 | unless ( |
|---|
| | 564 | !exists $node->{client}->{$service}->{ $f . ".graph" } |
|---|
| | 565 | or $node->{client}->{$service}->{ $f . ".graph" } eq "yes" ); |
|---|
| | 566 | if ($result < |
|---|
| | 567 | length( $node->{client}->{$service}->{ $f . ".label" } || $f ) ) |
|---|
| | 568 | { |
|---|
| | 569 | $result = |
|---|
| | 570 | length( $node->{client}->{$service}->{ $f . ".label" } || $f ); |
|---|
| | 571 | } |
|---|
| | 572 | if (exists $node->{client}->{$service}->{graph_total} |
|---|
| | 573 | and length $node->{client}->{$service}->{graph_total} > $result ) |
|---|
| | 574 | { |
|---|
| | 575 | $result = length $node->{client}->{$service}->{graph_total}; |
|---|
| | 576 | } |
|---|
| | 577 | } ## end for my $field (@$order) |
|---|
| 549 | | |
|---|
| 550 | | if ($node->{client}->{$service}->{graph_sources}) |
|---|
| 551 | | { |
|---|
| 552 | | foreach my $gs (split /\s+/, $node->{client}->{$service}->{'graph_sources'}) |
|---|
| 553 | | { |
|---|
| 554 | | push (@$result, "-".$gs); |
|---|
| 555 | | } |
|---|
| 556 | | } |
|---|
| 557 | | if ($node->{client}->{$service}->{graph_order}) |
|---|
| 558 | | { |
|---|
| 559 | | push (@$result, split /\s+/, $node->{client}->{$service}->{'graph_order'}); |
|---|
| 560 | | } |
|---|
| 561 | | |
|---|
| 562 | | for my $key (keys %{$node->{client}->{$service}}) |
|---|
| 563 | | { |
|---|
| 564 | | my ($client,$type)=""; |
|---|
| 565 | | ($client,$type) = split /\./,$key; |
|---|
| 566 | | if (defined $type and $type eq "label") |
|---|
| 567 | | { |
|---|
| 568 | | push @$result,$client if !grep /^\Q$client\E(?:=|$)/, @$result;; |
|---|
| 569 | | } |
|---|
| 570 | | } |
|---|
| 571 | | |
|---|
| | 588 | if ( $node->{client}->{$service}->{graph_sources} ) { |
|---|
| | 589 | foreach |
|---|
| | 590 | my $gs ( split /\s+/, $node->{client}->{$service}->{'graph_sources'} ) |
|---|
| | 591 | { |
|---|
| | 592 | push( @$result, "-" . $gs ); |
|---|
| | 593 | } |
|---|
| | 594 | } |
|---|
| | 595 | if ( $node->{client}->{$service}->{graph_order} ) { |
|---|
| | 596 | push( |
|---|
| | 597 | @$result, |
|---|
| | 598 | split /\s+/, $node->{client}->{$service}->{'graph_order'} ); |
|---|
| | 599 | } |
|---|
| | 600 | for my $key ( keys %{ $node->{client}->{$service} } ) { |
|---|
| | 601 | my ( $client, $type ) = ""; |
|---|
| | 602 | ( $client, $type ) = split /\./, $key; |
|---|
| | 603 | if ( defined $type and $type eq "label" ) { |
|---|
| | 604 | push @$result, $client if !grep /^\Q$client\E(?:=|$)/, @$result; |
|---|
| | 605 | } |
|---|
| | 606 | } |
|---|
| 584 | | |
|---|
| 585 | | if ($node->{client}->{$service}->{$field.".filename"}) |
|---|
| 586 | | { |
|---|
| 587 | | $result = $node->{client}->{$service}->{$field.".filename"}; |
|---|
| 588 | | } |
|---|
| 589 | | elsif ($path) |
|---|
| 590 | | { |
|---|
| 591 | | if (!defined ($node->{client}->{$service}->{$field.".label"})) |
|---|
| 592 | | { |
|---|
| 593 | | print "DEBUG: Setting label: $field\n" if $DEBUG; |
|---|
| 594 | | $node->{client}->{$service}->{$field.".label"} = $field; |
|---|
| 595 | | } |
|---|
| 596 | | |
|---|
| 597 | | if ($path =~ /^\s*([^:;]+)[:;]([^:]+):([^:\.]+)[:\.]([^:\.]+)\s*$/) |
|---|
| 598 | | { |
|---|
| 599 | | $result = munin_get_filename ($config, $1, $2, $3, $4); |
|---|
| 600 | | print "\nDEBUG1: Expanding $path...\n" if $DEBUG; |
|---|
| 601 | | if (! defined $node->{client}->{$service}->{$field."label"}) |
|---|
| 602 | | { |
|---|
| 603 | | for my $f (@copy_fields) |
|---|
| 604 | | { |
|---|
| 605 | | if (not exists $node->{client}->{$service}->{"$field.$f"} and |
|---|
| 606 | | exists $config->{'domain'}->{$1}->{'node'}->{$2}->{'client'}->{$3}->{"$4.$f"}) |
|---|
| 607 | | { |
|---|
| 608 | | $node->{client}->{$service}->{"$field.$f"} = $config->{'domain'}->{$1}->{'node'}->{$2}->{'client'}->{$3}->{"$4.$f"}; |
|---|
| 609 | | } |
|---|
| 610 | | } |
|---|
| 611 | | } |
|---|
| 612 | | } |
|---|
| 613 | | elsif ($path =~ /^\s*([^:]+):([^:\.]+)[:\.]([^:\.]+)\s*$/) |
|---|
| 614 | | { |
|---|
| 615 | | print "\nDEBUG2: Expanding $path...\n" if $DEBUG; |
|---|
| 616 | | $result = munin_get_filename ($config, $domain, $1, $2, $3); |
|---|
| 617 | | for my $f (@copy_fields) |
|---|
| 618 | | { |
|---|
| 619 | | if (not exists $node->{client}->{$service}->{"$field.$f"} and |
|---|
| 620 | | exists $config->{'domain'}->{$domain}->{'node'}->{$1}->{'client'}->{$2}->{"$3.$f"}) |
|---|
| 621 | | { |
|---|
| 622 | | print "DEBUG: Copying $f...\n" if $DEBUG; |
|---|
| 623 | | $node->{client}->{$service}->{"$field.$f"} = $config->{'domain'}->{$domain}->{'node'}->{$1}->{'client'}->{$2}->{"$3.$f"}; |
|---|
| 624 | | } |
|---|
| 625 | | } |
|---|
| 626 | | } |
|---|
| 627 | | elsif ($path =~ /^\s*([^:\.]+)[:\.]([^:\.]+)\s*$/) |
|---|
| 628 | | { |
|---|
| 629 | | print "\nDEBUG3: Expanding $path...\n" if $DEBUG; |
|---|
| 630 | | $result = munin_get_filename ($config, $domain, $name, $1, $2); |
|---|
| 631 | | for my $f (@copy_fields) |
|---|
| 632 | | { |
|---|
| 633 | | if (not exists $node->{client}->{$service}->{"$field.$f"} and |
|---|
| 634 | | exists $node->{client}->{$1}->{"$2.$f"}) |
|---|
| 635 | | { |
|---|
| 636 | | $node->{client}->{$service}->{"$field.$f"} = $node->{client}->{$1}->{"$2.$f"}; |
|---|
| 637 | | } |
|---|
| 638 | | } |
|---|
| 639 | | } |
|---|
| 640 | | elsif ($path =~ /^\s*([^:\.]+)\s*$/) |
|---|
| 641 | | { |
|---|
| 642 | | print "\nDEBUG4: Expanding $path...\n" if $DEBUG; |
|---|
| 643 | | $result = munin_get_filename ($config, $domain, $name, $service, $1); |
|---|
| 644 | | for my $f (@copy_fields) |
|---|
| 645 | | { |
|---|
| 646 | | if (not exists $node->{client}->{$service}->{"$field.$f"} and |
|---|
| 647 | | exists $node->{client}->{$service}->{"$1.$f"}) |
|---|
| 648 | | { |
|---|
| 649 | | $node->{client}->{$service}->{"$field.$f"} = $node->{client}->{$service}->{"$1.$f"}; |
|---|
| 650 | | } |
|---|
| 651 | | } |
|---|
| 652 | | } |
|---|
| 653 | | } |
|---|
| 654 | | else |
|---|
| 655 | | { |
|---|
| 656 | | print "\nDEBUG5: Doing path...\n" if $DEBUG; |
|---|
| 657 | | $result = munin_get_filename($config, $domain,$name,$service,$field); |
|---|
| | 619 | if ( $node->{client}->{$service}->{ $field . ".filename" } ) { |
|---|
| | 620 | $result = $node->{client}->{$service}->{ $field . ".filename" }; |
|---|
| | 621 | } elsif ($path) { |
|---|
| | 622 | if ( !defined( $node->{client}->{$service}->{ $field . ".label" } ) ) { |
|---|
| | 623 | print "DEBUG: Setting label: $field\n" if $DEBUG; |
|---|
| | 624 | $node->{client}->{$service}->{ $field . ".label" } = $field; |
|---|
| | 625 | } |
|---|
| | 626 | if ( $path =~ /^\s*([^:;]+)[:;]([^:]+):([^:\.]+)[:\.]([^:\.]+)\s*$/ ) { |
|---|
| | 627 | $result = munin_get_filename( $config, $1, $2, $3, $4 ); |
|---|
| | 628 | print "\nDEBUG1: Expanding $path...\n" if $DEBUG; |
|---|
| | 629 | if ( !defined $node->{client}->{$service}->{ $field . "label" } ) { |
|---|
| | 630 | for my $f (@copy_fields) { |
|---|
| | 631 | if (not exists $node->{client}->{$service}->{"$field.$f"} |
|---|
| | 632 | and exists $config->{'domain'}->{$1}->{'node'}->{$2} |
|---|
| | 633 | ->{'client'}->{$3}->{"$4.$f"} ) |
|---|
| | 634 | { |
|---|
| | 635 | $node->{client}->{$service}->{"$field.$f"} = |
|---|
| | 636 | $config->{'domain'}->{$1}->{'node'}->{$2}->{'client'} |
|---|
| | 637 | ->{$3}->{"$4.$f"}; |
|---|
| | 638 | } |
|---|
| | 639 | } |
|---|
| | 640 | } |
|---|
| | 641 | } elsif ( $path =~ /^\s*([^:]+):([^:\.]+)[:\.]([^:\.]+)\s*$/ ) { |
|---|
| | 642 | print "\nDEBUG2: Expanding $path...\n" if $DEBUG; |
|---|
| | 643 | $result = munin_get_filename( $config, $domain, $1, $2, $3 ); |
|---|
| | 644 | for my $f (@copy_fields) { |
|---|
| | 645 | if (not exists $node->{client}->{$service}->{"$field.$f"} |
|---|
| | 646 | and exists $config->{'domain'}->{$domain}->{'node'}->{$1} |
|---|
| | 647 | ->{'client'}->{$2}->{"$3.$f"} ) |
|---|
| | 648 | { |
|---|
| | 649 | print "DEBUG: Copying $f...\n" if $DEBUG; |
|---|
| | 650 | $node->{client}->{$service}->{"$field.$f"} = |
|---|
| | 651 | $config->{'domain'}->{$domain}->{'node'}->{$1}->{'client'} |
|---|
| | 652 | ->{$2}->{"$3.$f"}; |
|---|
| | 653 | } |
|---|
| | 654 | } |
|---|
| | 655 | } elsif ( $path =~ /^\s*([^:\.]+)[:\.]([^:\.]+)\s*$/ ) { |
|---|
| | 656 | print "\nDEBUG3: Expanding $path...\n" if $DEBUG; |
|---|
| | 657 | $result = munin_get_filename( $config, $domain, $name, $1, $2 ); |
|---|
| | 658 | for my $f (@copy_fields) { |
|---|
| | 659 | if (not exists $node->{client}->{$service}->{"$field.$f"} |
|---|
| | 660 | and exists $node->{client}->{$1}->{"$2.$f"} ) |
|---|
| | 661 | { |
|---|
| | 662 | $node->{client}->{$service}->{"$field.$f"} = |
|---|
| | 663 | $node->{client}->{$1}->{"$2.$f"}; |
|---|
| | 664 | } |
|---|
| | 665 | } |
|---|
| | 666 | } elsif ( $path =~ /^\s*([^:\.]+)\s*$/ ) { |
|---|
| | 667 | print "\nDEBUG4: Expanding $path...\n" if $DEBUG; |
|---|
| | 668 | $result = |
|---|
| | 669 | munin_get_filename( $config, $domain, $name, $service, $1 ); |
|---|
| | 670 | for my $f (@copy_fields) { |
|---|
| | 671 | if (not exists $node->{client}->{$service}->{"$field.$f"} |
|---|
| | 672 | and exists $node->{client}->{$service}->{"$1.$f"} ) |
|---|
| | 673 | { |
|---|
| | 674 | $node->{client}->{$service}->{"$field.$f"} = |
|---|
| | 675 | $node->{client}->{$service}->{"$1.$f"}; |
|---|
| | 676 | } |
|---|
| | 677 | } |
|---|
| | 678 | } |
|---|
| | 679 | } else { |
|---|
| | 680 | print "\nDEBUG5: Doing path...\n" if $DEBUG; |
|---|
| | 681 | $result = |
|---|
| | 682 | munin_get_filename( $config, $domain, $name, $service, $field ); |
|---|