line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Mojolicious::Plugin::DirectoryQueue; |
2
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
57279
|
use Mojo::Base 'Mojolicious::Plugin'; |
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
use Mojo::JSON qw(decode_json encode_json); |
5
|
|
|
|
|
|
|
use Directory::Queue; |
6
|
|
|
|
|
|
|
use POSIX qw(chown); |
7
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
our $VERSION = '0.01'; |
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
sub register { |
12
|
|
|
|
|
|
|
my ($plugin, $app, $args) = @_; |
13
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
$args->{path} ||= '/tmp/DirQueue'; |
15
|
|
|
|
|
|
|
my $dirq = Directory::Queue->new( path => $args->{path} ); |
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
my $config = $app->config; |
18
|
|
|
|
|
|
|
if ( $config->{hypnotoad} and $config->{hypnotoad}->{user} ) { |
19
|
|
|
|
|
|
|
my ($uid,$gid) = ( getpwnam($config->{hypnotoad}->{user}) )[2,3]; |
20
|
|
|
|
|
|
|
chown $uid, $gid, $args->{path}; |
21
|
|
|
|
|
|
|
} |
22
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
$app->helper( |
24
|
|
|
|
|
|
|
enqueue => sub { |
25
|
|
|
|
|
|
|
my ($self, $args) = @_; |
26
|
|
|
|
|
|
|
$dirq->add(encode_json($args)); |
27
|
|
|
|
|
|
|
}, |
28
|
|
|
|
|
|
|
); |
29
|
|
|
|
|
|
|
|
30
|
|
|
|
|
|
|
$app->helper( |
31
|
|
|
|
|
|
|
dequeue => sub { |
32
|
|
|
|
|
|
|
for (my $name = $dirq->first(); $name; $name = $dirq->next()) { |
33
|
|
|
|
|
|
|
next unless $dirq->lock($name); |
34
|
|
|
|
|
|
|
my $data = $dirq->get($name); |
35
|
|
|
|
|
|
|
$dirq->remove($name); |
36
|
|
|
|
|
|
|
return decode_json($data) if $data; |
37
|
|
|
|
|
|
|
} |
38
|
|
|
|
|
|
|
return; |
39
|
|
|
|
|
|
|
}, |
40
|
|
|
|
|
|
|
); |
41
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
$app->helper( |
43
|
|
|
|
|
|
|
show => sub { |
44
|
|
|
|
|
|
|
my @all; |
45
|
|
|
|
|
|
|
for (my $name = $dirq->first(); $name; $name = $dirq->next()) { |
46
|
|
|
|
|
|
|
next unless $dirq->lock($name); |
47
|
|
|
|
|
|
|
my $data = $dirq->get($name); |
48
|
|
|
|
|
|
|
push @all, decode_json($data) if $data; |
49
|
|
|
|
|
|
|
$dirq->unlock($name); |
50
|
|
|
|
|
|
|
} |
51
|
|
|
|
|
|
|
return \@all; |
52
|
|
|
|
|
|
|
}, |
53
|
|
|
|
|
|
|
); |
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
$app->helper( |
56
|
|
|
|
|
|
|
count => sub { |
57
|
|
|
|
|
|
|
return $dirq->count(); |
58
|
|
|
|
|
|
|
}, |
59
|
|
|
|
|
|
|
); |
60
|
|
|
|
|
|
|
$app->helper( |
61
|
|
|
|
|
|
|
purge => sub { |
62
|
|
|
|
|
|
|
my $self = shift; |
63
|
|
|
|
|
|
|
return $dirq->purge(@_); |
64
|
|
|
|
|
|
|
}, |
65
|
|
|
|
|
|
|
); |
66
|
|
|
|
|
|
|
}; |
67
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
1; |
69
|
|
|
|
|
|
|
__END__ |