kamraci - pomóżcie Pigulcowi usprawniać i modernizować stronę statów
jak zrobić skrypt sprawdzający kto jest aktualnie nr 1 w projekcie (w teamie)
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.
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 (http://milkyway.cs.rpi.edu/milkyway/team_members.php?teamid=14&offset=0&sort_by=total_credit)) i wziąć z kodu HTML pierwszą osobę?
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?
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