diff --git a/pandora_agents/unix/ChangeLog b/pandora_agents/unix/ChangeLog index 7cb2a2ced3..83a1392196 100644 --- a/pandora_agents/unix/ChangeLog +++ b/pandora_agents/unix/ChangeLog @@ -1,3 +1,7 @@ +2010-06-08 Ramon Novoa + + * pandora_agent: Removed the need for indexes in the abstraction layer. + 2010-06-07 Ramon Novoa * pandora_agent: Added build information to the agent version. diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent index ad26e755e4..10200d446a 100755 --- a/pandora_agents/unix/pandora_agent +++ b/pandora_agents/unix/pandora_agent @@ -34,44 +34,41 @@ use constant AGENT_BUILD => '100222'; # Commands to retrieve total memory information in kB use constant TOTALMEMORY_CMDS => { - # command - linux => ['cat /proc/meminfo | grep MemTotal: | awk \'{ print $2 }\''], - solaris => ['MEM=`prtconf | grep Memory | awk \'{print $3}\'` bash -c \'echo $(( 1024 * $MEM ))\''], - hpux => ['swapinfo -t | grep memory | awk \'{print $2}\''] + linux => 'cat /proc/meminfo | grep MemTotal: | awk \'{ print $2 }\'', + solaris => 'MEM=`prtconf | grep Memory | awk \'{print $3}\'` bash -c \'echo $(( 1024 * $MEM ))\'', + hpux => 'swapinfo -t | grep memory | awk \'{print $2}\'' }; # Commands to retrieve free memory information in kB use constant FREEMEMORY_CMDS => { - # command - linux => ['cat /proc/meminfo | grep MemFree: | awk \'{ print $2 }\''], - solaris => ['vmstat 1 2 | tail -1 | awk \'{ print $5 }\''], - hpux => ['swapinfo -t | grep memory | awk \'{print $4}\''] + linux => 'cat /proc/meminfo | grep MemFree: | awk \'{ print $2 }\'', + solaris => 'vmstat 1 2 | tail -1 | awk \'{ print $5 }\'', + hpux => 'swapinfo -t | grep memory | awk \'{print $4}\'' }; # Commands to retrieve cpu information use constant CPUUSAGE_CMDS => { - # command - linux => ['vmstat 1 2 | tail -1 | awk \'{ print $13 }\''], - solaris => ['vmstat 1 2 | tail -1 | awk \'{ print $21 }\''], - hpux => ['vmstat 1 2 | tail -1 | awk \'{ print $16 }\''] + linux => 'vmstat 1 2 | tail -1 | awk \'{ print $13 }\'', + solaris => 'vmstat 1 2 | tail -1 | awk \'{ print $21 }\'', + hpux => 'vmstat 1 2 | tail -1 | awk \'{ print $16 }\'' }; # Commands to retrieve process information use constant PROC_CMDS => { - # command, command name index, cpu usage index, memory usage index - linux => ['ps aux', 10, 2, 5], - solaris => ['prstat 1 1 | awk -F/ \'{print $1}\' | sed \'s/% / /g\' | sed \'s/K / /g\'', 10, 9, 3], - hpux => ['ps -elf', 15, -1, 9], - aix => ['ps aux', 10, 2, 5], + # cpu usage, memory usage, command name + linux => 'ps aux | awk \'NR > 1 {ps = ""; for (i = 11; i <= NF; ++i) {ps = (ps " " $i) }; print $3, $6, ps}\'', + solaris => 'prstat 1 1 | awk \'NR > 1 {split ($10, ps, "/"); cpu = substr ($9, 1, length ($9) - 1); mem = substr ($3, 1, length ($3) - 1); print cpu, mem, ps[1]}\'', + hpux => 'ps -elf | awk \'NR > 1 {ps = ""; for (i = 15; i <= NF; ++i) {ps = (ps " " $i) }; print 0, $10, ps}\'', + aix => 'ps aux | awk \'NR > 1 {print $3, $6, $11}\'' }; # Commands to retrieve partition information in kB use constant PART_CMDS => { - # command, mount point index, total index, available index - linux => ['df', 5, 1, 3], - solaris => ['df -k', 5, 1, 3], - hpux => ['df -P', 5, 1, 3], - aix => ['df -kP', 5, 1, 3] + # total, available, mount point + linux => 'df | awk \'NR > 1 {print $2, $4, $6}\'', + solaris => 'df -k | awk \'NR > 1 {print $2, $4, $6}\'', + hpux => 'df -P | awk \'NR > 1 {print $2, $4, $6}\'', + aix => 'df -kP | awk \'NR > 1 {print $2, $4, $6}\'' }; # OS and OS version @@ -284,6 +281,12 @@ sub read_config (;$) { # Plugin } elsif ($line =~ /^\s*module_plugin\s+(.+)$/) { push (@Plugins, $1); + # Module proc command redefinition + } elsif ($line =~ /^\s*module_proc_cmd\s+(.+)$/) { + PROC_CMDS->{$OS} = $1; + # Module freedisk command redefinition + } elsif ($line =~ /^\s*module_freedisk_cmd\s+(.+)$/) { + PART_CMDS->{$OS} = $1; # Configuration token } elsif ($line =~ /^\s*(\S+)\s+(.*)$/) { @@ -625,7 +628,7 @@ sub load_procs () { return if ($Procs{'__utimestamp__'} > ($utimestamp - $Conf{'interval'})); # Get process information - my ($cmd, $cmd_idx, $cpu_idx, $mem_idx) = @{PROC_CMDS->{$OS}}; + my $cmd = PROC_CMDS->{$OS}; my @procs = `$cmd`; return undef unless ($? eq 0); @@ -637,17 +640,19 @@ sub load_procs () { chomp ($proc); my @proc_info = split (/\s+/, $proc); - next unless defined ($proc_info[$cmd_idx]); + next unless ($#proc_info >= 2); + + # Process command + my $proc_cmd = join (' ', @proc_info[2..$#proc_info]); # Process command - my $proc_cmd = join (' ', @proc_info[$cmd_idx..$#proc_info]); $Procs{$proc_cmd} = (); # Process CPU usage - $Procs{$proc_cmd}{'cpu'} = $proc_info[$cpu_idx] if defined ($proc_info[$cpu_idx]); + $Procs{$proc_cmd}{'cpu'} = $proc_info[0]; # Process virtual size - $Procs{$proc_cmd}{'size'} = $proc_info[$mem_idx] if defined ($proc_info[$mem_idx]); + $Procs{$proc_cmd}{'size'} = $proc_info[1]; } $Procs{'__utimestamp__'} = $utimestamp; @@ -666,28 +671,27 @@ sub load_parts () { return if ($Parts{'__utimestamp__'} > ($utimestamp - $Conf{'interval'})); # Get partition information - my ($cmd, $mount_idx, $total_idx, $avail_idx) = @{PART_CMDS->{$OS}}; + my $cmd = PART_CMDS->{$OS}; my @parts = `$cmd`; return undef unless ($? eq 0); - # Discard the header - shift (@parts); - # Parse partition information foreach my $part (@parts) { chomp ($part); my @part_info = split (/\s+/, $part); - next unless defined ($part_info[$mount_idx]); + next unless ($#part_info >= 2); + + my $part = join (' ', @part_info[2..$#part_info]); # Mount point - $Parts{$part_info[$mount_idx]} = (); + $Parts{$part} = (); # Total space in kB - $Parts{$part_info[$mount_idx]}{'total'} = $part_info[$total_idx] if defined ($part_info[$total_idx]); + $Parts{$part}{'total'} = $part_info[0]; # Available space in kB - $Parts{$part_info[$mount_idx]}{'avail'} = $part_info[$avail_idx] if defined ($part_info[$avail_idx]); + $Parts{$part}{'avail'} = $part_info[1]; } $Parts{'__utimestamp__'} = $utimestamp; @@ -802,7 +806,7 @@ sub module_cpuusage ($) { return unless defined (CPUUSAGE_CMDS->{$OS}); # Get CPU usage - my ($cmd) = @{CPUUSAGE_CMDS->{$OS}}; + my $cmd = CPUUSAGE_CMDS->{$OS}; my @data = `$cmd 2> /dev/null`; # Something went wrong or no data @@ -821,7 +825,7 @@ sub module_freememory ($) { return () unless defined (FREEMEMORY_CMDS->{$OS}); # Get available memory - my ($cmd) = @{FREEMEMORY_CMDS->{$OS}}; + my $cmd = FREEMEMORY_CMDS->{$OS}; my @data = `$cmd 2> /dev/null`; # Something went wrong or no data @@ -840,7 +844,7 @@ sub module_freepercentmemory ($) { return unless defined (TOTALMEMORY_CMDS->{$OS}); # Get CPU usage - my ($cmd) = @{TOTALMEMORY_CMDS->{$OS}}; + my $cmd = TOTALMEMORY_CMDS->{$OS}; my @data = `$cmd 2> /dev/null`; # Something went wrong or no data