Skrypt do statystyk

Zaczęty przez Pigu, 14 Wrzesień 2010, 21:53

Pigu

kamraci - pomóżcie Pigulcowi usprawniać i modernizować stronę statów

jak zrobić skrypt sprawdzający kto jest aktualnie nr 1 w projekcie (w teamie)

Szopler

Zależy czy chcesz coś więcej niż tylko to czy nie...
Ja kiedyś zacząłem robić staty i ściągałem z projektów pliki: team.gz i user.gz. Po rozpakowaniu będziesz miał odpowiednie XML'e.
np. http://setiathome.berkeley.edu/stats/

Z team.xml wyciągałem ID Teamu i szukałem w user użytkowników których ID teamu odpowiadał temu znalezionemu.

Mając tabelę z samymi userami B@P dość łatwo można znaleźć tego który ma najwięcej ;).

Jak tylko będę miał czas to wrócę do tematu.

Mori

Patrząc na rozmiary - nie łatwiej do tej konkretnej rzeczy odpytać konkretne strony projektowe (np. http://milkyway.cs.rpi.edu/milkyway/team_members.php?teamid=14&offset=0&sort_by=total_credit) i wziąć z kodu HTML pierwszą osobę?

Pigu

faktycznie rozmiar plików po przemnożeniu przez projekty może być imponujący, jednak możliwe, że docelowo będę wykonywał więcej działań

jak te pliki przeszukiwać i wyławiać dane?

Szopler

Ja tam jadę skryptem w perlu który napisałem na podstawie skryptów autorstwa mindc'a.
http://boinc.mindc.net/ & http://mindc.net/2008/10/boincstats1/

tu masz kod (nie pamiętam już co tu działa a co nie):

#!/usr/bin/perl -w

#Wczytywane moduły
use LWP;
use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
use XML::Simple;
use Data::Dumper;

#Stałe i zmienne
my $lista_url = "/var/batpstats/boinc_urls.xml";
my $downl_user = "/var/batpstats/arch_user/";
my $downl_team = "/var/batpstats/arch_team/";
my $lista_user = "user.gz";
my $lista_team = "team.gz";

my $licz = 1;
my $licznik_A = 1;
my $licznik_B = 1;

my $id_batp = 0;
my $founder_batp = "None";
my $credit_batp = 0;
my $rac_batp = 0;
my $team_id = 0;

#Podprogramy
#Otwarcie pliku z listą projektów i ich adresami URL i załadowanie go do zmiennej
sub otworz_plik
{
my ($filename) = @_;
open (FILE, $filename) || die ("Nie moge otworzyc pliku ", $filename, "\n");
@content = (<FILE>);
close (FILE);
#$wielkosc_pliku = (stat($filename))->size;
}

#Ściągnięcie zadanego pliku do zadanego folderu z zadanym timeoutem :)
sub sciagnij_plik
{
my ($adres, $zapis, $czas_na_odp) = @_;
#Najprostszy sposób na ściągnięcie, ale mnie nie zadowala:
#getstore ($url, $sciezka_do_zapisu);

my $browser = LWP::UserAgent->new;
$browser->agent('BOINC@Poland Statistics/0.1');
$browser->timeout($czas_na_odp);
my $response = $browser->get($adres);

print "$adres error: ", $response->status_line,"\n" unless $response->is_success;

open my $fh,'>',$zapis;
print $fh $response->content;
close $fh;
}

#****************************
#*** --- === MAIN === --- ***
#****************************

#Wyciągnięcie z pliku nazw projektów i ich adresów URL
otworz_plik ($lista_url);

foreach $linia (@content)
{
#usunięcie tabulatorów - Każdy tabulator - \t jest zamieniany na znak znajdujący się między // czyli na puste...
$linia =~ s/\t\s//g;
if ($linia =~ /<project_name>/)
  {
  $nazwa_projektu[$licz] = substr($linia, index($linia, "<project_name>")+14, index($linia, "</project_name>")-14);
  }
 
  if ($linia =~ /<project_url>/)
  {
  $adres_projektu[$licz] = substr($linia, index($linia, "<project_url>")+13, index($linia, "</project_url>")-13);
  $licz = ++$licz;
  }
}

#ściąganie z projektów plików
for ($i=1; $i<$licz; ++$i)
{               
# --== wYJĄTKI DLA NIEKTÓRYCH PROJEKTÓW ==--
if ($nazwa_projektu[$i] eq 'BURP') { $lista_user = "user_id.gz"; $lista_team = "team_id.gz"; }
elsif ($nazwa_projektu[$i] eq 'Einstein@Home') { $lista_user = "user_id.gz"; $lista_team = "team_id.gz"; }
elsif ($nazwa_projektu[$i] eq 'Climate Prediction') { $lista_user = "user.xml.gz"; $lista_team = "team.xml.gz"; }
elsif ($nazwa_projektu[$i] eq 'Leiden Classical') { $lista_user = "user.xml.gz"; $lista_team = "team.xml.gz"; }
elsif ($nazwa_projektu[$i] eq 'Seasonal Attribution') { $lista_user = "user.xml.gz"; $lista_team = "team.xml.gz"; }

else { $lista_user = "user.gz"; $lista_team = "team.gz"; }

#Sciagam listy uzytkownikow!
#Ustalam lokalizacje...
$url = $adres_projektu[$i]."stats/".$lista_user;
$sciezka_do_zapisu = $downl_user."user_".$nazwa_projektu[$i].".gz";

#Sciagnij_plik (skad, gdzie, ile czekac na serwer)
#sciagnij_plik ($url, $sciezka_do_zapisu, 30);
#Rozpakowanie GZipa
#gunzip ($sciezka_do_zapisu, $downl_user."user_".$nazwa_projektu[$i].".xml");
#Kasuje archiwum!
#unlink($sciezka_do_zapisu);

#Sciagam listy teamow!
#Ustalam lokalizacje...
$url = $adres_projektu[$i]."stats/".$lista_team;
$sciezka_do_zapisu = $downl_team."team_".$nazwa_projektu[$i].".gz";

#Sciagnij_plik j.w.
#sciagnij_plik ($url, $sciezka_do_zapisu, 30);
#Rozpakowanie GZipa
#gunzip ($sciezka_do_zapisu, $downl_team."team_".$nazwa_projektu[$i].".xml");
#Kasuje archiwum!
#unlink($sciezka_do_zapisu);
}

#...

unlink ('/var/batpstats/debuging.txt');

for ($i=1; $i<$licz; ++$i)
{
otworz_plik ($downl_team."team_".$nazwa_projektu[$i].".xml");

foreach $linia (@content)
  {
#usunięcie tabulatorów - Każdy tabulator - \t jest zamieniany na znak znajdujący się między // czyli na puste...
$linia =~ s/\s//g;
  if ($linia =~ /<id>/) { $id[$licznik_A] = substr($linia, index($linia, "<id>")+4, index($linia, "</id>")-4); $licznik_A=0; }
  if ($linia =~ /<name>/) { $nazwa = substr($linia, index($linia, "<name>")+6, index($linia, "</name>")-6); }
  if ($linia =~ /<total_credit>/) { $total_credit = substr($linia, index($linia, "<total_credit>")+14, index($linia, "</total_credit>")-14); }
  if ($linia =~ /<expavg_credit>/) { $expavg_credit = substr($linia, index($linia, "<expavg_credit>")+15, index($linia, "</expavg_credit>")-15); }
  if ($linia =~ /<founder_name>/) { $founder = substr($linia, index($linia, "<founder_name>")+14, index($linia, "</founder_name>")-14); }
 
  if ($nazwa eq 'BOINC@Poland')
  {
    $id_batp[$i] = $id[0];
    $credit_batp[$i] = $total_credit;
    $rac_batp[$i] = $expavg_credit;
    $founder_batp[$i] = $founder;
    $licznik_A = 1;
  }
  }
#open my $file,'>>','/var/batpstats/debuging.txt';
#print ($nazwa_projektu[$i]," - ",$id_batp[$i]," - ",$founder_batp[$i]," - ",$credit_batp[$i]," - ",$rac_batp[$i],"\n");
#close $file;
}

for ($i=1; $i<$licz; ++$i)
{
#otworz_plik ($downl_user."user_".$nazwa_projektu[$i].".xml");

$user_file = $downl_user."user_".$nazwa_projektu[$i].".xml";

$user = XMLin ($user_file, KeyAttr=>'', GroupTags=>{users=>'xxx'}, ForceArray=>['xxx']);
# ?!?

}


Plik boinc_urls.xml:
<projects_list>
<project>
<project_name>ABC@home</project_name>
<project_url>http://abcathome.com/</project_url>
</project>
<project>
<project_name>AlmereGrid Boinc Grid</project_name>
<project_url>http://boinc.almeregrid.nl/</project_url>
</project>
<project>
<project_name>Anansi</project_name>
<project_url>http://canis.csc.ncsu.edu:8005/anansi/</project_url>
</project>
<project>
<project_name>AQUA@home</project_name>
<project_url>http://aqua.dwavesys.com/</project_url>
</project>
<project>
<project_name>BURP</project_name>
<project_url>http://burp.renderfarming.net/</project_url>
</project>
<project>
<project_name>Cels@Home</project_name>
<project_url>http://celsathome.bme.utexas.edu/cels/</project_url>
</project>
<project>
<project_name>Climate Prediction</project_name>
<project_url>http://climateapps2.oucs.ox.ac.uk/cpdnboinc/</project_url>
</project>
<project>
<project_name>Climateprediction.net Beta</project_name>
<project_url>http://cpdnbeta.oerc.ox.ac.uk/</project_url>
</project>
<project>
<project_name>Collatz Conjecture</project_name>
<project_url>http://boinc.thesonntags.com/collatz/</project_url>
</project>
<project>
<project_name>Cosmology@Home</project_name>
<project_url>http://www.cosmologyathome.org/</project_url>
</project>
<project>
<project_name>distributedDataMining</project_name>
<project_url>http://ddm.nicoschlitter.de/DistributedDataMining/</project_url>
</project>
<project>
<project_name>DistrRTgen</project_name>
<project_url>http://boinc.freerainbowtables.com/distrrtgen/</project_url>
</project>
<project>
<project_name>DNETC@HOME</project_name>
<project_url>http://dnetc.net/</project_url>
</project>
<project>
<project_name>Docking@Home</project_name>
<project_url>http://docking.cis.udel.edu/</project_url>
</project>
<project>
<project_name>DrugDiscovery@Home</project_name>
<project_url>http://boinc.drugdiscoveryathome.com/</project_url>
</project>
<project>
<project_name>EDGeS@Home</project_name>
<project_url>http://home.edges-grid.eu/home/</project_url>
</project>
<project>
<project_name>Einstein@Home</project_name>
<project_url>http://einstein.phys.uwm.edu/</project_url>
</project>
<project>
<project_name>Enigma@Home</project_name>
<project_url>http://www.enigmaathome.net/</project_url>
</project>
<project>
<project_name>FreeHAL</project_name>
<project_url>http://freehal.net/freehal_at_home/</project_url>
</project>
<project>
<project_name>Genetic Life</project_name>
<project_url>http://genlife.is-a-geek.org/genlife/</project_url>
</project>
<project>
<project_name>Goldbach's Conjecture Project</project_name>
<project_url>http://goldbach.pl/</project_url>
</project>
<project>
<project_name>GPUGRID</project_name>
<project_url>http://www.gpugrid.net/</project_url>
</project>
<project>
<project_name>Hydrogen@Home</project_name>
<project_url>http://hydrogenathome.org/</project_url>
</project>
<project>
<project_name>IBERCIVIS</project_name>
<project_url>http://registro.ibercivis.es/</project_url>
</project>
<project>
<project_name>Leiden Classical</project_name>
<project_url>http://boinc.gorlaeus.net/</project_url>
</project>
<project>
<project_name>LHC@Home</project_name>
<project_url>http://lhcathome.cern.ch/lhcathome/</project_url>
</project>
<project>
<project_name>Magnetism@home</project_name>
<project_url>http://kinetic.dnsalias.org/magnetism/</project_url>
</project>
<project>
<project_name>Malaria Control</project_name>
<project_url>http://www.malariacontrol.net/</project_url>
</project>
<project>
<project_name>MilkyWay@home</project_name>
<project_url>http://milkyway.cs.rpi.edu/milkyway/</project_url>
</project>
<project>
<project_name>MindModeling@Home</project_name>
<project_url>http://mindmodeling.org/beta/</project_url>
</project>
<project>
<project_name>NFS@Home</project_name>
<project_url>http://escatter11.fullerton.edu/nfs/</project_url>
</project>
<project>
<project_name>NQueens Project</project_name>
<project_url>http://nqueens.ing.udec.cl/</project_url>
</project>
<project>
<project_name>Orbit@Home</project_name>
<project_url>http://orbit.psi.edu/oah/</project_url>
</project>
<project>
<project_name>PicEvolvr</project_name>
<project_url>http://boinc.picevolvr.com/</project_url>
</project>
<project>
<project_name>Pirates@Home</project_name>
<project_url>http://pirates.spy-hill.net/</project_url>
</project>
<project>
<project_name>POEM@HOME</project_name>
<project_url>http://boinc.fzk.de/poem/</project_url>
</project>
<project>
<project_name>PrimeGrid</project_name>
<project_url>http://www.primegrid.com/</project_url>
</project>
<project>
<project_name>Proteins@home</project_name>
<project_url>http://biology.polytechnique.fr/proteinsathome/</project_url>
</project>
<project>
<project_name>QMC@Home</project_name>
<project_url>http://qah.uni-muenster.de/</project_url>
</project>
<project>
<project_name>Quake Catcher Network</project_name>
<project_url>http://qcn.stanford.edu/sensor/</project_url>
</project>
<project>
<project_name>QuantumFIRE</project_name>
<project_url>http://cah.tcm.phy.cam.ac.uk/</project_url>
</project>
<project>
<project_name>RALPH@Home</project_name>
<project_url>http://ralph.bakerlab.org/</project_url>
</project>
<project>
<project_name>Ramsey@Home</project_name>
<project_url>http://www.ramseyathome.com/ramsey/</project_url>
</project>
<project>
<project_name>Rectilinear Crossing No.</project_name>
<project_url>http://dist.ist.tugraz.at/cape5/</project_url>
</project>
<project>
<project_name>Reversi</project_name>
<project_url>http://dawn.ynet.sk/test1/</project_url>
</project>
<project>
<project_name>RNA World</project_name>
<project_url>http://www.rnaworld.de/rnaworld/</project_url>
</project>
<project>
<project_name>Rosetta@Home</project_name>
<project_url>http://boinc.bakerlab.org/rosetta/</project_url>
</project>
<project>
<project_name>RSA Lattice Siever (2.0)</project_name>
<project_url>http://boinc.unsads.com/rsals/</project_url>
</project>
<project>
<project_name>Seasonal Attribution</project_name>
<project_url>http://attribution.cpdn.org/</project_url>
</project>
<project>
<project_name>SETI@Home</project_name>
<project_url>http://setiathome.berkeley.edu/</project_url>
</project>
<project>
<project_name>SETI@Home Beta</project_name>
<project_url>http://setiweb.ssl.berkeley.edu/beta/</project_url>
</project>
<project>
<project_name>SHA-1 Collision Search Graz</project_name>
<project_url>http://boinc.iaik.tugraz.at/sha1_coll_search/</project_url>
</project>
<project>
<project_name>SIMAP</project_name>
<project_url>http://boinc.bio.wzw.tum.de/boincsimap/</project_url>
</project>
<project>
<project_name>Spinhenge@home</project_name>
<project_url>http://spin.fh-bielefeld.de/</project_url>
</project>
<project>
<project_name>Sudoku project</project_name>
<project_url>http://dist2.ist.tugraz.at/sudoku/</project_url>
</project>
<project>
<project_name>Superlink@Technion</project_name>
<project_url>http://cbl-boinc-server2.cs.technion.ac.il/superlinkattechnion/</project_url>
</project>
<project>
<project_name>SZTAKI Desktop Grid</project_name>
<project_url>http://szdg.lpds.sztaki.hu/szdg/</project_url>
</project>
<project>
<project_name>The Lattice Project</project_name>
<project_url>http://boinc.umiacs.umd.edu/</project_url>
</project>
<project>
<project_name>UCT Malaria</project_name>
<project_url>http://boinc.cs.uct.ac.za/malaria/</project_url>
</project>
<project>
<project_name>uFluids</project_name>
<project_url>http://www.ufluids.net/</project_url>
</project>
<project>
<project_name>Virtual Prairie</project_name>
<project_url>http://vcsc.cs.uh.edu/virtual-prairie/</project_url>
</project>
<project>
<project_name>VTU@Home</project_name>
<project_url>http://boinc.vgtu.lt/vtuathome/</project_url>
</project>
<project>
<project_name>WEP-M+2 Project</project_name>
<project_url>http://bearnol.is-a-geek.com/wanless2/</project_url>
</project>
<project>
<project_name>World Community Grid</project_name>
<project_url>http://www.worldcommunitygrid.org/</project_url>
</project>
<project>
<project_name>yoyo@home</project_name>
<project_url>http://www.rechenkraft.net/yoyo/</project_url>
</project>
<projects_list>


Do testów oczywiście wybrać jeden stabilny projekt z małą liczbą userów - małymi plikami danych.

ENJOY! XD