Stationernas upptid visas på grafsidan

Senaste nytt gällande http://www.temperatur.nu
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5420
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

Stationernas upptid visas på grafsidan

Inlägg av elf98 »

Att se hur bra upptiden är kan vara intressant.

Längst ner i info-rutan under grafen står nu varje stations upptid. Upptiden är beräknad på det senaste året, och om stationen inte har funnits på temperatur.nu i ett år sedan stationen lades till.
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
Användarvisningsbild
CirruZZ
Master Moderator
Inlägg: 1621
Blev medlem: 13 feb 2008, 16:46
Ort: Ystad

Re: Stationernas uptid visas på grafsidan

Inlägg av CirruZZ »

Nu duggar det tätt med funktioner!! Ska du gå om duracel kaninen eller?
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5420
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

Re: Stationernas upptid visas på grafsidan

Inlägg av elf98 »

Japp!

Fast upptidsfunktionen är rätt simpel, 20 rader kod bara. Loopar igenom alla databaser en gång i timmen och räknar antalet nan-värden och delar sedan med det totala antalet hämtade rader.
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
Användarvisningsbild
CirruZZ
Master Moderator
Inlägg: 1621
Blev medlem: 13 feb 2008, 16:46
Ort: Ystad

Re: Stationernas upptid visas på grafsidan

Inlägg av CirruZZ »

Tyst nu, du ska säga att det var jätte svårt och att du har varit vaken hela natten!
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5420
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

Re: Stationernas upptid visas på grafsidan

Inlägg av elf98 »

Äh!

Så här ser koden som analyserar upptiden ut:

Kod: Markera allt

<?php
include("functions.php"); //Standarduppsättning av funktioner från temperatur.nu
init_db(); //Initiera mysql-databasen
$check = mysql_query("SELECT id, stad2, UNIX_TIMESTAMP(start),active from temperatur"); //Hämta id, alias, timestamp för start samt active för alla stationer
while (list($id, $stad,$start,$active) = mysql_fetch_row($check)) {
        if (file_exists("/special/termo/rrdb/temperatur_$stad.rrd")) { //Om databasen existerar kör...
                $sluttid_db=floor(time()/3600)*3600-3600; //Ett försök att få ut timvärdena, fungerar dåligt i praktiken, men spelar inte så stor roll.
                if (time() - $start < 31536000){ //Om stationen har funnits kortare tid än ett år på temperatur.nu
                        $starttid_db = "e-".(floor((time()-$start)/3600)-1)."h"; //Sätt starttiden till stationens starttid minus 1h. Försök till att hämta hela timmar.
                }else
                        $starttid_db = "e-8759h"; //Om stationen funnits längre tid än ett år sätts starttiden till ett år minus 1 timme
                $cmd="/usr/bin/rrdtool fetch -r 3600  --start $starttid_db -e $sluttid_db /special/termo/rrdb/temperatur_$stad.rrd AVERAGE"; //grundkommando för att läs
a ut från rrdtool enligt tidsspann ovan.
                $if = popen("$cmd|grep nan|wc -l","r"); //räkna antalet rader med nan
                $num_offline = trim(fgets($if));
                $if = popen("$cmd|wc -l","r");// räkna totala antalet rader-
                $num_total = trim(fgets($if));
                $uptime = round(((1-($num_offline/$num_total))*100),1); //Räkna fram %satsen
                echo "$stad har en upptid på $uptime% - no:$num_offline,nt:$num_total,db_start:$starttid_db,Aktiv:$active\n"; //Debug
                mysql_query("UPDATE temperatur set uptime='$uptime' where id='$id'");//Uppdatera databasen.
        }
}
När skriptet har körts är alla stationers upptid uppdaterad i mysql-databasen, så upptiden finns tillgänglig överallt där jag skulle vilja visa den.
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
Skriv svar