AFS-Command
view release on metacpan or search on metacpan
lib/AFS/Command/FS.pm view on Meta::CPAN
}
}
if ( $operation eq 'whereis' ) {
if ( /^File (.*) is on hosts? (.*)$/ ) {
$path->_setAttribute
(
path => $1,
hosts => [split(/\s+/,$2)],
);
delete $paths{$1};
}
}
if ( $operation eq 'storebehind' ) {
if ( /Default store asynchrony is (\d+) kbytes/ ) {
$default = $1;
next;
} elsif ( /Will store (.*?) according to default./ ) {
$path->_setAttribute
(
path => $1,
asynchrony => 'default',
);
delete $paths{$1};
@paths = grep($_ ne $1,@paths);
} elsif ( /Will store up to (\d+) kbytes of (.*?) asynchronously/ ) {
$path->_setAttribute
(
path => $2,
asynchrony => $1,
);
delete $paths{$2};
@paths = grep($_ ne $2,@paths);
}
}
if ( $operation eq 'quota' ) {
if ( /^\s*(\d{1,2})%/ ) {
$path->_setAttribute
(
path => $paths[0],
percent => $1,
);
delete $paths{$paths[0]};
shift @paths;
}
}
if ( $operation eq 'listquota' ) {
#
# This is a bit lame. We want to be lazy and split on white
# space, so we get rid of this one annoying instance.
#
s/no limit/nolimit/g;
my ($volname,$quota,$used,$percent,$partition) = split;
$quota = 0 if $quota eq "nolimit";
$percent =~ s/\D//g; # want numeric result
$partition =~ s/\D//g; # want numeric result
$path->_setAttribute
(
path => $paths[0],
volname => $volname,
quota => $quota,
used => $used,
percent => $percent,
partition => $partition,
);
delete $paths{$paths[0]};
shift @paths;
}
if ( $operation eq 'diskfree' ) {
my ($volname,$total,$used,$avail,$percent) = split;
$percent =~ s/%//g; # Don't need it -- want numeric result
$path->_setAttribute
(
path => $paths[0],
volname => $volname,
total => $total,
used => $used,
avail => $avail,
percent => $percent,
);
delete $paths{$paths[0]};
shift @paths;
}
if ( $operation eq 'examine' ) {
if ( /Volume status for vid = (\d+) named (\S+)/ ) {
$path->_setAttribute
(
path => $paths[0],
id => $1,
volname => $2,
);
#
# Looking at Transarc's code, we can safely assume we'll
# get this output in the order shown. Note we ignore the
# "Message of the day" and "Offline reason" output for
# now. Read until we hit a blank line.
#
while ( defined($_ = $self->{handle}->getline()) ) {
last if /^\s*$/;
if ( /Current disk quota is (\d+|unlimited)/ ) {
$path->_setAttribute
(
quota => $1 eq "unlimited" ? 0 : $1,
);
}
if ( /Current blocks used are (\d+)/ ) {
$path->_setAttribute( used => $1 );
}
if ( /The partition has (\d+) blocks available out of (\d+)/ ) {
$path->_setAttribute
(
avail => $1,
total => $2,
);
}
}
delete $paths{$paths[0]};
shift @paths;
}
}
}
$result->_addPath($path);
}
( run in 0.933 second using v1.01-cache-2.11-cpan-39bf76dae61 )