Implement Percona::Agent::Logger without logging via API yet.

This commit is contained in:
Daniel Nichter
2013-05-16 16:22:36 -07:00
parent 82af5eaef1
commit a0ba15c27e
2 changed files with 386 additions and 243 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -25,6 +25,7 @@ use English qw(-no_match_vars);
use constant PTDEBUG => $ENV{PTDEBUG} || 0; use constant PTDEBUG => $ENV{PTDEBUG} || 0;
use JSON;
use threads; use threads;
use Thread::Queue; use Thread::Queue;
@@ -77,12 +78,26 @@ sub BUILD {
$self->_message_queue(Thread::Queue->new()); $self->_message_queue(Thread::Queue->new());
$self->_thread( $self->_thread(
threads::async { threads::async {
# $event = [ level, "message" ] EVENT:
while ( my $event = $self->_message_queue->dequeue() ) { while ( my $event = $self->_message_queue->dequeue() ) {
last unless defined $event; last unless defined $event;
# TODO: POST @$event # $event = [ level, "message" ]
} my $status = {
log_level => $event->[0],
message => $event->[1],
};
eval {
$self->client->post(
link => $self->status_link,
resources => encode_json($status),
);
};
if ( my $e = $EVAL_ERROR ) {
warn "$e";
# TODO: a queue for failed messages?
} }
} # EVENT
} # threads::async
); );
} }
@@ -129,8 +144,8 @@ sub error {
sub fatal { sub fatal {
my $self = shift; my $self = shift;
$self->_set_exit_status(); $self->_set_exit_status();
return unless $self->level >= 5; $self->_log('FATAL', @_);
return $self->_log('FATAL', @_); exit $self->exit_status;
} }
sub _set_exit_status { sub _set_exit_status {