[Midnightbsd-cvs] mports: Magus/App: Move to logger object.

ctriv at midnightbsd.org ctriv at midnightbsd.org
Thu Oct 2 15:55:34 EDT 2008


Log Message:
-----------
Move to logger object.

Modified Files:
--------------
    mports/Tools/lib/Magus/App/Slave:
        Worker.pm (r1.1 -> r1.2)

Added Files:
-----------
    mports/Tools/lib/Magus/App:
        Logger.pm (r1.1)

-------------- next part --------------
--- /dev/null
+++ Tools/lib/Magus/App/Logger.pm
@@ -0,0 +1,67 @@
+package Magus::App::Logger;
+
+use Sys::Syslog;
+#
+# A utility class for logging in applications.
+#
+sub new {
+  my ($class, %args) = @_;
+  
+  return bless \%args, $class;
+}
+
+sub verbose {
+  my $self = shift;
+  
+  if (@_) {
+    $self->{verbose} = shift;
+  }
+  
+  return $self->{verbose};
+}
+
+sub _init {
+  my ($self) = @_;  
+  
+  return if $self->{_syslog_init};
+  
+  openlog("magus", "ndelay,pid", "local0");
+  
+  $self->{_syslog_init}++;
+}
+
+
+sub report {
+  my ($self, $level, $format, @args) = @_;
+
+  syslog($level, $format, @args);
+
+  if ($self->{verbose}) {
+    my $time = localtime;
+    printf "[$time] ($$): $format\n", @args;
+  }
+}  
+  
+
+BEGIN {
+  no strict 'refs';
+  
+  foreach my $level (qw(emerg alert crit err warning notice info debug)) {
+    *{$level} = sub {
+      shift->report($level => @_);
+    }
+  }
+}
+
+1;
+__END__
+
+
+
+}    
+}
+}
+                                                             
+                                                             
+  
+  
\ No newline at end of file
Index: Worker.pm
===================================================================
RCS file: /home/cvs/mports/Tools/lib/Magus/App/Slave/Worker.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -L Tools/lib/Magus/App/Slave/Worker.pm -L Tools/lib/Magus/App/Slave/Worker.pm -u -r1.1 -r1.2
--- Tools/lib/Magus/App/Slave/Worker.pm
+++ Tools/lib/Magus/App/Slave/Worker.pm
@@ -7,16 +7,16 @@
   my ($class, %args) = @_;
   
   local $SIG{CHLD} = 'DEFAULT';
-  local $SIG{INT}  = { die "SIGINT\n" };
+  local $SIG{INT}  = sub { die "SIGINT\n" };
   
   my $self = bless \%args, $class;
   
   eval {
         $self->{port} = $self->{lock}->port;
         $self->{port}->note_event(info => "Test Started");
-	$self->_prep_chroot();
-	$self->_inject_depends();
-  	$self->_run_test();
+	$self->prep_chroot();
+	$self->inject_depends();
+  	$self->run_test();
   	$self->{port}->note_event($self->{port}->status => "Test complete.");
   }; 
   
@@ -26,29 +26,30 @@
 	} 
 	
 	# we make sure we never have an uncaught exception!
-	eval { $self->{port}->set_result_internal("Exception thrown: $@"); };
+	my $error;
+	eval { $self->{port}->set_result_internal("Exception thrown building %s: $error", $self->port); };
   }
 }
 
-sub _prep_chroot {
+sub prep_chroot {
   my ($self) = @_;
  
-  report(debug => "Preping chroot $self->{worker_id}");
+  $self->log->debug("Preping chroot $self->{worker_id}");
   
-  $self->{chroot} =  Magus::Chroot->new(
+  $self->{chroot} = Magus::Chroot->new(
     workerid => $self->{worker_id},
     tarball  => $Magus::Config{ChrootTarBall},
   );
 }
 
 
-sub _inject_depends {
+sub inject_depends {
   my ($self) = @_;
   
   foreach my $depend ($self->{port}->all_depends) {
     if ($depend->status eq 'pass' || $depend->status eq 'warn') {
       # There should be a package that we can use to install the port.
-      $self->_inject_pkgfile($depend);
+      $self->inject_pkgfile($depend);
       next;
     }
   
@@ -56,7 +57,7 @@
   }
 }
 
-sub _inject_pkgfile {
+sub inject_pkgfile {
   my ($self) = @_;
   
   my $port = $self->{port};
@@ -67,7 +68,7 @@
   
   my $cmd = "/usr/bin/scp $Magus::Config{'PkgfilesRoot'}/$run/$file $dest";
   
-  report('debug', "downloading: $run/$file");
+  $self->log->debug("downloading: $run/$file");
   
   my $out = `$cmd 2>&1`;
   
@@ -77,7 +78,7 @@
 }  
                                                                                 
                                                              
-sub _run_test {
+sub run_test {
   my ($self) = @_;
   
   my $port = $self->{port};
@@ -102,10 +103,12 @@
       chdir($port->origin);
     
       my $test = Magus::PortTest->new(port => $port, chroot => $chroot);
-      report('info', "Building $port");
+
+      $self->log->info("Building $port");
+
       my $results = $test->run;
   
-      $self->_insert_results($results);
+      $self->insert_results($results);
     };
     
     if ($@) {
@@ -113,7 +116,9 @@
         exit(0);
       }
       # make sure we get to that exit() down there. 
-      eval { $port->set_result_internal("Exception thrown: $@"); };
+      my $error = $@;
+      $self->log->err("Exception thrown building $port: $error");
+      eval { $port->set_result_internal("Exception thrown: $error"); };
     }
     
     exit(0);
@@ -127,21 +132,37 @@
     # process probably changed stuff
     $port->refresh;
     
+    
     if ($port->status eq 'pass' || $port->status eq 'warn') {
-        $self->_upload_pkgfile();
+        $self->upload_pkgfile();
     }
   } else {
     die "Child exited unexpectantly: $?\n";
   }
 }  
 
-
-
-=head2 upload_pkgfile($port, $file)  
+sub insert_results {
+  my ($self, $results) = @_;
   
-Upload the built package of the current port to the master dir. 
-    
-=cut
+  $self->log->info("Inserting results for %s; summary: $results->{summary}", $self->port);
+      
+  $self->port->status($results->{'summary'});
+  $self->port->update;  
+            
+  my %type_conversion = (skip => 'skip', warning => 'warn', error => 'fail');
+                
+  foreach my $type (qw(skip warning error)) {
+    next unless $results->{$type . 's'};
+                          
+    foreach my $sr (@{$results->{$type . 's'}}) {
+      $self->port->note_event($type_conversion{$type} => $sr->{msg});
+    }
+  }  
+                                            
+  if ($results->{log}) {
+    Magus::Log->insert({ port => $self->port, data => $results->{log}->{data}});
+  }
+}
     
 sub upload_pkgfile {
   my ($self) = @_;
@@ -153,7 +174,7 @@
   
   my $cmd = "/usr/bin/scp $from $Magus::Config{'PkgfilesRoot'}/$run/$file";
 
-  report('debug', "uploading: $run/$file");
+  $self->log->debug("uploading: $run/$file");
   
   my $out = `$cmd 2>&1`;
 
@@ -161,6 +182,15 @@
      die "$cmd returned non-zero: $out\n";
   }
 } 
+    
+    
+sub log {
+  return $_[0]->{logger};
+}    
+
+sub port {
+  return $_[0]->{port};
+}
                                    
 
 1;


More information about the Midnightbsd-cvs mailing list