AnyEvent-Monitor-CPU

 view release on metacpan or  search on metacpan

lib/AnyEvent/Monitor/CPU.pm  view on Meta::CPAN

  croak("Parameter 'cb' must be a coderef, ") unless ref $self->{cb} eq 'CODE';

  $self->start;

  return $self;
}

sub start {
  my $self = shift;

  $self->{timer} = AnyEvent->timer(
    after    => $self->{interval},
    interval => $self->{interval},
    cb       => sub { $self->_check_cpu },
  );

  $self->{usage} = $self->{cpu}->usage;
  $self->reset_stats;  

  return;
}

sub stop       { delete $_[0]->{timer} }
sub is_running { $_[0]->{timer} }

sub usage   { return $_[0]->{usage} }
sub is_low  { return $_[0]->{state} == 1 }
sub is_high { return $_[0]->{state} == 0 }

sub reset_stats {
  my ($self) = @_;
  
  $self->{usage_sum} = 0;
  $self->{usage_count} = 0;

t/02-overhead.t  view on Meta::CPAN

use AnyEvent::Monitor::CPU;
use Proc::CPUUsage;

#
# Measure the overhead of our CPU monitor
#

## Run the test for 5 seconds
diag("Measure overhead for 5 seconds...");
my $cv    = AnyEvent->condvar;
my $timer = AnyEvent->timer(
  after => 5,
  cb    => sub {
    $cv->send;
  },
);

## Start a monitor
my $m = AnyEvent::Monitor::CPU->new(
  { cb => sub { }
  }

t/author-simple.t  view on Meta::CPAN

use AnyEvent::Monitor::CPU qw( monitor_cpu );

#
# This test will steadly increase the CPU load until the watcher triggers,
# and then steadly decrease it until it triggers again
#

## the load generator
my $iters          = 50_000;
my $incr           = 25_000;
my $load_gen_timer = AnyEvent->timer(
  after    => .5,
  interval => .1,
  cb       => sub {
    note("  ... generating $iters count of load") if $ENV{AUTHOR_TESTING};
    my $i = $iters;
    my $a = 0;
    while ($i--) {
      $a += $i * $incr / $iters;
    }
  },
);

## the load modifier
my $direction      = 1;
my $load_mod_timer = AnyEvent->timer(
  after    => 1,
  interval => .2,
  cb       => sub {
    my $delta = $direction * $incr;
    $iters += $delta;
    $iters = 0 if $iters < 0;
    note("  !!! Delta is $delta, iters now $iters") if $ENV{AUTHOR_TESTING};
  },
);

t/author-simple.t  view on Meta::CPAN

  my ($name, $params) = @$tc;
  my $high_lim = $params->{high};
  my $low_lim  = $params->{low};
  my $cycles   = $params->{cycles} ||= $ENV{WARM_UP_CYCLES} || 1;
  my $cv       = AnyEvent->condvar;

  diag("Starting test '$name': high => $high_lim, low => $low_lim");

  ## Make sure we stop it at some point
  my $secs = 10 * ($cycles || 1);
  my $time_limit = AnyEvent->timer(
    after => $secs,
    cb    => sub {
      $cv->send();
    }
  );

  my $mon = start_load_watcher($name, $cv, $params);
  my $stats = $mon->stats;
  ok(!$stats->{usage_count});
  ok(!$stats->{usage_sum});



( run in 1.282 second using v1.01-cache-2.11-cpan-49f99fa48dc )