App-Context
view release on metacpan or search on metacpan
lib/App/Context/POE/ClusterNode.pm view on Meta::CPAN
&App::sub_exit() if ($App::trace);
}
sub send_node_status {
&App::sub_entry if ($App::trace);
my ($self) = @_;
my $controller_host = $self->{controller_host};
my $controller_port = $self->{controller_port};
my $node_host = $self->{host};
my $node_port = $self->{port};
my $remote_server_name = "poe_${controller_host}_${controller_port}";
my $remote_session_alias = $self->{poe_session_name}; # remote is same as local
my $remote_session_state = "poe_receive_node_status";
my $sys_info = $self->get_sys_info();
my $memfree = $sys_info->{memfree} + $sys_info->{buffers} + $sys_info->{cached};
my $s_info = {
load => $sys_info->{load},
system_load => $sys_info->{load},
memfree => $memfree,
memtotal => $sys_info->{memtotal},
swapfree => $sys_info->{swapfree},
swaptotal => $sys_info->{swaptotal},
max_async_events => $self->{max_async_events}
};
if ($self->{controller_up}) {
my $kernel = $self->{poe_kernel};
$kernel->post("IKC", "post", "poe://$remote_server_name/$remote_session_alias/$remote_session_state",
[ "$node_host:$node_port", $s_info ]);
}
&App::sub_exit() if ($App::trace);
}
sub alarm_noop {
&App::sub_entry if ($App::trace);
&App::sub_exit() if ($App::trace);
return();
}
sub state {
&App::sub_entry if ($App::trace);
my ($self) = @_;
my $datetime = time2str("%Y-%m-%d %H:%M:%S", time());
my $state = "Cluster Node: Node: $self->{host}:$self->{port} procs[$self->{num_procs}/$self->{max_procs}:max] async_events[$self->{num_async_events}/$self->{max_async_events}:max]\n[$datetime]\n";
$state .= "\n";
$state .= $self->_state();
&App::sub_exit($state) if ($App::trace);
return($state);
}
sub _state {
&App::sub_entry if ($App::trace);
my ($self) = @_;
my $state = "";
$state .= $self->SUPER::_state();
&App::sub_exit($state) if ($App::trace);
return($state);
}
sub poe_cancel_async_event {
&App::sub_entry if ($App::trace);
my ( $self, $kernel, $heap, $arg0 ) = @_[ OBJECT, KERNEL, HEAP, ARG0 ];
$self->profile_start("poe_cancel_async_event") if $self->{poe_profile};
my ($runtime_event_token) = @$arg0;
$self->log({level=>3},"poe_cancel_async_event BEGIN runtime_event_token=[$runtime_event_token]\n");
### Find if running
my ($event_token);
for my $pid (keys %{$self->{running_async_event}}) {
$event_token = $self->{running_async_event}{$pid}[0]{event_token};
if ($runtime_event_token eq $event_token) {
### Kill it
if ($pid =~ /^[0-9]+$/) {
kill(9, $pid);
}
### Remove from pending
delete $self->{running_async_event}{$pid};
$self->log({level=>3},"poe_cancel_async_event FOUND RUNNING event_token=[$event_token] pid=[$pid]\n");
last;
}
}
### Find if pending
for (my $i = 0; $i < @{$self->{pending_async_events}}; $i++) {
$event_token = $self->{pending_async_events}[$i][0]{event_token};
if ($runtime_event_token eq $event_token) {
splice(@{$self->{pending_async_events}}, $i, 1);
$self->log({level=>3},"poe_cancel_async_event FOUND PENDING event_token=[$event_token]\n");
}
}
$self->log({level=>3},"poe_cancel_async_event END event_token=[$event_token]\n");
$self->profile_stop("poe_cancel_async_event") if $self->{poe_profile};
&App::sub_exit() if ($App::trace);
}
1;
( run in 0.502 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )