%PDF- %PDF-
| Direktori : /usr/share/perl5/vendor_perl/Munin/Master/ |
| Current File : //usr/share/perl5/vendor_perl/Munin/Master/Group.pm |
package Munin::Master::Group;
use base qw(Munin::Master::GroupRepository);
# $Id$
use warnings;
use strict;
use Carp;
use Munin::Master::Host;
sub new {
my ($class, $group_name) = @_;
my $self = {
group_name => $group_name,
hosts => {},
};
return bless $self, $class;
}
sub add_attributes {
my ($self, $attributes) = @_;
my %valid_attributes = map {$_ => 1} qw(node_order local_address contacts);
croak "Invalid attributes: " . join(', ', keys %$attributes)
if grep { !$valid_attributes{$_} } keys %$attributes;
%$self = (%$self, %$attributes);
}
sub add_host {
my ($self, $host) = @_;
$self->{hosts}{$host->{host_name}} = $host;
}
sub give_attributes_to_hosts {
my ($self) = @_;
my %not_inheritable = map {$_ => 1} qw(group_name hosts node_order);
my %attributes = grep { !$not_inheritable{$_} } %$self;
map { $_->add_attributes_if_not_exists(\%attributes) } values %{$self->{hosts}};
return 1;
}
sub get_all_hosts {
my ($self) = @_;
my @hosts = ();
for my $group (values %{$self->{groups}}) {
push @hosts, $group->get_all_hosts;
}
push @hosts, values %{$self->{hosts}};
return @hosts;
}
1;
__END__
=head1 NAME
Munin::Master::Group - Holds information on host groups.
Groups can be nested.
=head1 METHODS
=over
=item B<new>
my $group = Munin::Master::Group->new($name, $parent);
Constructor. $name is the name of the group.
=item B<add_attributes>
$group->add_attributes(\%attrs);
Sets attributes %attrs for the group. Valid attributes are:
=over 4
=item node_order
Override the order of the hosts within the group.
=item local_address
The local address the update process should bind to when contacting the nodes
in this group.
=item contacts
The contacts for this group. See L<http://munin-monitoring.org/wiki/HowToContact>.
=back
An exception will be thrown if invalid attributes are provided.
(Full details here: L<http://munin-monitoring.org/wiki/munin.conf#Groupleveldirectives>.)
=item B<add_host>
$group->add_host($host);
Adds host $host to the group.
=item B<give_attributes_to_hosts>
$group->give_attributes_to_hosts();
Propagates the attributes of $group to all hosts in the group. (This does
B<not> apply to hosts belonging to sub-groups.)
=item B<get_all_hosts>
my @hosts = $group->get_all_hosts();
Returns the list of all hosts associated with this group, including those
belonging to any sub-groups.
=back
=cut
# vim: ts=4 : sw=4 : et