FusionInventory-Agent
view release on metacpan or search on metacpan
lib/FusionInventory/Agent/Tools/Unix.pm view on Meta::CPAN
$free = $infos[3];
$type = $infos[5];
}
# Fix total for zfs under Solaris
$total = $used + $free if (!$total && ($used || $free));
# skip some virtual filesystems
next if $total !~ /^\d+$/ || $total == 0;
next if $free !~ /^\d+$/ || $free == 0;
push @filesystems, {
VOLUMN => $infos[0],
FILESYSTEM => $filesystem,
TOTAL => int($total / 1024),
FREE => int($free / 1024),
TYPE => $type
};
}
close $handle;
return wantarray ? @filesystems : \@filesystems ;
}
sub getFilesystemsTypesFromMount {
my (%params) = (
command => 'mount',
@_
);
my $handle = getFileHandle(%params);
return unless $handle;
my @types;
while (my $line = <$handle>) {
# BSD-style:
# /dev/mirror/gm0s1d on / (ufs, local, soft-updates)
if ($line =~ /^\S+ on \S+ \((\w+)/) {
push @types, $1;
next;
}
# Linux style:
# /dev/sda2 on / type ext4 (rw,noatime,errors=remount-ro)
if ($line =~ /^\S+ on \S+ type (\w+)/) {
push @types, $1;
next;
}
}
close $handle;
### raw result: @types
return
uniq
@types;
}
sub getProcesses {
my $ps = which('ps');
return -l $ps && readlink($ps) eq 'busybox' ? _getProcessesBusybox(@_) :
_getProcessesOther(@_) ;
}
sub _getProcessesBusybox {
my (%params) = (
command => 'ps',
@_
);
my $handle = getFileHandle(%params);
# skip headers
my $line = <$handle>;
my @processes;
while ($line = <$handle>) {
next unless $line =~
/^
\s* (\S+)
\s+ (\S+)
\s+ (\S+)
\s+ ...
\s+ (\S.+)
/x;
my $pid = $1;
my $user = $2;
my $vsz = $3;
my $cmd = $4;
push @processes, {
USER => $user,
PID => $pid,
VIRTUALMEMORY => $vsz,
CMD => $cmd
};
}
close $handle;
return @processes;
}
sub _getProcessesOther {
my (%params) = (
command =>
'ps -A -o user,pid,pcpu,pmem,vsz,tty,etime' . ',' .
($OSNAME eq 'solaris' ? 'comm' : 'command'),
@_
);
my $handle = getFileHandle(%params);
# skip headers
my $line = <$handle>;
#Â get the current timestamp
my $localtime = time();
my @processes;
( run in 3.119 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )