extract datetime_now
authorDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 23 Mar 2011 22:12:21 +0000 (23:12 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Wed, 23 Mar 2011 22:12:21 +0000 (23:12 +0100)
lib/APKPM/Gearman.pm
lib/APKPM/Poll.pm

index 725da10..8a6ef80 100644 (file)
@@ -5,6 +5,9 @@ use Moose::Role;
 use Data::Dump qw(dump);
 use JSON::XS;
 
+use DateTime;
+use DateTime::Format::Pg;
+
 sub e_json {
        my ( $self, $result ) = @_;
        warn "# e_json ", dump $result;
@@ -24,4 +27,8 @@ sub d_array {
 
 }
 
+sub datetime_now {
+       return DateTime::Format::Pg->format_datetime( DateTime->now );
+}
+
 1;
index d9fb4fd..5b1470b 100644 (file)
@@ -5,8 +5,6 @@ use Moose;
 use Time::HiRes qw(time);
 use Data::Dump qw(dump);
 use Redis;
-use DateTime;
-use DateTime::Format::Pg;
 
 with 'APKPM::Gearman::Client';
 with 'APKPM::Gearman';
@@ -16,7 +14,12 @@ sub prefix { 'poll_' }
 sub by_prefix : Job : Encode(e_json) {
        my ( $self, $job, $workload ) = @_;
 
-       my $start = DateTime->now();
+       my $redis = Redis->new;
+       $redis->del( $_ ) foreach $redis->keys('poll.*');
+
+       my $start = $self->datetime_now;
+
+       $redis->set( 'poll.start' => $start );
 
        my $entries = $self->do( 'LDAP_search' => "(&(cn=$workload*)(dhcpStatements=*))" );
 
@@ -25,9 +28,6 @@ sub by_prefix : Job : Encode(e_json) {
                $ip_username->{ $entry->{cn} } = $1 if $entry->{dhcpStatements} =~ m/fixed-address\s+(\S+)/;
        }
 
-       my $redis = Redis->new;
-       $redis->del( $_ ) foreach $redis->keys('poll.*');
-
        my $taskset = $self->gc->new_task_set;
        my $results;
        while (my ($username,$ip) = each %$ip_username) {
@@ -40,24 +40,22 @@ sub by_prefix : Job : Encode(e_json) {
        warn "# wait";
        $taskset->wait;
 
-       my $finish = DateTime->now();
+       my $finish = $self->datetime_now;
+       $redis->set( 'poll.finish' => $finish );
+
+       my $poll = { _table => 'poll' }; # Store_insert_table arg
 
-       my $poll;
        foreach my $k ( $redis->keys('poll.*') ) {
                my $n = $k;
                $n =~ s/^poll\.//;
                $n =~ s/\./_/g;
-               $poll->{$n} = $redis->scard($k);
+               $poll->{$n} = eval { $redis->scard($k) } || $redis->get($k);
        }
-       $poll->{start}  = DateTime::Format::Pg->format_datetime($start);
-       $poll->{finish} = DateTime::Format::Pg->format_datetime($finish);
-
-       $poll->{_table} = 'poll';
 
        warn dump $poll;
        $self->do_background_json('Store_insert_table', $poll);
 
-       return { ldap => $ip_username, results => $results, duration => $finish - $start, poll => $poll };
+       return { ldap => $ip_username, results => $results, poll => $poll };
 }
 
 sub ip_username : Job : Decode(d_array) : Encode(e_json) {