File Coverage

blib/lib/Log/Dispatch/ZMQ.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package Log::Dispatch::ZMQ;
2              
3 1     1   22291 use strict;
  1         3  
  1         38  
4 1     1   5 use warnings;
  1         2  
  1         42  
5              
6             our $VERSION = '0.02';
7              
8 1     1   847 use parent 'Log::Dispatch::Output';
  1         315  
  1         4  
9 1     1   20542 use ZMQ ();
  0            
  0            
10             use ZMQ::Constants ":all";
11             use Carp qw(croak);
12              
13             sub new {
14             my ( $class, %params ) = @_;
15              
16             my $sock_type = do {
17             no strict 'refs';
18             &{ "ZMQ::Constants::$params{zmq_sock_type}" };
19             };
20            
21             unless ( defined $sock_type ) {
22             croak "ZMQ::Constants doesn't export '$params{zmq_sock_type}'";
23             }
24              
25             my $self = bless {
26             _zmq_sock_type => $sock_type,
27             _zmq_bind => $params{zmq_bind},
28             } => $class;
29              
30             $self->_basic_init(%params);
31              
32             return $self;
33             }
34              
35             my ($_zmq_sock,$_zmq_ctx);
36             sub _zmq {
37             my $self = shift;
38              
39             return $_zmq_sock if defined $_zmq_sock;
40              
41             $_zmq_ctx = ZMQ::Context->new();
42             my $_zmq_sock = $_zmq_ctx->socket($self->{_zmq_sock_type});
43             $_zmq_sock->connect($self->{_zmq_bind});
44             return $_zmq_sock;
45              
46             }
47              
48             sub _zmq_send {
49             my $self = shift;
50             if ( $ZMQ::BACKEND eq 'ZMQ::LibZMQ2' ) {
51             return $self->_zmq->send(@_);
52             }
53             elsif ( $ZMQ::BACKEND eq 'ZMQ::LibZMQ3' ) {
54             return $self->_zmq->sendmsg(@_);
55             }
56              
57             die "This module can only handle ZMQ::LibZMQ2 and ZMQ::LibZMQ3 backends";
58             }
59              
60             sub log_message {
61             my $self = shift;
62             my %params = @_;
63              
64             $self->_zmq_send($params{message});
65             return;
66             }
67              
68             =head1 NAME
69              
70             Log::Dispatch::ZMQ
71              
72             =head1 SYNOPSIS
73              
74             use Log::Dispatch;
75              
76             my $log = Log::Dispatch->new(
77             outputs => [[
78             'ZMQ',
79             zmq_sock_type => 'ZMQ_REQ',
80             zmq_bind => "tcp://127.0.0.1:8881",
81             min_level => 'info',
82             ]],
83             );
84              
85             =head1 DESCRIPTION
86              
87             Log::Dispatch plugin for ZMQ
88              
89             =head1 EXPORT
90              
91             Nothing.
92              
93             =head1 BUGS
94              
95             Please report any bugs on L
96              
97             =head1 SEE ALSO
98              
99             =over
100              
101             =item * L
102              
103             =item * L
104              
105             =item * L
106              
107             =back
108              
109             =head1 AUTHOR
110              
111             Tomasz Czepiel Etjmc@cpan.orgE
112              
113             =head1 LICENSE
114              
115             This library is free software; you can redistribute it and/or modify
116             it under the same terms as Perl itself, either Perl version 5.12.4 or,
117             at your option, any later version of Perl 5 you may have available.
118              
119             =cut
120              
121              
122             1;