7 use base qw/Class::Accessor/;
8 __PACKAGE__->mk_accessors( qw/
16 #use Carp qw/confess/;
17 use Data::Dump qw/dump/;
19 use File::Path qw/mkpath rmtree/;
21 use YAML::Syck qw/Dump/;
24 #use Devel::LeakTrace::Fast;
28 CWMP::Queue - implement commands queue for CPE
34 my $obj = CWMP::Queue->new({
35 id => 'CPE_serial_number',
45 my $self = $class->SUPER::new( @_ );
47 die "need id" unless $self->id;
49 warn "created ", __PACKAGE__, "(", dump( @_ ), ") object\n" if $self->debug;
51 my $dir = File::Spec->catfile( $self->dir || 'queue', $self->id );
53 if ( -e $dir && $self->clean ) {
54 rmtree $dir || die "can't remove $dir: $!";
55 warn "## clean $dir\n" if $self->debug;
59 mkpath $dir || die "can't create $dir: $!";
60 print "created new queue $dir\n";
65 if ( ! defined( $self->{dq}->{$id} ) ) {
66 $self->{dq}->{$id} = IPC::DirQueue->new({
71 warn "## created queue object for CPE $id path $dir\n" if $self->debug;
80 'CommandToDispatch', {
91 my ( $dispatch, $args ) = @_;
93 warn "## enqueue( $dispatch with ", dump( $args ), " ) for $id\n" if $self->debug;
95 $self->{dq}->{$id}->enqueue_string( Dump({ dispatch => $dispatch, args => $args }) );
100 my $job = $q->dequeue;
101 my ( $dispatch, $args ) = $job->dispatch;
102 # after dispatch is processed
112 my $job = $self->{dq}->{$id}->pickup_queued_job();
113 return unless defined $job;
115 warn "## dequeue for $id = ", dump( $job ), " )\n" if $self->debug;
117 return CWMP::Queue::Job->new({ job => $job, debug => $self->debug });
122 Accessor to C<IPC::DirQueue> object
130 return $self->{dq}->{$self->id};
133 package CWMP::Queue::Job;
135 =head1 CWMP::Queue::Job
141 use base qw/Class::Accessor/;
142 __PACKAGE__->mk_accessors( qw/
147 use YAML qw/LoadFile/;
148 use Data::Dump qw/dump/;
152 my ( $dispatch, $args ) = $job->dispatch;
158 my $path = $self->job->get_data_path || die "get_data_path?";
159 my $data = LoadFile( $path ) || die "can't read $path: $!";
160 warn "## dispatch returns ",dump($data),"\n" if $self->debug;
161 return ( $data->{dispatch}, $data->{args} );
166 Finish job and remove it from queue