%PDF- %PDF-
| Direktori : /backups/router/usr/local/etc/inc/ |
| Current File : //backups/router/usr/local/etc/inc/rrd.inc |
<?php
/*
* Copyright (C) 2010 Seth Mos <seth.mos@dds.nl>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
function rrd_export()
{
$rrddbpath = '/var/db/rrd';
$result = "\t<rrddata>\n";
$rrd_files = glob("{$rrddbpath}/*.rrd");
foreach ($rrd_files as $rrd_file) {
$basename = basename($rrd_file);
$xml_file = preg_replace('/\.rrd$/', ".xml", $rrd_file);
exec("/usr/local/bin/rrdtool dump '{$rrd_file}' '{$xml_file}'");
$xml_data = @file_get_contents($xml_file);
@unlink($xml_file);
if ($xml_data !== false) {
$result .= "\t\t<rrddatafile>\n";
$result .= "\t\t\t<filename>{$basename}</filename>\n";
$result .= "\t\t\t<xmldata>" . base64_encode(gzdeflate($xml_data)) . "</xmldata>\n";
$result .= "\t\t</rrddatafile>\n";
}
}
$result .= "\t</rrddata>\n";
return $result;
}
function rrd_import()
{
global $config;
foreach ($config['rrddata']['rrddatafile'] as $rrd) {
if (!empty($rrd['xmldata'])) {
$rrd_file = "/var/db/rrd/{$rrd['filename']}";
$xml_file = preg_replace('/\.rrd$/', ".xml", $rrd_file);
if (file_put_contents($xml_file, gzinflate(base64_decode($rrd['xmldata']))) === false) {
log_msg("Cannot write $xml_file", LOG_ERR);
continue;
}
$output = array();
$status = null;
exec("/usr/local/bin/rrdtool restore -f '{$xml_file}' '{$rrd_file}'", $output, $status);
if ($status) {
log_msg("rrdtool restore -f '{$xml_file}' '{$rrd_file}' failed returning {$status}.", LOG_ERR);
continue;
}
unlink($xml_file);
} elseif (!empty($rrd['data'])) {
/* rrd backup format */
$rrd_file = "/var/db/rrd/{$rrd['filename']}";
$rrd_fd = fopen($rrd_file, "w");
if (!$rrd_fd) {
log_msg("Cannot write $rrd_file", LOG_ERR);
continue;
}
$data = base64_decode($rrd['data']);
/* Try to decompress the data. */
$dcomp = @gzinflate($data);
if ($dcomp) {
/* If the decompression worked, write the decompressed data */
if (fwrite($rrd_fd, $dcomp) === false) {
log_msg("fwrite $rrd_file failed", LOG_ERR);
continue;
}
} elseif (fwrite($rrd_fd, $data) === false) {
/* If the decompression failed, it wasn't compressed, so write raw data */
log_msg("fwrite $rrd_file failed", LOG_ERR);
continue;
}
if (fclose($rrd_fd) === false) {
log_msg("fclose $rrd_file failed", LOG_ERR);
continue;
}
}
}
}