mindc
Bywalec
Offline
Płeć: 
Wiadomości: 194
nothing can prepare you...
|
 |
« : Wrzesień 05, 2008, 18:45:34 » |
|
nick: mindc / panther imię: Paweł urodzony: 30 marca 1978 skąd: Szczytno (warmińsko-mazurskie) zawód wyuczony: radioelektronik zawód wykonywany: administrator sieci zainteresowania: grafika, szeroko pojęte dłubanie w kompach (hardware i software) ulubione gry: DeusEx, Hitman 2, Diablo II, Quake III Arena, CS/CSS, saga Homeworld www: http://mindc.netSwoją przygodę z liczeniem rozproszonym rozpocząłem w drugiej połowie 1999 roku. Na ustach wszystkich było SETI, każdy chciał coś policzyć więc i ja. Odkrycie, że na wyłączonym wygaszaczu, próbki liczą się trzy razy szybciej było porażające  W 2000 roku, moje liczenie wygasło śmiercią naturalną... długo, długo nic... W 2006 roku, szukałem czegoś, co mogłoby wygrzać kompa no i przypomniałem sobie o SETI. Po kilku latach przerwy, odkryłem BOINC. Po testach, zapuściłem SETI na trzech trupowatych kompach. Jednak szybko przestałem liczyć na domowym. W kwietniu 2008, przypomniałem sobie o SETI, z dorobkiem 50000 punktów, ponownie zacząłem liczyć. Tak sobie liczyłem, liczyłem, doszedłem do ok. 200000 punktów i zostałem zaproszony, chyba w maju, właśnie do BOINC@Poland... No i tak licze do dzisiaj... SETI - coraz mniej, stwierdziłem, że to projekt dla samego liczenia, ale sentyment pozostał POEM - zaczęło się od 'projektu miesiąca' w drużynie, no i tak zostało do dzisiaj... Cosmology - zaczęło się od 'projektu miesiąca'  jednak w tamtym okresie Cosmo zaczęło mieć problemy, i zacząłem szukać innych projektów PrimeGrid - lubię cyferki... MilkyWay - odkryłem duży RAC, ale po nastaniu ery liczących GPU i zawirowaniach z optymalkami - odpuściłem sobie Obecnie liczę nasze AP26 (PrimeGrid) oraz Collatz Conjecture Resztę widać tu:  Pozdrawiam  domowa radiówka:  po upgradzie sprzętu: 
|
|
|
|
« Ostatnia zmiana: Luty 15, 2010, 23:02:18 wysłane przez mindc »
|
Zapisane
|
|
|
|
stasieks80_PL
Bywalec
Offline
Płeć: 
Wiadomości: 163
Poznań
|
 |
« Odpowiedz #1 : Wrzesień 05, 2008, 21:24:32 » |
|
Fajnie napisane. No i zdjecie jest !!
Pozdrawiam z Poznania.
|
|
|
|
|
Zapisane
|
|
|
|
emik
_
Liczydłowy
Offline
Płeć: 
Wiadomości: 1 472
lubię szum kompa o poranku
|
 |
« Odpowiedz #2 : Wrzesień 05, 2008, 21:50:21 » |
|
w mojej wizytówce też jest zdjęcie 
|
|
|
|
|
Zapisane
|
|
|
|
Pigu
Komisja ds. nagród i odznaczeń
Starszy Liczydłowy
Offline
Płeć: 
Wiadomości: 2 850
Burmistrz Miasteczka boinc.myminicity.com
|
 |
« Odpowiedz #3 : Wrzesień 05, 2008, 22:50:30 » |
|
witam serdecznie kamrrrata na pokładzie
|
|
|
|
|
Zapisane
|
|
|
|
AiDec
_
Starszy Liczydłowy
Offline
Płeć: 
Wiadomości: 1 949
Punkciki-punkciki man :)
|
 |
« Odpowiedz #4 : Wrzesień 08, 2008, 07:34:21 » |
|
Witam serdecznie kolege z podobnymi zainteresowaniami (znaczy sie zainteresowanego dobrym RAC`em  ). Punkciki, punkciki... 
|
|
|
|
« Ostatnia zmiana: Wrzesień 08, 2008, 07:47:12 wysłane przez AiDec »
|
Zapisane
|
|
|
|
Troll81
Newsmani
Starszy Liczydłowy
Offline
Płeć: 
Wiadomości: 7 253
Stworzony by wygrywać :D
|
 |
« Odpowiedz #5 : Wrzesień 08, 2008, 10:15:44 » |
|
Witam 
|
|
|
|
|
Zapisane
|
Moja sygnaturkaChociażbym chodził ciemną doliną, zła się nie ulęknę, bo jestem najgorszym bydlakiem w całej solonej dolinie...
|
|
|
|
|
kempler
Global Moderator
Liczydłowy
Offline
Płeć: 
Wiadomości: 1 370
Tak jakby tłumaczę artykuły :P
|
 |
« Odpowiedz #7 : Wrzesień 14, 2008, 12:23:41 » |
|
Ale fajne 
|
|
|
|
|
Zapisane
|
Kury Nas pogryzą, Raptory zeżrą....
|
|
|
emik
_
Liczydłowy
Offline
Płeć: 
Wiadomości: 1 472
lubię szum kompa o poranku
|
 |
« Odpowiedz #8 : Wrzesień 14, 2008, 12:27:43 » |
|
może byś zamieścił jakąś instrukcję jak wykonać sobie samemu takie ładne wykresiki 
|
|
|
|
|
Zapisane
|
|
|
|
mindc
Bywalec
Offline
Płeć: 
Wiadomości: 194
nothing can prepare you...
|
 |
« Odpowiedz #9 : Wrzesień 20, 2008, 03:48:51 » |
|
Tutorial/gotowiec: własne wykresy BOINC RAC i Total CreditsWykresy są generowane pod Linuxem, o porcie na Windows może kiedyś pomyślę  Służę pomocą, gdyby ktoś to chciał odpalić u siebie. potrzebujemy: - maszyny z Linuxem - uruchomiony BOINC z podpiętymi projektami jakie chemy mieć na wykresach - działającego RRDtoola - Perl zawsze się znajdzie + moduł RRDs + XML::Simple Projekty, których nie chcemy liczyć na tej maszynie, ustawiamy na 'no new tasks'. BOINC robi za nas najważniejszą robotę, czyli pobiera aktualne dane o punktach i RAC bezpośrednio z projektów i zapisuje sobie to wszystko w plikach xml. Podpinamy pod crona skrypt (u siebie ustawiłem co 26 minut), który nam będzie wymuszał aktualizację projektów. Najprostszy skrypt do aktualizacji: #!/bin/bash
BOINCDIR=/sciezka/do/BOINC cd $BOINCDIR for PROJECT in `command ls -1 $BOINCDIR/projects | tr _ /`;do ./boinc_cmd --project http://$PROJECT update done
Gdy już mamy samoaktualizującego się BOINCa, wystarczy, że co pewien czas (u mnie cron, co 10 minut) uruchomimy zamieszczony poniżej skrypt w Perlu. (chciałbym dodać, że nie jestem z wykształcenia programistą i przepraszam za jakość kodu, ja po prostu piszę sobie skrypty i np.: komentarze wstawiłem dopiero teraz  ) #!/usr/bin/perl -w
use strict; use warnings; use XML::Simple; use POSIX qw(strftime); use lib qw( /ścieżka/do/katalogu/z/modułem/RRDs ); use RRDs;
my $BOINC_DIR = '/scieżka/do/BOINC'; my $BOINC_CMD = $BOINC_DIR.'/boinc_cmd'; my $WORKDIR = '/ściezka/do/katalogu/z/plikami/rrd';
chdir $BOINC_DIR; opendir my $dh, 'projects'; my $dir = [ ]; @$dir = readdir($dh); # pobieramy listę projektów
my $timestamp = time; my $ftime = strftime('%Y-%m-%d %H\:%M\:%S %Z',localtime($timestamp)); # stopka na wykresie
# ogólny wygląd wykresu my @graph_defaults = ( "--slope", "--font=DEFAULT:6:$WORKDIR/fleftex.ttf", # tu użyłem niestandardowej czcionki, więc w przypadku jej braku wykres rozjedzie się "--width=269", "--height=269", "--lower-limit=0", "--units=si", "--rigid", "--color=BACK#ffffff00", "--color=CANVAS#ffffff00", "--color=AXIS#000000", "--color=FONT#000000", "--color=MGRID#00000030", "--color=GRID#00000020", "--color=SHADEA#F5F5F500", "--color=SHADEB#F0F0F000", "--color=ARROW#000000", );
my $projects = {}; my $totals = {};
foreach ( @$dir ) { # przetwarzamy każdy z projektów next if m'^\.'; print "$_...\n";
unless ( -r "$WORKDIR/$_.rrd" ) { # tworzymy jednorazowo bazę dla konkretnego projektu RRDs::create "$WORKDIR/$_.rrd","--start=now-30d", "--step=3600", "DS:user_total_credit:GAUGE:86400:0:U", "DS:user_expavg_credit:GAUGE:86400:0:U", "RRA:LAST:0.5:1:20000", ; } # czytamy dane z plików xml my $account = read_xml("$BOINC_DIR/account_${_}.xml"); my $statistics = read_xml("$BOINC_DIR/statistics_${_}.xml");
# wyciągamy interesujące nas dane $projects->{$_}{user_total_credit} = $statistics->{daily_statistics}[-1]{user_total_credit}; $projects->{$_}{user_expavg_credit} = $statistics->{daily_statistics}[-1]{user_expavg_credit};
$totals->{user_total_credit} += $projects->{$_}{user_total_credit}; $totals->{user_expavg_credit} += $projects->{$_}{user_expavg_credit}; # w którymś z projektów 'projekt_name' okazał się pusty przez jakiś czas # więc zatąpiłem go urlem $projects->{$_}{name} = $account->{project_name} || $account->{master_url};
# aktualizujemy bazę RRDs::update ( "$WORKDIR/$_.rrd","$timestamp:$projects->{$_}{user_total_credit}:$projects->{$_}{user_expavg_credit}"); if ( my $err = RRDs::error ) {print "update: $err\n"} }
# tablica z kolorami dla projektów # zawartoś tablicy to np.: [ 'FF0000' , 'FF9900' ... ] czyli mozna sobie ustawić kolory wedle upodobań my @colors; my $total = keys %$projects; for ( my $i = 0;$i < $total;$i++ ) { push @colors,hsv2rgb($i/$total*360,1,1); }
# sortujemy wykres po RAC my @prosort = sort { $projects->{$b}{user_expavg_credit} <=> $projects->{$a}{user_expavg_credit} } keys %$projects;
# lub po nazwie projektu #my @prosort = sort { uc($projects->{$a}{name}) cmp uc($projects->{$b}{name}) } keys %$projects;
# maksymalna wysokość wykresu $totals->{user_total_credit} *= 1.05; $totals->{user_expavg_credit} *= 1.05;
# tworzymy wykresy foreach my $target ( qw (user_total_credit user_expavg_credit) ) { do_graph($target); }
exit;
# wykres sub do_graph { my $target = shift; my $i = 0; my $title;
my @graphs; my @stack;
foreach my $project ( @prosort ) { (my $project_name = $projects->{$project}{name}) =~ s/:/\\:/g; # gdy w nazie projektu pojawi się ':' musimy go 'poprawić' push @stack,"$target$i"; # ustawiamy odpowiednie nazwy zmiennych dla wyrażeń RPN
if ( $target eq 'user_expavg_credit') { $title = 'boinc racs'; push @graphs, "DEF:$target$i=$WORKDIR/$project.rrd:$target:LAST", "AREA:$target$i#$colors[$i]:$project_name ".'.' x (41 - length($projects->{$project}{name})).":STACK", "GPRINT:$target$i:LAST:%8.2lf\\n"; }
if ( $target eq 'user_total_credit' ) { $title = 'boinc totals'; push @graphs, "DEF:$target$i=$WORKDIR/$project.rrd:$target:LAST", "AREA:$target$i#$colors[$i]:$project_name ".'.' x (36 - length($projects->{$project}{name})).":STACK", "GPRINT:$target$i:LAST:%11.2lf\\n"; } $i++; }
if ( $target eq 'user_expavg_credit' ) { push @graphs, "COMMENT: \\n", "--upper-limit=$totals->{user_expavg_credit}", "CDEF:total=".join(',', @stack).',+' x (@stack - 1), "GPRINT:total:LAST:TOTAL ".'.' x (43 - length('total'))." %9.2lf\\n"; }
if ( $target eq 'user_total_credit' ) { push @graphs, "COMMENT: \\n", "--upper-limit=$totals->{user_total_credit}", "CDEF:total=".join(',', @stack).',+' x (@stack - 1), # sumujemy dane z wszystkich projektów "GPRINT:total:LAST:TOTAL ".'.' x (38 - length('total'))." %11.2lf\\n"; }
RRDs::graph "$WORKDIR/$target.png", "--title=$title", "--start=1215129600", # start wykresów @graph_defaults, @graphs, "COMMENT: \\n", "COMMENT:generated \@ $ftime\\r", ; if ( my $err = RRDs::error ) {print "graph:$target: $err\n"} }
# czytanie plików xml sub read_xml { my $path = shift; my $content = XMLin( $path, ForceArray => ['daily_statistics'], SuppressEmpty => 1, NormalizeSpace => 2, KeyAttr => '', ); return $content; }
sub dec2hex { return sprintf "%02x",int shift; }
# dla łatwego rysowania 'tęczy', wykorzystałem funkcję zamieniającą model kolorów HSV na RGB # źródło: wiki :) sub hsv2rgb { my ($h,$s,$v) = @_; my $hi = int($h/60) % 6; my $f = $h/60 - int($h/60); my $p = $v * (1 - $s); my $q = $v * (1 - $f * $s); my $t = $v * (1 - (1 - $f) * $s);
for ($v,$t,$p,$q) { $_ *= 255; $_ = dec2hex($_); }
return "$v$t$p" if $hi == 0; return "$q$v$p" if $hi == 1; return "$p$v$t" if $hi == 2; return "$p$q$v" if $hi == 3; return "$t$p$v" if $hi == 4; return "$v$p$q" if $hi == 5; }
To chyba wszystko. Uwagi/sugestie mile widziane. Pozdrawiam
|
|
|
|
« Ostatnia zmiana: Wrzesień 20, 2008, 03:52:19 wysłane przez mindc »
|
Zapisane
|
|
|
|
Mori
Młodszy Liczydłowy
Offline
Płeć: 
Wiadomości: 308
Memento Mori
|
 |
« Odpowiedz #10 : Wrzesień 20, 2008, 13:13:41 » |
|
Gdybyś jednak przerobił to tak, by można było podawać własne XMLe z wartościami... Wtedy nie potrzeba było maszyny z BOINCem, a jedynie pobierać odpowiednie dane z HTTP, co nie jest trudne. Najchętniej widziałbym w ogóle oddzielenie modułu do pobierania danych i samego rysowania wykresu.
+ przerobienie tego na PHP i wykorzystanie czegokolwiek, co w PHP grafikę rysuje.
Uhm, i takie pytanie: nie wiem jak w Perlu, ale AFAIR w PHP readdir zwracał także . i .. - pozbywasz się ich gdzieś?
PS. Pokazałbyś gdzieś jakiś własny przykład danych z jednego projektu, jakie dostarczasz do RRD? Jak to wygląda?
|
|
|
|
|
Zapisane
|
|
|
|
mindc
Bywalec
Offline
Płeć: 
Wiadomości: 194
nothing can prepare you...
|
 |
« Odpowiedz #11 : Wrzesień 20, 2008, 13:46:23 » |
|
Gdybyś jednak przerobił to tak, by można było podawać własne XMLe z wartościami... Wtedy nie potrzeba było maszyny z BOINCem, a jedynie pobierać odpowiednie dane z HTTP, co nie jest trudne. Najchętniej widziałbym w ogóle oddzielenie modułu do pobierania danych i samego rysowania wykresu.
hmmm... rzeczywiście, jak dojde do tego, jak odczytywać pewne dane bezpośrednio z serwera projektu, być może przerobie skrypt. Z drugiej strony, wystarczy, że do maszyny dodam projekt i już niczym nie muszę się martwić, reszta robi się automatycznie + przerobienie tego na PHP i wykorzystanie czegokolwiek, co w PHP grafikę rysuje.
PHP wykorzystuję do totalnie innych rzeczy, ale sie domyślam do czego bijesz. Nie każdy ma dostęp do powłoki ale sporo osób do własnego www+php ma  A jesli chodzi o grafikę, to jest chyba moduł RRD pod PHP, rysowanie tego od zera, dla mnie mija się z celem. Dlatego wybrałem RRD, zbieranie danych + reprezentacja graficzna w jednym. Uhm, i takie pytanie: nie wiem jak w Perlu, ale AFAIR w PHP readdir zwracał także . i .. - pozbywasz się ich gdzieś?
tak  tutaj: next if m'^\.'; nazwy projektów nie zaczynaja się od kropek, więc mogłem sobie to uprościć PS. Pokazałbyś gdzieś jakiś własny przykład danych z jednego projektu, jakie dostarczasz do RRD? Jak to wygląda?
nie wiem czy dokładnie o to Ci chodzi... w pliku np.: statistics_boinc.fzk.de_poem.xml mamy fragment <daily_statistics> <day>1221868800.000000</day> <user_total_credit>461808.409442</user_total_credit> <user_expavg_credit>3920.411788</user_expavg_credit> <host_total_credit>0.000000</host_total_credit> <host_expavg_credit>0.000000</host_expavg_credit> </daily_statistics>
wyciagam z tego dane, takie jakie są i wrzucam do RRD RRDs::update ( '/home/panther/boinc/boinc.fzk.de_poem.rrd', '1221910380:461808.409442:3920.411788' );
|
|
|
|
|
Zapisane
|
|
|
|
Mori
Młodszy Liczydłowy
Offline
Płeć: 
Wiadomości: 308
Memento Mori
|
 |
« Odpowiedz #12 : Wrzesień 20, 2008, 14:17:07 » |
|
hmmm... rzeczywiście, jak dojde do tego, jak odczytywać pewne dane bezpośrednio z serwera projektu, być może przerobie skrypt. Z drugiej strony, wystarczy, że do maszyny dodam projekt i już niczym nie muszę się martwić, reszta robi się automatycznie Niby tak - ale dużo łatwiej byłoby podać tylko user/pass, a potem żeby skrypt sam łączył się po kolei z wszystkimi projektami, próbował się zalogować... Jak jest konto - dodaje je do bazy. Jak nie ma - to nie ma. A potem by tylko z tych serwerów, gdzie konto jest, pobierał dane. PHP wykorzystuję do totalnie innych rzeczy, ale sie domyślam do czego bijesz. Nie każdy ma dostęp do powłoki ale sporo osób do własnego www+php ma  No więc właśnie. Poza tym chyba 'pijesz'  Chociaż ja abstynent akurat jestem. A jesli chodzi o grafikę, to jest chyba moduł RRD pod PHP, rysowanie tego od zera, dla mnie mija się z celem. Dlatego wybrałem RRD, zbieranie danych + reprezentacja graficzna w jednym. Są gotowe klasy do rysowania w PHPie. Poza tym żadne tam rysowanie od zera - dość podobne rzeczy, jakie robisz teraz, robić trzeba będzie w PHPie. tak  tutaj: next if m'^\.'; nazwy projektów nie zaczynaja się od kropek, więc mogłem sobie to uprościć Ha, wiedziałem xD BTW. Dżizaz, co za składnia... Tragedia. Jak człowiek ma rozumieć to: m' [tu regexp] ' :/ Chyba jednak najpierw się za Pythona wezmę, nie za Perla... nie wiem czy dokładnie o to Ci chodzi... w pliku np.: statistics_boinc.fzk.de_poem.xml mamy fragment
<daily_statistics> <day>1221868800.000000</day> <user_total_credit>461808.409442</user_total_credit> <user_expavg_credit>3920.411788</user_expavg_credit> <host_total_credit>0.000000</host_total_credit> <host_expavg_credit>0.000000</host_expavg_credit> </daily_statistics>
wyciagam z tego dane, takie jakie są i wrzucam do RRD
RRDs::update ( '/home/panther/boinc/boinc.fzk.de_poem.rrd', '1221910380:461808.409442:3920.411788' );
Tak, o to. W takim razie staty będą działać tylko od momentu rozpoczęcia pobierania danych i wszystko na tych aktualkach się będzie opierać... Szkoda. Myślałem, że można gdzieś dostać historię tego... PS. Jak serwer nie wygenerował nowych statystyk za dany dzień to day i tak się update'uje? Poza tym co 10 minut to chyba jest jednak za często - nie lepiej robić to raz na 12/24h? Koniec końców day i tak pewnie raz tylko aktualizują, więc czy nie kończy się to tylko xxx wpisami z tym samym timestamp'em w pliku .rrd? PS. Pokazałbyś jakiś plik .rrd, o ile to tekst.
|
|
|
|
|
Zapisane
|
|
|
|
mindc
Bywalec
Offline
Płeć: 
Wiadomości: 194
nothing can prepare you...
|
 |
« Odpowiedz #13 : Wrzesień 20, 2008, 15:07:59 » |
|
(...) ale dużo łatwiej byłoby podać tylko user/pass, a potem żeby skrypt sam łączył się po kolei z wszystkimi projektami, próbował się zalogować... Jak jest konto - dodaje je do bazy. Jak nie ma - to nie ma. A potem by tylko z tych serwerów, gdzie konto jest, pobierał dane.
jasne, próbowałem własnie wbić się na serwer POEM, wrzucając mu te same dane co wysyła BOINC ( kopiuj/wklej z tcpdumpa  ) no i otrzymuję <scheduler_reply> <scheduler_version>603</scheduler_version> <master_url>http://boinc.fzk.de/poem/</master_url> <request_delay>7.000000</request_delay> <message priority="low">Error in request message: no end tag </message> <project_name>Poem@Home</project_name> </scheduler_reply>
mimo że przejrzałem, czy gdzieś literówki nie ma w zapytaniu, niestety dalej to samo Są gotowe klasy do rysowania w PHPie. Poza tym żadne tam rysowanie od zera - dość podobne rzeczy, jakie robisz teraz, robić trzeba będzie w PHPie. brrr...  tak  tutaj: next if m'^\.'; Ha, wiedziałem xD BTW. Dżizaz, co za składnia... Tragedia. Jak człowiek ma rozumieć to: m' [tu regexp] ' :/ Chyba jednak najpierw się za Pythona wezmę, nie za Perla... ja to jeszcze piszę kulturalnie, częściej znajdziesz tak: next if /^\./; (...) W takim razie staty będą działać tylko od momentu rozpoczęcia pobierania danych i wszystko na tych aktualkach się będzie opierać... Szkoda. Myślałem, że można gdzieś dostać historię tego...
tak jak piszesz, ale historię mozna wyciągnąć (chyba) tylko z BOINCStats i pochodnych PS. Jak serwer nie wygenerował nowych statystyk za dany dzień to day i tak się update'uje? Poza tym co 10 minut to chyba jest jednak za często - nie lepiej robić to raz na 12/24h? Koniec końców day i tak pewnie raz tylko aktualizują, więc czy nie kończy się to tylko xxx wpisami z tym samym timestamp'em w pliku .rrd?
W teorii. Dane na dany dzień aktualizowane są na bierząco, jak tylko przydzielą kredyty za próbkę. Więc wpis dla danego dnia także się aktualizuje. Dopiero jak juz dzień się skończy, zostają dane z ostatniej aktualizacji w poprzednim dniu. PS. Pokazałbyś jakiś plik .rrd, o ile to tekst.
Niestety, to są binarki. Ale w samym pakiecie od RRD jest narzędzie do dump/restore w wyniku możemy zrzucić dane do pliku xml, podłubac w nich trochę i z powrotem zobić plik rrd. Fragmenty pliku po dumpie: <!-- Round Robin Database Dump --><rrd> <version> 0003 </version> <step> 3600 </step> <!-- Seconds --> <lastupdate> 1221400022 </lastupdate> <!-- 2008-09-14 15:47:02 CEST --> <ds> <name> user_total_credit </name> <type> GAUGE </type> <minimal_heartbeat> 86400 </minimal_heartbeat> <min> NaN </min> <max> NaN </max> <!-- PDP Status --> <last_ds> 438524.957450 </last_ds> <value> 1.2375169071e+09 </value> <unknown_sec> 0 </unknown_sec> </ds>
<!-- Round Robin Archives --> <rra> <cf> LAST </cf> <pdp_per_row> 1 </pdp_per_row> <!-- 3600 seconds --> <params> <xff> 5.0000000000e-01 </xff> </params> <cdp_prep> <ds> <primary_value> 4.3826351904e+05 </primary_value> <secondary_value> NaN </secondary_value> <value> NaN </value> <unknown_datapoints> 0 </unknown_datapoints> </ds> <ds> </cdp_prep> <database> <!-- 2003-03-25 15:00:00 CET / 1048600800 --> <row><v> NaN </v><v> NaN </v><v> NaN </v></row> <!-- 2003-03-25 16:00:00 CET / 1048604400 --> <row><v> NaN </v><v> NaN </v><v> NaN </v></row>
<!-- 2008-09-14 11:00:00 CEST / 1221382800 --> <row><v> 4.3789903405e+05 </v><v> 3.9287622463e+03 </v><v> NaN </v></row> <!-- 2008-09-14 12:00:00 CEST / 1221386400 --> <row><v> 4.3804409243e+05 </v><v> 3.9327159951e+03 </v><v> NaN </v></row> <!-- 2008-09-14 13:00:00 CEST / 1221390000 --> <row><v> 4.3816961994e+05 </v><v> 3.9232498000e+03 </v><v> NaN </v></row> <!-- 2008-09-14 14:00:00 CEST / 1221393600 --> <row><v> 4.3817514456e+05 </v><v> 3.9120825319e+03 </v><v> NaN </v></row> <!-- 2008-09-14 15:00:00 CEST / 1221397200 --> <row><v> 4.3826351904e+05 </v><v> 3.9002132229e+03 </v><v> NaN </v></row> </database> </rra> </rrd>
|
|
|
|
« Ostatnia zmiana: Wrzesień 20, 2008, 17:32:31 wysłane przez mindc »
|
Zapisane
|
|
|
|
|
buninek
|
 |
« Odpowiedz #14 : Wrzesień 20, 2008, 15:51:30 » |
|
jasne, próbowałem własnie wbić się na serwer POEM, wrzucając mu te same dane co wysyła BOINC ( kopiuj/wklej z tcpdumpa  ) curl ewentualnie wget bez problemu pobiorą dane z serwera (o ile będzie on dostępny) Swoją drogą i tak skrypt spełnia swoje podstawowe zadanie, prezentację za okres dłuźszy niż 60 dni.
|
|
|
|
|
Zapisane
|
|
|
|
mindc
Bywalec
Offline
Płeć: 
Wiadomości: 194
nothing can prepare you...
|
 |
« Odpowiedz #15 : Wrzesień 20, 2008, 16:25:09 » |
|
jasne, próbowałem własnie wbić się na serwer POEM, wrzucając mu te same dane co wysyła BOINC ( kopiuj/wklej z tcpdumpa  ) curl ewentualnie wget bez problemu pobiorą dane z serwera (o ile będzie on dostępny) tu nie chodzi o pytanie 'czym' (do testowania używam echo "<scheduler_request><tu testowe dane></scheduler_request>" | lynx --source --post_data http://boinc.fzk.de/poem_cgi/cgi), tylko 'jak skonstruować zapytanie do serwera, żeby zwrócił dane które potrzebuje.' szukam dalej...
|
|
|
|
|
Zapisane
|
|
|
|
|
buninek
|
 |
« Odpowiedz #16 : Wrzesień 20, 2008, 20:18:56 » |
|
curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" -d "email_addr=buninek%40gmail.com&passwd=moje_haslo" -s --cookie cookies -L --url http://www.cosmologyathome.org/login_action.php > cosmo_moje_konto.html lub -o cosmo_moje_konto.html lub | sed | grep | awk ... EDIT: Wypadałoby się jeszcze wylogować  curl to potężne narzędzie w rękach osób znających dobrze protokół http, php. Ma multum zastosowań. Można nawet nim pobrać pocztę przez www. Ciekawostka dla webasterów. echo "scale=4;`curl -s -o /dev/null -w '%{time_starttransfer}-%{time_pretransfer}' http://www.boincatpoland.org/smf`"| sed 's/,/\./g' | bc Mierzy czas reakcji strony od momentu połączenia do rozpoczęcia transferu Czas reakcji http://www.boincatpoland.org/smfu mnie wyszło 0.152s. dla przykładu http://forum.pclab.plprawie 1s
|
|
|
|
« Ostatnia zmiana: Wrzesień 21, 2008, 12:11:25 wysłane przez buninek »
|
Zapisane
|
|
|
|
mindc
Bywalec
Offline
Płeć: 
Wiadomości: 194
nothing can prepare you...
|
 |
« Odpowiedz #17 : Wrzesień 21, 2008, 01:12:49 » |
|
fajnie, u mnie http://www.boincatpoland.org/smf : 0.054s http://forum.pclab.pl : 0.174s Tylko co mi z tego, że się zaloguję na stronę? Potrzebuję się wbić do schedulera.
|
|
|
|
|
Zapisane
|
|
|
|
|
buninek
|
 |
« Odpowiedz #18 : Wrzesień 21, 2008, 01:18:24 » |
|
w czym problem? nie znasz swojego userid?
|
|
|
|
|
Zapisane
|
|
|
|
mindc
Bywalec
Offline
Płeć: 
Wiadomości: 194
nothing can prepare you...
|
 |
« Odpowiedz #19 : Wrzesień 21, 2008, 02:50:14 » |
|
nawet jak mu wyślę to co sam BOINC wysyła, czyli np.: zawartość pliku sched_request_www.ps3grid.net.xml, to dostaję w odpowiedzi <scheduler_reply> <scheduler_version>603</scheduler_version> <master_url>http://www.ps3grid.net/</master_url> <request_delay>31.000000</request_delay> <message priority="low">Error in request message: no end tag </message> <project_name>PS3GRID</project_name> </scheduler_reply>
a plik xml jest ok, nie wiem gdzie szukać haczyka
|
|
|
|
« Ostatnia zmiana: Wrzesień 21, 2008, 03:03:43 wysłane przez mindc »
|
Zapisane
|
|
|
|
mindc
Bywalec
Offline
Płeć: 
Wiadomości: 194
nothing can prepare you...
|
 |
« Odpowiedz #20 : Wrzesień 22, 2008, 13:10:51 » |
|
ok, znalazłem ten haczyk  Całe oprogramowanie BOINC: klient, core i serwer nie korzystają z normalnego parsera xml, tylko z prostego wyszukiwania ciągu znaków i zapis: <scheduler_request> <authenticator>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</authenticator> </scheduler_request>
jest poprawny, ale <scheduler_request><authenticator>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</authenticator></scheduler_request>
już nie 
na podstawie zebranych obserwacji, wyklepałem taki o to kod: #!/usr/bin/perl -w
use strict; use Digest::MD5 qw(md5_hex); use XML::Simple; use Data::Dumper; use LWP::UserAgent;
# główne dane do kont my $global_email = 'glowny@email'; my $global_passwd = 'glowne.haslo;
# lista projektów, z ktorych chcemy pobierać dane my $projects = [ ['http://milkyway.cs.rpi.edu/milkyway/','altrenatywny@email.com','alternatywne.haslo'], ['http://boinc.fzk.de/poem/'], ['http://www.ps3grid.net/'], ['http://www.primegrid.com'], ['http://setiweb.ssl.berkeley.edu/beta/'], ['http://setiathome.berkeley.edu/'], ];
my $ua = LWP::UserAgent->new; $ua->timeout(10);
my $out = {};
# mielimy każdy projekt z osobna foreach my $project ( @$projects ) { if ( (my $authenticator = lookup_account($project->[0],$project->[1],$project->[2])) && (my $scheduler_url = get_scheduler_url($project->[0]))) {
# wysyłamy zapytanie do schedulera # w większości projektów nie trzeba podawać wersji klienta # ale POEM wymagał tego my $req = HTTP::Request->new(POST => $scheduler_url ); $req->content_type('application/x-www-form-urlencoded'); $req->content("<scheduler_request>\n<authenticator>$authenticator</authenticator> <core_client_major_version>6</core_client_major_version> <core_client_minor_version>2</core_client_minor_version> <core_client_release>18</core_client_release> </scheduler_request> "); my $res = $ua->request($req);
my $schdres; if ( $res->is_success ) { $schdres = XMLin($res->content); } else { warn "error: $project->[0]: ",$res->status_line,"\n"; next; }
# agregacja wyników push @{$out->{projects}{project}},{ project_url => $schdres->{master_url}, project_name => $schdres->{project_name}, user_total_credit => $schdres->{user_total_credit}, user_expavg_credit => $schdres->{user_expavg_credit}, }; } }
# wypluwamy na wyjście xmla print XMLout($out,NoAttr => 1,KeepRoot => 1); exit;
sub lookup_account { my ($url,$email,$passwd) = @_;
# gdy nie podamy alternatywnych parametrów do konta # przyjmowane są globalne $email = $global_email unless $email; $passwd = $global_passwd unless $passwd;
# pobieramy uid my $req = HTTP::Request->new( GET => "$url/lookup_account.php?email_addr=$email&passwd_hash=@{[md5_hex($passwd.$email)]}" ); my $res = $ua->request($req); if ( $res->is_success ) { my $lookupres = $res->content; # sprawdzamy czy nie było jakiegoś błędu, lub po prostu brak konta if ( $lookupres =~ m'<error_msg>(.*)</error_msg>' ) { warn "error: $url: $1\n"; return 0; } else { return XMLin($lookupres)->{authenticator}; } } else { warn "error: $url: ",$res->status_line,"\n"; return 0; } }
sub get_scheduler_url { my $url = shift; my $scheduler_url; my $req = HTTP::Request->new( GET => $url ); my $res = $ua->request($req);
if ( $res->is_success ) { # szukanie na głównej stronie projektu adresu schedulera ($scheduler_url) = $res->content =~ m'<scheduler>\s*(.*?)\s*</scheduler>'; return $scheduler_url if $scheduler_url; return 0; } else { warn "error: $url: ",$res->status_line,"\n"; return 0 } }
po uruchomieniu otrzymujemy... <projects> <project> <project_name>Milkyway@home</project_name> <project_url>http://milkyway.cs.rpi.edu/milkyway/</project_url> <user_expavg_credit>21331.856267</user_expavg_credit> <user_total_credit>1395576.115154</user_total_credit> </project> <project> <project_name>Poem@Home</project_name> <project_url>http://boinc.fzk.de/poem/</project_url> <user_expavg_credit>3855.326193</user_expavg_credit> <user_total_credit>468820.897871</user_total_credit> </project> <project> <project_name>PS3GRID</project_name> <project_url>http://www.ps3grid.net/</project_url> <user_expavg_credit>2519.313827</user_expavg_credit> <user_total_credit>54945.082169</user_total_credit> </project> <project> <project_name>PrimeGrid</project_name> <project_url>http://www.primegrid.com/</project_url> <user_expavg_credit>765.754475</user_expavg_credit> <user_total_credit>48781.400469</user_total_credit> </project> <project> <project_name>SETI@home Beta Test</project_name> <project_url>http://setiweb.ssl.berkeley.edu/beta/</project_url> <user_expavg_credit>0.117859</user_expavg_credit> <user_total_credit>3475.677871</user_total_credit> </project> <project> <project_name>SETI@home</project_name> <project_url>http://setiathome.berkeley.edu/</project_url> <user_expavg_credit>2117.077308</user_expavg_credit> <user_total_credit>619959.777887</user_total_credit> </project> </projects>
...dane w xml, do łatwego przetwarzania EDIT: gdyby ktoś próbował to odpalić, ostrzegam że kod ten generuje ogromne ilości hostów/duchów w bazach schedulera. Wersja bez tego buga znajduje się tutaj: http://mindc.net/2008/10/boincstats1/
|
|
|
|
« Ostatnia zmiana: Luty 01, 2009, 20:55:07 wysłane przez mindc »
|
Zapisane
|
|
|
|
|
buninek
|
 |
« Odpowiedz #21 : Wrzesień 22, 2008, 14:15:01 » |
|
scheduler wyrzuca te same dane co po zalogowaniu się na konto choć to zaproponowane jest dużo bardziej eleganckie  sprawdziłem działa 
|
|
|
|
|
Zapisane
|
|
|
|
AiDec
_
Starszy Liczydłowy
Offline
Płeć: 
Wiadomości: 1 949
Punkciki-punkciki man :)
|
 |
« Odpowiedz #22 : Marzec 24, 2009, 08:21:33 » |
|
Niedlugo Twoje urodziny - wszystkiego najlepsiejszego juz teraz  (naczelny cziterze i modyfikatorze  ).
|
|
|
|
« Ostatnia zmiana: Marzec 24, 2009, 08:29:23 wysłane przez AiDec »
|
Zapisane
|
|
|
|
Troll81
Newsmani
Starszy Liczydłowy
Offline
Płeć: 
Wiadomości: 7 253
Stworzony by wygrywać :D
|
 |
« Odpowiedz #23 : Marzec 24, 2009, 09:04:03 » |
|
no to 
|
|
|
|
|
Zapisane
|
Moja sygnaturkaChociażbym chodził ciemną doliną, zła się nie ulęknę, bo jestem najgorszym bydlakiem w całej solonej dolinie...
|
|
|
|
KrzychuP
|
 |
« Odpowiedz #24 : Marzec 24, 2009, 09:10:32 » |
|
spoookoojnie, jeszcze prawie tydzień 
|
|
|
|
|
Zapisane
|
|
|
|
|