Cluster-Init
view release on metacpan or search on metacpan
lib/Cluster/Init/Conf.pm view on Meta::CPAN
# read cltab process entry by tag name
sub tag
{
my $self=shift;
my $tag=shift;
$self->read_cltab;
my @raw = @{$self->{raw}};
my $raw;
for $raw (@raw)
{
next unless $raw;
next unless $raw->{tag} eq $tag;
my $proc = Cluster::Init::Process->new(%$raw);
return $proc;
}
return undef;
}
# does not set prevline
# read cltab process entries by group name
sub group
{
my $self=shift;
my $group=shift;
affirm { $group };
$self->read_cltab;
my @raw = @{$self->{raw}};
# warn dump "@raw";
my @proc;
for my $raw (@raw)
{
next unless $raw;
next unless $raw->{group} eq $group;
my $proc = Cluster::Init::Process->new(%$raw);
push @proc, $proc;
}
return @proc;
}
# get a configuration variable
sub get
{
my $self=shift;
my $var=shift;
# cltab overrides everything
$self->read_cltab;
return $self->{$var};
}
sub read_cltab
{
my $self=shift;
my $cltab = $self->{'cltab'};
unless (-f $cltab)
{
warn "file not found: $cltab\n";
$self->{msg}="file not found: $cltab\n";
$self->{ok}=1;
return $self->{ok};
}
my $mtime=(stat($cltab))[9] || die $!;
$self->{'cltab_mtime'} = 0 unless $self->{'cltab_mtime'};
return $self->{ok} unless $mtime > $self->{'cltab_mtime'};
$self->{'cltab_mtime'} = $mtime;
debug "reading cltab $cltab, PWD is $ENV{PWD}";
my @tag;
$self->{ok}=1;
$self->{raw}=[];
open(ITAB,"<$cltab") || die $!;
while(<ITAB>)
{
next if /^#/;
next if /^\s*$/;
chomp;
# deal with master config items
if (/^:::(.+?):(.+)$/)
{
my ($var,$val) = ($1,$2);
$self->{$var}=$val;
debug "$var = $val";
next;
}
# clients don't need to deal with anything past here
next unless $self->{'context'} eq 'server';
my ($group,$tag,$level,$mode,$cmd) = split(':',$_,5);
debug "$group $tag $level $mode $cmd";
if (grep /^$tag$/, @tag)
{
debug "entry has duplicate tag: $tag";
$self->{msg}="entry has duplicate tag: $tag";
$self->{ok}=0;
next;
}
push @tag, $tag;
my $raw =
{
line=>$.,
group=>$group,
tag=>$tag,
level=>$level,
mode=>$mode,
cmd=>$cmd
};
${$self->{raw}}[$.]=$raw;
}
debug dump $self->{raw};
close ITAB;
return $self->{ok};
}
1;
( run in 0.912 second using v1.01-cache-2.11-cpan-39bf76dae61 )