<?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);

?>