> Hello,
> 
> I am trying to write a script that grabs a picture from a web cam every
> 30 second and every 30 minutes copies it to create an archive of
> pictures. To further complete things, I have two servers that this
> script needs to run on but the script only runs on one server depending
> on the status it reads from another server. The problem I am having is
> the subroutine that run every 30 minutes (move_pic) never runs. I will
> include the code that I have so far, but if any one can suggest a better
> way I would be happy to hear it.
> 
>

Each time through your 'check' loop you are resetting the 'move_pic'
event forward 30 minutes, I believe you need 'delay_add' to add an
additional event, but after 30 minutes you would start to get 'move_pic'
every 10 minutes, since the check is going to set one 30 minutes from
now, every 10 minutes. Seems like you might want to set an initial delay
in the start rather than when you call 'check', then at the end of
move_pic you would add another 30 minutes in the future, then it
perpuates itself without accelerating.

Still relatively a novice at this, I would imagine someone else will
chime in if I am off my rocker...

HTH,

http://danconia.org
 
> 
> Times shortened for testing...
> 
> #!/usr/bin/perl
> 
> use strict;
> use warnings;
> 
> use POE;
> use LWP::Simple;
> use File::Copy;
> use Net::SMTP;
> use POSIX qw(strftime);
> 
> $|++;
> 
> my $smtp = Net::SMTP->new('localhost');
> my $host = qx { hostname --short };
> 
> my $lb;
> if ($host eq 'www0') {
>         $lb = '10.0.0.1';
> } else {
>         $lb = '10.0.1.1';
> }
> 
> POE::Session->create(
>                 inline_states => {
>                         _start          => \&start,
>                         check           => \&check,
>                         get_pic         => \&get_pic,
>                         move_pic        => \&move_pic,
>                         mail            => \&mail,
>                         _stop           => \&stop,
>                 },
> );
> 
> $poe_kernel->run;
> exit 0;
> 
> sub start {
>         my $kernel = $_[KERNEL];
> 
>         $kernel->yield('check');
> }
> 
> sub check {
>         my $kernel = $_[KERNEL];
> 
>         my $servermon = qx { nc -w 2 $lb 5000};
> 
>         if ($servermon eq $host) {;
>                 print "Check\n";
>                 $kernel->delay(move_pic => 30);
>                 $kernel->delay(get_pic => 10);
>         } else {
>                 $kernel->delay(check => 120);
>         }
> }
> sub get_pic {
> 
>         my ($kernel, $heap)  = @_[KERNEL, HEAP];
> 
>         print "get_pic\n";
> 
>         my $image_link   = 'http://webcam/hugesize.jpg';
>         my $temp_filename = '30sec.jpg';
>         my $filename = 'current.jpg';
> 
>         unless (mirror($image_link,$temp_filename)) {
>                 print "Sending mail\n";
>                 $kernel->yield('mail');
>         }
> 
>         move($temp_filename,$filename);
> 
>         $kernel->yield('check');
> }
> 
> sub move_pic {
>         my ($kernel, $heap)  = @_[KERNEL, HEAP];
> 
>         print "move_pic\n";
> 
>         my $old_filename  = 'current.jpg';
>         my $new_filename  = time.'.jpg';
> 
>         if (-f $old_filename) {
>                 copy($old_filename,$new_filename);
>         }
> 
>         $kernel->yield('check');
> }
> 
> sub mail {
>         my ($kernel, $heap)  = @_[KERNEL, HEAP];
> 
>         my $failTime = strftime "%H:%M:%S", localtime;
>         my $todayDate = strftime "%m/%d/%y", localtime;
> 
> 
>         $smtp->mail('[EMAIL PROTECTED]');
>         $smtp->to('[EMAIL PROTECTED]');
>         $smtp->data();
> 
> 
>         $smtp->datasend("To: [EMAIL PROTECTED]");
>         $smtp->datasend("From: [EMAIL PROTECTED]");
>         $smtp->datasend("Subject: WebCam Died...");
>         $smtp->datasend("\n\n");
> 
> 
>         $smtp->datasend("Webcam failed will retry in one minute.");
>         $smtp->datasend("\n\nDate: ".$todayDate."\nTime:
".$failTime."\n\n");
>         $smtp->dataend();
>         $smtp->quit;
> 
>         $kernel->yield(get_pic => 60);
> }
> 
> sub stop {
>         print "That's All\n";
> }
> 
> 
> 
> Thanks,
> Robert Boone
> 
> 


Reply via email to