SVN: toys/stbr/queue_parser.pl
sparky
sparky at pld-linux.org
Thu Oct 29 22:27:43 CET 2009
Author: sparky
Date: Thu Oct 29 22:27:42 2009
New Revision: 10879
Added:
toys/stbr/queue_parser.pl
Log:
- new, queue.gz parser
Added: toys/stbr/queue_parser.pl
==============================================================================
--- (empty file)
+++ toys/stbr/queue_parser.pl Thu Oct 29 22:27:42 2009
@@ -0,0 +1,143 @@
+#!/usr/bin/perl
+#
+# 2009 (c) Przemysław Iskra <sparky at pld-linux.org>
+# It's GPL v2+ !
+#
+use strict;
+use warnings;
+use WWW::Curl::Easy;
+use Compress::Zlib ();
+use Data::Dumper;
+
+my $data_dir = $ENV{PWD};
+
+my $line = shift @ARGV;
+$line ||= "th";
+$line = ucfirst lc $line;
+
+my %queue_uri = (
+ Th => 'http://ep09.pld-linux.org/~builderth/queue.gz',
+ Ti => 'http://ep09.pld-linux.org/~builderti/queue.gz',
+);
+
+my $uri = $queue_uri{ $line } || die "Line $line not supported\n";
+
+my $data_file = "$data_dir/saved-vars-$line.pl";
+my $data = do $data_file;
+$data ||= { last_time => time - 60, printed => {} };
+my %printed;
+
+
+my %status_to_color = (
+ '?' => "bold",
+ OK => "green",
+ FAIL => "red",
+ SKIP => "blue",
+ UNSUPP => "magenta",
+);
+
+my %color_to_code = (
+ red => 5,
+ green => 3,
+ yellow => 7,
+ blue => 2,
+ magenta => 6,
+ "" => 0,
+);
+sub color
+{
+ my $color = shift || "";
+ return "\002" if $color eq "bold";
+ return "\003" . $color_to_code{$color};
+}
+
+sub get
+{
+ my $uri = shift;
+
+ my $curl = new WWW::Curl::Easy;
+ $curl->setopt( CURLOPT_URL, $uri );
+
+ my $body;
+ open my $body_f, ">", \$body;
+
+ $curl->setopt( CURLOPT_WRITEDATA, $body_f );
+
+ my $retcode = $curl->perform;
+
+ if ( $retcode ) {
+ die "$line queue download error: " . $curl->strerror( $retcode ) . " ($retcode)\n";
+ }
+ return Compress::Zlib::memGunzip( $body );
+}
+
+
+my $xml = get( $uri );
+$xml =~ s{</queue>.*}{}s;
+
+my $now = time;
+
+my $printed_something = 0;
+my $done_so_far = 1;
+my @group = $xml =~ m{(<group.*?</group>)}gs;
+foreach my $grp ( @group ) {
+ my ($time) = $grp =~ m{<time>(\d+)</time>};
+ next if $time <= $data->{last_time};
+
+ my @pkg = $grp =~ m{(<batch.*?</batch>)}gs;
+ foreach my $p ( @pkg ) {
+ my ($id) = $p =~ m{<batch id='(.*?)'};
+
+ if ( $data->{printed}->{$id} ) {
+ $printed{$id} = 1;
+ next;
+ }
+
+ my ($rpm) = $p =~ m{<src-rpm>(.*?)</src-rpm>};
+ if ( $rpm ) {
+ $rpm =~ s/\.src\.rpm$//;
+ } else {
+ ($rpm) = $p =~ m{<command flags="">(.*?)</command>};
+ }
+
+ my $all_done = 1;
+ my $some_done = 0;
+ my @status;
+ my @builders = $p =~ m{(<builder.*?</builder>)}g;
+ foreach my $b ( @builders ) {
+ my ( $status, $builder ) = $b =~ m{status='(.*?)'.*?>(.*?)</builder>};
+ my $color = $status_to_color{ $status } || "red";
+ push @status, "$builder: " . color($color) . "$status\017";
+ if ( $status eq "?" ) {
+ $all_done = 0;
+ } else {
+ $some_done = 1;
+ }
+ }
+
+ my $print = undef;
+ if ( $all_done ) {
+ $print = 1;
+ } elsif ( $some_done ) {
+ $print = 0 if $time + 120 < $now;
+ }
+ if ( not $all_done ) {
+ $done_so_far = 0;
+ $printed{$id} = 0 if $some_done;
+ next if exists $data->{printed}->{$id};
+ }
+
+ if ( defined $print ) {
+ $printed{$id} = $print;
+ $printed_something++;
+ print color( "yellow" ) ."$line\017: $rpm\002:\017 " . ( join ", ", @status ) . "\n";
+ }
+ }
+ $data->{last_time} = $time if $done_so_far;
+ last if $printed_something > 4;
+}
+
+$data->{printed} = \%printed;
+open F_OUT, ">", $data_file;
+print F_OUT Dumper( $data );
+close F_OUT;
More information about the pld-cvs-commit
mailing list