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 JSON;
use threads;
use Thread::Queue;
@@ -77,12 +78,26 @@ sub BUILD {
$self->_message_queue(Thread::Queue->new());
$self->_thread(
threads::async {
# $event = [ level, "message" ]
EVENT:
while ( my $event = $self->_message_queue->dequeue() ) {
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 {
my $self = shift;
$self->_set_exit_status();
return unless $self->level >= 5;
return $self->_log('FATAL', @_);
$self->_log('FATAL', @_);
exit $self->exit_status;
}
sub _set_exit_status {