MYDan

 view release on metacpan or  search on metacpan

lib/MYDan/Collector/Stat.pm  view on Meta::CPAN

package MYDan::Collector::Stat;

use strict;
use warnings;
use Carp;
use POSIX;
use Module::Runtime qw(use_module);

use MYDan;
use MYDan::Collector;

use MYDan::Collector::Stat::Time;
use MYDan::Collector::Stat::Sar;
use MYDan::Collector::Stat::DF;
use MYDan::Collector::Stat::Exec;
use MYDan::Collector::Stat::Proc;
use MYDan::Collector::Stat::Call;
use MYDan::Collector::Stat::Http;
use MYDan::Collector::Stat::Port;
use MYDan::Collector::Stat::User;
use MYDan::Collector::Stat::IFace;
use MYDan::Collector::Stat::Dmesg;
use MYDan::Collector::Stat::Uptime;
use MYDan::Collector::Stat::Watch;
use MYDan::Collector::Stat::Backup;
use MYDan::Collector::Stat::Coredump;
use MYDan::Collector::Stat::Output;
use MYDan::Collector::Stat::Ping;
use MYDan::Node;

use Data::Dumper;

our $REGEX = qr/\{ ([\w:_]+) \}\{ ([^}]+) \}\{ ([^}]+) \}/x;
our $REGEY = qr/\{ ([\w:_]+) \}\< ([^>]+) \>\{ ([^}]+) \}/x;

my ( $keep, $NAME, %eval ) = ( 9, 'TEST' );
my @statcol =  ( 1 .. $keep, 'stat', 'group', 'warnning', 'info' );

my %FIXME = 
(
    PAGE  => [ 'pgpgin/s', 'kbhugfree' ],
    IO    => [ 'tps' ],
    LOAD  => [ 'runq-sz', 'proc/s', 'cswch/s' ],
    MEM   => [ 'frmpg/s', 'kbmemfree' ],
    SWAP  => [ 'kbswpfree', 'pswpin/s' ],
    NFS   => [ 'call/s', 'scall/s' ],
    SOCK  => [ 'totsck' ],
    IP    => [ 'irec/s', 'ihdrerr/s' ],
    ICMP  => [ 'imsg/s', 'ierr/s' ],
    TCP   => [ 'active/s', 'atmptf/s' ],
    UDP   => [ 'idgm/s' ],
    SOCK6 => [ 'tcp6sck' ],
    IP6   => [ 'irec6/s', 'ihdrer6/s' ],
    ICMP6 => [ 'imsg6/s', 'ierr6/s' ],
    UDP6  => [ 'idgm6/s' ],
    FILE  => [ 'dentunusd' ],
);

my %EMXIF = map{ my $t = $_; map{ $_ => $t }@{$FIXME{$t}} } keys %FIXME;

my %BASE = map{ $_ => 1 }qw( IO SWAP DF MEM IFACE UPTIME CPU LOAD );

sub new
{
    my ( $class, %self, %todo, $base ) = splice @_;

    $ENV{LANG} = 'en_US.UTF-8';

    if( my $test = $self{test} )
    {
        map{ 
            map{ map{ $todo{$_} = 1 } $_ =~ /(\{[\w:_]+\}\{[^\}]+\}\{[^\}]+\})/g;} @$_; 
            map{ map{ $todo{$_} = 1 } $_ =~ /(\{[\w:_]+\}<[^>]+>\{[^\}]+\})/g;} @$_; 
        }values %$test;
        map{ my $g = $_; map{ $eval{$_}{group} = $g }@{$test->{$g}}}keys %$test;

        map{ $base = 1 if $BASE{$_} }map{ $_ =~ /^{([^}]+)}/ }keys %todo;
    }
    else { $base = 1; }

    my ( @data, %data ) = 
        ( [ [qw(VERSION MYDan)],
            [ 'value', $MYDan::VERSION ]
          ] 
        );

    if( $base )
    {
        push @data, MYDan::Collector::Stat::Uptime->co();
        push @data, MYDan::Collector::Stat::IFace->co();
        push @data, MYDan::Collector::Stat::Dmesg->co();
        push @data, MYDan::Collector::Stat::Time->co();
        push @data, MYDan::Collector::Stat::User->co();
        push @data, MYDan::Collector::Stat::Sar->co();
        push @data, MYDan::Collector::Stat::DF->co();
        push @data, MYDan::Collector::Stat::Coredump->co();
    }

    my %test;
    map{ my $t = $_; $test{$t} = [ grep{ /^{$t}/ }keys %todo ] }
        qw( PROC EXEC CALL HTTP PORT BACKUP WATCH OUTPUT PING );



( run in 0.729 second using v1.01-cache-2.11-cpan-df04353d9ac )