[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH OSSTEST 4/6] Serial: collect serial logs from an http server
This relies on wget and httpd colluding to set the mtimes on the downloaded files, which works with at least the one server I care about (the apache on the conserver handling the marilith boxes) --- Osstest/Serial/http.pm | 114 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 Osstest/Serial/http.pm diff --git a/Osstest/Serial/http.pm b/Osstest/Serial/http.pm new file mode 100644 index 0000000..cb36f1c --- /dev/null +++ b/Osstest/Serial/http.pm @@ -0,0 +1,114 @@ +# This is part of "osstest", an automated testing framework for Xen. +# Copyright (C) 2009-2013 Citrix Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Fetch logs from a web directory export. + +package Osstest::Serial::http; + +use strict; +use warnings; + +use Osstest; +use Osstest::TestSupport; + +use File::Temp; +use File::Copy; + +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + $VERSION = 1.00; + @ISA = qw(Exporter); + @EXPORT = qw(); + %EXPORT_TAGS = ( ); + + @EXPORT_OK = qw(); +} + +sub new { + my ($class, $ho, $methname, @args) = @_; + my $mo = { Host => $ho, Name => $ho->{Name} }; + die if @args<1; + push @args, "$ho->{Name}.txt*" if @args < 2; + + logm("serial method $methname $mo->{Host}{Name}: @args"); + ($mo->{Server}, $mo->{Pattern}) = @args; + return bless $mo, $class; +} + +sub request_debug { + return 0; +} + +sub fetch_logs { + my ($mo) = @_; + + my $started= $mjobdb->jobdb_flight_started_for_log_capture($flight); + + my $ho = $mo->{Host}; + my $logpat = $mo->{Pattern}; + my $targhost= $mo->{Server}; + + logm("serial http from $mo->{Name} fetching $mo->{Pattern} from $mo->{Server}"); + + my $dir = File::Temp->newdir(); + my $tdir = $dir->dirname; + + my $lrf = "$tdir/log-retrieval.log"; + + system_checked(qw(wget -nH --cut-dirs=1 -r -l1 --no-parent), + '-o', "$lrf", + '-A', $mo->{Pattern}, + '-P', $tdir, + $mo->{Server}); + + my $sr = "serial-retrieval.log"; + my $lr = open_unique_stashfile(\$sr); + File::Copy::copy($lrf, $lr); + + my %done; + foreach my $logfile (glob "$tdir/$mo->{Pattern}") { + my $lh= new IO::File $logfile, 'r'; + if (!defined $lh) { + $!==&ENOENT or warn "$logfile $!"; + next; + } + stat $lh or die "$logfile $!"; + my $inum= (stat _)[1]; + my $lfage= (stat _)[9]; + my $df= $logfile; + $df =~ s,.*/,,; + if ($lfage < $started) { + next if $done{$inum}; + logm("$df modified $lfage, skipping") + unless $done{$inum}; + $done{$inum}= 1; + next; + } + next if defined $done{$inum} and $done{$inum} >= 2; + $done{$inum}= 2; + + $df = "serial-$df"; + logm("stashing $df"); + + my $dh= open_unique_stashfile(\$df); + File::Copy::copy($logfile, $dh); + } + return; + +} + +1; -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |