Sida 1 av 1

Stationernas upptid visas på grafsidan

Postat: 01 dec 2010, 10:44
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.

Re: Stationernas uptid visas på grafsidan

Postat: 01 dec 2010, 11:07
av CirruZZ
Nu duggar det tätt med funktioner!! Ska du gå om duracel kaninen eller?

Re: Stationernas upptid visas på grafsidan

Postat: 01 dec 2010, 11:10
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.

Re: Stationernas upptid visas på grafsidan

Postat: 01 dec 2010, 11:16
av CirruZZ
Tyst nu, du ska säga att det var jätte svårt och att du har varit vaken hela natten!

Re: Stationernas upptid visas på grafsidan

Postat: 01 dec 2010, 12:53
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.