<?php
/*
* PIMPED APACHE-STATUS
* template for DATA only
* export tables as JSON, serialized object, XML
*
* GET parameters:
*
* - define a group or server
* servers=[servername_in_your_config]
* group=[groupname_in_your_config]
* url=[server-status_url]
*
* - define output
* skin=data
* format=json|serialize ... xml later
* filter=status|requests_all|requests_running|requests_mostrequested|requests_hostlist|requests_longest
*
*/
$sFilter=false;
$sFormat='json';
// available formats and its MIME type
$aFormats=$oDatarenderer->getExportFormats();
// ======================================================================
// init
// ======================================================================
if (array_key_exists("filter", $_GET)){
$sFilter=$_GET["filter"];
$aFilters=$oDatarenderer->getValidFilters($aSrvStatus);
if (!array_key_exists($sFilter, $aFilters)){
die("ERROR: The filter $sFilter is not valid.");
}
}
if (array_key_exists("format", $_GET)){
$sFormat=$_GET["format"];
if (!array_key_exists($sFormat, $aFormats)){
die("ERROR: The format $sFormat is not valid.");
}
}
$sExpFile='export_'.$aEnv["active"]["group"].'_'.$sFilter.'_'.date("Ymd_His").'.'.$aFormats[$sFormat]["ext"];
// ======================================================================
// get data
// ======================================================================
// TODO: demo mode for api to prevent public usage of the installation
if ($sFilter){
if (array_key_exists("callfunction", $aFilters[$sFilter])){
$aData=$oDatarenderer->{$aFilters[$sFilter]["callfunction"]}($aSrvStatus, false);
} else {
$aData = $oServerStatus->dataFilter($aSrvStatus,$aFilters[$sFilter]);
}
} else {
$aData = $aSrvStatus;
}
// ======================================================================
//
// output
//
// ======================================================================
$sBody=false;
switch ($sFormat) {
case "csv":
if (count($aData)){
$outstream = fopen("php://memory", 'w+');
// get teable header
fputcsv($outstream, array_keys($aData[0]));
// loop over data rows
foreach ($aData as $aRow){
fputcsv($outstream, array_values($aRow));
}
rewind($outstream);
$sBody = stream_get_contents($outstream);
fclose($outstream);
}
break;
case "json":
$sBody=json_encode($aData);
break;
case "serialize":
$sBody=serialize($aData);
break;
case "xml":
require_once ('./classes/array2xml.class.php');
$oXml = Array2XML::createXML('response', array('entry'=>$aData));
$sBody=$oXml->saveXML();
break;
default:
die("format $sFormat is not implemented (yet?).");
break;
}
// ======================================================================
// put header and body to the page object
// ======================================================================
$oPage->setOutputtype("data");
$oPage->addResponseHeader("Content-Type: " . $aFormats[$sFormat]["mime"]);
$oPage->addResponseHeader('Content-Disposition: attachment; filename="'.$sExpFile.'"');
$oPage->setContent($sBody);
|