Lägga till RRA i befintlig databas

RRDTool är en Linuxmjukvara som kan användas för att lagra data i Round-Robin Databaser för att sedan generera grafer utifrån den lagrade datan.
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
andreas
Tar hemautomation på allvar
Inlägg: 61
Blev medlem: 17 jan 2010, 01:06
Ort: Borås
Kontakt:

Lägga till RRA i befintlig databas

Inlägg av andreas »

Hej!

Jag har idag en databas där jag har registrerar AVERAGE. Jag skulle vilja komplettera med MIN och MAX också.
Är det möjligt att göra, utan att förlora befintlig data i databasen?

Har surfat runt och letat efter information, men bara hittat andra som har liknande frågor, utan några direkta svar.

/Andreas
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5434
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

Re: Lägga till RRA i befintlig databas

Inlägg av elf98 »

När jag har lagt till flera RRAer har jag dumpat databasen till XML, skapat en ny databas med rätt RRAer och sedan lagt in gammal data genom att köra ett skript som loopar igenom XMLfilen rad för rad.

Bökigt och inte helt lätt...
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
andreas
Tar hemautomation på allvar
Inlägg: 61
Blev medlem: 17 jan 2010, 01:06
Ort: Borås
Kontakt:

Re: Lägga till RRA i befintlig databas

Inlägg av andreas »

Har du något script som jag kan utgå från och eventuellt modifiera för att fungera för mina databaser?
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5434
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

Re: Lägga till RRA i befintlig databas

Inlägg av elf98 »

Så här gjorde jag:

Kod: Markera allt

#!/usr/bin/php
<?php

$db=temp.rrd;
passthru("cp /special/termo/rrdb/$db /home");
passthru("rrdtool dump /special/termo/rrdb/$db >/tmp/temp.xml");

$infile = "/tmp/temp.xml";
$outfile= "/tmp/temp.xml.expanded";
$i=0;

$in = fopen($infile, "r");
$out = fopen($outfile, "w");
#headers
while ($i < 20){
        fputs($out,fgets($in));
        $i++;
}
#AVERAGE
$line = fgets($in);
while (!stristr($line, "</rrd>")) {
fputs($out,$line);
$line = fgets($in);
}
fclose($in);
$in = fopen($infile, "r");
$i = 0;
while ($i < 20){
        fgets($in);
        $i++;
}
$line = fgets($in);
while (!stristr($line, "</rrd>")) {
        fputs($out,str_replace("AVERAGE","MIN",$line));
$line = fgets($in);
}
fclose($in);

$in = fopen($infile, "r");
$i = 0;
while ($i < 20){
        fgets($in);
        $i++;
}
$line = fgets($in);
while (!stristr($line, "</rrd>")) {
        fputs($out,str_replace("AVERAGE","MAX",$line));
        $line = fgets($in);
}
fclose($in);
fputs($out,"</rrd>");
fclose($out);
}


passthru("rrdtool restore /tmp/temp.xml.expanded /tmp/$db");
passthru("mv /tmp/$db /special/termo/rrdb");
}
?>
Kanske inte helt lätt att följa koden.

Men jag dumpar databasen till xml och skapar sedan en ny XML-fil med både MIN/MAX och AVERAGE utifrån AVERAGE-värdena. De historiska MIN/MAX är egentligen AVERAGE över 1h, men det går ju inte att få fram data som redan medelvärdesbildas.
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
andreas
Tar hemautomation på allvar
Inlägg: 61
Blev medlem: 17 jan 2010, 01:06
Ort: Borås
Kontakt:

Re: Lägga till RRA i befintlig databas

Inlägg av andreas »

Tackar! Fungerade alldeles utmärkt!
Skriv svar