########################################################################### # simple queue length header inclusion plugin ########################################################################### package Perlbal::Plugin::Queues; use strict; use warnings; # called when we're being added to a service sub register { my ($class, $svc) = @_; # more complicated statistics $svc->register_hook('Queues', 'backend_client_assigned', sub { my Perlbal::BackendHTTP $obj = shift; my Perlbal::HTTPHeaders $hds = $obj->{req_headers}; my Perlbal::Service $svc = $obj->{service}; return 0 unless defined $hds && defined $svc; # determine age of oldest (first in line) my $now = time; my Perlbal::ClientProxy $cp = $svc->{waiting_clients}->[0]; my $age = defined $cp ? ($now - $cp->{last_request_time}) : 0; # now do the age of the high priority queue $cp = $svc->{waiting_clients_highpri}->[0]; my $hpage = defined $cp ? ($now - $cp->{last_request_time}) : 0; # setup the queue length headers $hds->header('X-Queue-Count', scalar(@{$svc->{waiting_clients}})); $hds->header('X-Queue-Age', $age); $hds->header('X-HP-Queue-Count', scalar(@{$svc->{waiting_clients_highpri}})); $hds->header('X-HP-Queue-Age', $hpage); return 0; }); return 1; } # called when we're no longer active on a service sub unregister { my ($class, $svc) = @_; # clean up time $svc->unregister_hooks('Queues'); return 1; } # we don't do anything in here sub load { return 1; } sub unload { return 1; } 1;