root/trunk/lib/Perlbal/Plugin/Queues.pm

Revision 371, 1.6 kB (checked in by bradfitz, 4 years ago)

more "no warnings" additions

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1###########################################################################
2# simple queue length header inclusion plugin
3###########################################################################
4
5package Perlbal::Plugin::Queues;
6
7use strict;
8use warnings;
9no  warnings qw(deprecated);
10
11# called when we're being added to a service
12sub register {
13    my ($class, $svc) = @_;
14
15    # more complicated statistics
16    $svc->register_hook('Queues', 'backend_client_assigned', sub {
17        my Perlbal::BackendHTTP $obj = shift;
18        my Perlbal::HTTPHeaders $hds = $obj->{req_headers};
19        my Perlbal::Service $svc = $obj->{service};
20        return 0 unless defined $hds && defined $svc;
21
22        # determine age of oldest (first in line)
23        my $now = time;
24        my Perlbal::ClientProxy $cp = $svc->{waiting_clients}->[0];
25        my $age = defined $cp ? ($now - $cp->{last_request_time}) : 0;
26
27        # now do the age of the high priority queue
28        $cp = $svc->{waiting_clients_highpri}->[0];
29        my $hpage = defined $cp ? ($now - $cp->{last_request_time}) : 0;
30
31        # setup the queue length headers
32        $hds->header('X-Queue-Count', scalar(@{$svc->{waiting_clients}}));
33        $hds->header('X-Queue-Age', $age);
34        $hds->header('X-HP-Queue-Count', scalar(@{$svc->{waiting_clients_highpri}}));
35        $hds->header('X-HP-Queue-Age', $hpage);
36        return 0;
37    });
38
39    return 1;
40}
41
42# called when we're no longer active on a service
43sub unregister {
44    my ($class, $svc) = @_;
45
46    # clean up time
47    $svc->unregister_hooks('Queues');
48    return 1;
49}
50
51# we don't do anything in here
52sub load { return 1; }
53sub unload { return 1; }
54
551;
Note: See TracBrowser for help on using the browser.