Forum BOINC@Poland
Marzec 12, 2010, 02:26:54 *
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: Czy odwiedziłeś już wirtualne miasteczko BOINC@Poland?
 
   Strona główna   Portal Pomoc Szukaj Kalendarz Mapa użytkowników Tagi Zaloguj się Rejestracja  
Strony: [1] 2   Do dołu
  Dodaj zakładkę  |  Drukuj  
Autor Wątek: mindc  (Przeczytany 8187 razy)
0 użytkowników i 2 Gości przegląda ten wątek.
mindc
Bywalec
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 194


nothing can prepare you...


Zobacz profil WWW Nagrody
« : 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.net

Swoją 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 Smiley

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' Smiley 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 Offline

Płeć: Mężczyzna
Wiadomości: 163

Poznań


Zobacz profil Nagrody
« Odpowiedz #1 : Wrzesień 05, 2008, 21:24:32 »

Fajnie napisane. No i zdjecie jest !!

Pozdrawiam z Poznania.
Zapisane

 
emik
_
Liczydłowy
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 1 472


lubię szum kompa o poranku


Zobacz profil Nagrody
« Odpowiedz #2 : Wrzesień 05, 2008, 21:50:21 »

w mojej wizytówce też jest zdjęcie Grin
Zapisane

Pigu
Komisja ds. nagród i odznaczeń
Starszy Liczydłowy
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 2 850


Burmistrz Miasteczka boinc.myminicity.com


Zobacz profil WWW Nagrody
« Odpowiedz #3 : Wrzesień 05, 2008, 22:50:30 »

witam serdecznie kamrrrata na pokładzie
Zapisane


AiDec
_
Starszy Liczydłowy
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 1 949


Punkciki-punkciki man :)


Zobacz profil Nagrody
« Odpowiedz #4 : Wrzesień 08, 2008, 07:34:21 »

Witam serdecznie kolege z podobnymi zainteresowaniami (znaczy sie zainteresowanego dobrym RAC`em  Tongue  Grin ). Punkciki, punkciki... Grin
« Ostatnia zmiana: Wrzesień 08, 2008, 07:47:12 wysłane przez AiDec » Zapisane

Troll81
Newsmani
Starszy Liczydłowy
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 7 253


Stworzony by wygrywać :D


Zobacz profil Nagrody
« Odpowiedz #5 : Wrzesień 08, 2008, 10:15:44 »

Witam Cheesy
Zapisane

Moja sygnaturka

Chociażbym chodził ciemną doliną,
 zła się nie ulęknę,
bo jestem najgorszym bydlakiem
 w całej solonej dolinie...
mindc
Bywalec
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 194


nothing can prepare you...


Zobacz profil WWW Nagrody
« Odpowiedz #6 : Wrzesień 14, 2008, 12:20:15 »

Moje zabawy z RRDtool...


« Ostatnia zmiana: Sierpień 18, 2009, 14:32:08 wysłane przez mindc » Zapisane

kempler
Global Moderator
Liczydłowy
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 1 370


Tak jakby tłumaczę artykuły :P


Zobacz profil Nagrody
« Odpowiedz #7 : Wrzesień 14, 2008, 12:23:41 »

Ale fajne  Smiley
Zapisane


Kury Nas pogryzą, Raptory zeżrą....
emik
_
Liczydłowy
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 1 472


lubię szum kompa o poranku


Zobacz profil Nagrody
« Odpowiedz #8 : Wrzesień 14, 2008, 12:27:43 »

może byś zamieścił jakąś instrukcję jak wykonać sobie samemu takie ładne wykresiki Grin
Zapisane

mindc
Bywalec
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 194


nothing can prepare you...


Zobacz profil WWW Nagrody
« Odpowiedz #9 : Wrzesień 20, 2008, 03:48:51 »

Tutorial/gotowiec: własne wykresy BOINC RAC i Total Credits

Wykresy są generowane pod Linuxem, o porcie na Windows może kiedyś pomyślę Smiley
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:

Kod:
#!/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 Smiley )

Kod:
#!/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 Offline

Płeć: Mężczyzna
Wiadomości: 308

Memento Mori


Zobacz profil WWW Nagrody
« 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 Offline

Płeć: Mężczyzna
Wiadomości: 194


nothing can prepare you...


Zobacz profil WWW Nagrody
« 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

Cytuj
+ 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 Smiley
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.

Cytuj
Uhm, i takie pytanie: nie wiem jak w Perlu, ale AFAIR w PHP readdir zwracał także . i .. - pozbywasz się ich gdzieś?

tak Smiley tutaj:
Kod:
next if m'^\.';
nazwy projektów nie zaczynaja się od kropek, więc mogłem sobie to uprościć

Cytuj
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 Offline

Płeć: Mężczyzna
Wiadomości: 308

Memento Mori


Zobacz profil WWW Nagrody
« 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.

Cytuj
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 Smiley

No więc właśnie. Poza tym chyba 'pijesz' Wink Chociaż ja abstynent akurat jestem.

Cytuj
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.

Cytuj
tak Smiley tutaj:
Kod:
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:
Kod:
m' [tu regexp] '
:/ Chyba jednak najpierw się za Pythona wezmę, nie za Perla...

Cytuj
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 Offline

Płeć: Mężczyzna
Wiadomości: 194


nothing can prepare you...


Zobacz profil WWW Nagrody
« 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 Smiley )
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

Cytuj
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... Wink

Cytuj
Cytuj
tak Smiley tutaj:
Kod:
next if m'^\.';
Ha, wiedziałem xD BTW. Dżizaz, co za składnia... Tragedia. Jak człowiek ma rozumieć to:
Kod:
m' [tu regexp] '
:/ Chyba jednak najpierw się za Pythona wezmę, nie za Perla...
ja to jeszcze piszę kulturalnie, częściej znajdziesz tak:
Kod:
next if /^\./;

Cytuj
(...) 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

Cytuj
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.

Cytuj
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
Młodszy Liczydłowy
*
Offline Offline

Wiadomości: 410


Zobacz profil Nagrody
« 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 Smiley )

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 Offline

Płeć: Mężczyzna
Wiadomości: 194


nothing can prepare you...


Zobacz profil WWW Nagrody
« 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 Smiley )

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
Młodszy Liczydłowy
*
Offline Offline

Wiadomości: 410


Zobacz profil Nagrody
« 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ć Wink
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/smf
u mnie wyszło 0.152s.
dla przykładu http://forum.pclab.pl
prawie 1s
« Ostatnia zmiana: Wrzesień 21, 2008, 12:11:25 wysłane przez buninek » Zapisane
mindc
Bywalec
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 194


nothing can prepare you...


Zobacz profil WWW Nagrody
« 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
Młodszy Liczydłowy
*
Offline Offline

Wiadomości: 410


Zobacz profil Nagrody
« Odpowiedz #18 : Wrzesień 21, 2008, 01:18:24 »

w czym problem?
nie znasz swojego userid?
Zapisane
mindc
Bywalec
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 194


nothing can prepare you...


Zobacz profil WWW Nagrody
« 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 Offline

Płeć: Mężczyzna
Wiadomości: 194


nothing can prepare you...


Zobacz profil WWW Nagrody
« Odpowiedz #20 : Wrzesień 22, 2008, 13:10:51 »

ok, znalazłem ten haczyk Smiley
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  Shocked


na podstawie zebranych obserwacji, wyklepałem taki o to kod:
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  Cool


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
Młodszy Liczydłowy
*
Offline Offline

Wiadomości: 410


Zobacz profil Nagrody
« 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 Tongue
sprawdziłem działa Grin


Zapisane
AiDec
_
Starszy Liczydłowy
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 1 949


Punkciki-punkciki man :)


Zobacz profil Nagrody
« Odpowiedz #22 : Marzec 24, 2009, 08:21:33 »

Niedlugo Twoje urodziny - wszystkiego najlepsiejszego juz teraz Parrrty! (naczelny cziterze i modyfikatorze Tongue ).
« Ostatnia zmiana: Marzec 24, 2009, 08:29:23 wysłane przez AiDec » Zapisane

Troll81
Newsmani
Starszy Liczydłowy
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 7 253


Stworzony by wygrywać :D


Zobacz profil Nagrody
« Odpowiedz #23 : Marzec 24, 2009, 09:04:03 »

no to  Parrrty!
Zapisane

Moja sygnaturka

Chociażbym chodził ciemną doliną,
 zła się nie ulęknę,
bo jestem najgorszym bydlakiem
 w całej solonej dolinie...
KrzychuP
Starszy Liczydłowy
*
Offline Offline

Płeć: Mężczyzna
Wiadomości: 1 814



Zobacz profil Nagrody
« Odpowiedz #24 : Marzec 24, 2009, 09:10:32 »

spoookoojnie, jeszcze prawie tydzień  Wink
Zapisane

Strony: [1] 2   Do góry
  Dodaj zakładkę  |  Drukuj  

 
Skocz do:  

Działa na MySQL Działa na PHP Powered by SMF 1.1.11 | SMF © 2006-2007, Simple Machines LLC
Hosting dzięki uprzejmości InnerVision sp. z o.o.
Prawidłowy XHTML 1.0! Prawidłowy CSS!