home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / popularity-contest / examples / popcon-stat.pl < prev    next >
Encoding:
Perl Script  |  2005-07-20  |  3.0 KB  |  131 lines

  1. #! /usr/bin/perl -wT
  2. #
  3. # Require the debian package libchart-perl.
  4.  
  5. BEGIN {
  6. @INC=(@INC, map { "./$_" } @INC);
  7. }
  8.  
  9. $ENV{PATH}="/usr/bin:/bin";
  10. $dirpng="../www/stat";
  11. while (<>)
  12. {
  13.    my ($file);
  14.    m/^(.*\/popcon-([0-9-]+)\.gz)$/ or next;
  15.    $file=$1;
  16.    $f=$2;
  17.    push @date,$f;
  18.    open FILE,"zcat $file|";
  19.    while(<FILE>)
  20.    {
  21.      my @line=split(/ +/);
  22.      if ($line[0] eq "Submissions:")
  23.      {
  24.        $subt{$f}=$line[1];
  25.      }
  26.      elsif ($line[0] eq "Architecture:")
  27.      {
  28.        $sub{$f}->{$line[1]}=$line[2];
  29.        $arch{$line[1]}++;
  30.      }
  31.      elsif ($line[0] eq "Release:")
  32.      {
  33.        if (defined($line[2])) {
  34.          $rel{$f}->{$line[1]}=$line[2];
  35.        } else {
  36.          $rel{$f}->{"unknown"}+=$line[1];
  37.        }
  38.      }
  39.      elsif ($line[0] eq "Package:")
  40.      {
  41.        last;
  42.      }
  43.    }
  44.    close FILE;
  45. }
  46.  
  47. @days = sort grep { defined($sub{$_}->{'i386'}) } @date;
  48. @data = (\@days);
  49. @arch = sort keys %arch;
  50. $maxv = -10;
  51. for $arch (@arch)
  52. {
  53.   my @res=();
  54.   for (@days)
  55.   {
  56.     my $data=defined($sub{$_}->{$arch})?log($sub{$_}->{$arch})/log(2)+1:0;
  57.     push @res,$data;
  58.     $maxv=$data if ($data > $maxv);
  59.   }
  60.   push @data,\@res;
  61. }
  62.  
  63. @labels=(@arch);
  64. sub ytick
  65. {
  66.   my ($x)=$_[0]-.5;
  67.   $x < 0 and return 0;
  68.   return int 2**$x;
  69. }
  70.  
  71. use Chart::LinesPoints;
  72.  
  73. $obj=Chart::LinesPoints->new (600,400);
  74. $obj->set ('title' => 'Number of submissions per architectures');
  75. $obj->set ('legend_labels' => [@arch]);
  76. $obj->set ('f_y_tick' => \&ytick);
  77. $obj->set ('brush_size' => 3);
  78. $obj->set ('pt_size' => 7);
  79. $obj->set ('max_val' => $maxv+1);
  80. $obj->set ('y_ticks' => int $maxv +1);
  81. $obj->set ('x_ticks' => 'vertical');
  82. $obj->set ('skip_x_ticks' => 14);
  83. $obj->png ("$dirpng/submission.png", \@data);
  84.  
  85. use Chart::Composite;
  86. for $arch (@arch)
  87. {
  88.   my @data;
  89.   my @res=();
  90.   my @tot=();
  91.   for (@days)
  92.   {
  93.     push @res,defined($sub{$_}->{$arch})?$sub{$_}->{$arch}:0;
  94.     push @tot,defined($subt{$_})?$subt{$_}:0;
  95.   }
  96.   @data=(\@days,\@res,\@tot);
  97.   @labels=($arch, 'all submissions');
  98.   $obj=Chart::Composite->new (600,400);
  99.   $obj->set ('title' => "Number of submissions for $arch");
  100.   $obj->set ('legend_labels' => \@labels);
  101.   $obj->set ('brush_size' => 3);
  102.   $obj->set ('pt_size' => 7);
  103.   $obj->set ('x_ticks' => 'vertical');
  104.   $obj->set ('skip_x_ticks' => 14);
  105.   $obj->set ('composite_info' => [ ['LinesPoints', [1]], ['LinesPoints', [2] ] ]); 
  106.   $obj->png ("$dirpng/sub-$arch.png", \@data);
  107. }
  108.  
  109. @days = sort grep { $_ ge "2004-05-14" } @date;
  110. %release= map { map { $_ => 1 } keys %{$rel{$_}}  } @days;
  111. @data = (\@days);
  112. @release= sort keys %release;
  113. for $release (@release)
  114. {
  115.   my @res=();
  116.   for (@days)
  117.   {
  118.     my $data=defined($rel{$_}->{$release})?$rel{$_}->{$release}:0;
  119.     push @res,$data;
  120.   }
  121.   push @data,\@res;
  122. }
  123. $obj=Chart::LinesPoints->new (600,400);
  124. $obj->set ('title' => 'popularity-contest versions in use');
  125. $obj->set ('legend_labels' => [@release]);
  126. $obj->set ('brush_size' => 3);
  127. $obj->set ('pt_size' => 7);
  128. $obj->set ('x_ticks' => 'vertical');
  129. $obj->set ('skip_x_ticks' => 14);
  130. $obj->png ("$dirpng/release.png", \@data);
  131.