<?php // Pandora FMS - http://pandorafms.com // ================================================== // Copyright (c) 2005-2010 Artica Soluciones Tecnologicas // Please see http://pandorafms.org for full contribution list // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation for version 2. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. session_start (); require_once ("../../include/config.php"); require_once ("../../include/functions_agents.php"); require_once ("../../include/functions_reporting.php"); require_once ("../../include/functions_modules.php"); require_once ("../../include/functions_users.php"); global $config; if (!check_acl ($config['id_user'], 0, "AR")) { require ("../../general/noaccess.php"); return; } $group = get_parameter_post ('group', 0); $agentName = get_parameter_post ('agent', 0); switch ($config["dbtype"]) { case "mysql": case "postgresql": $agents = agents_get_agents (array('nombre LIKE "' . $agentName . '"'), array ('id_agente')); break; case "oracle": $agents = agents_get_agents (array('nombre LIKE \'%' . $agentName . '%\''), array ('id_agente')); break; } $agent = $agents[0]['id_agente']; $module = (array) get_parameter_post ('module_arr', array ()); $start_date = get_parameter_post ('start_date', 0); $end_date = get_parameter_post ('end_date', 0); $start_time = get_parameter_post ('start_time', 0); $end_time = get_parameter_post ('end_time', 0); $export_type = get_parameter_post ('export_type', 'data'); $export_btn = get_parameter_post ('export_btn', 0); if (!empty ($module)) { // Disable SQL cache global $sql_cache; $sql_cache = array ('saved' => 0); //Convert start time and end time to unix timestamps $start = strtotime ($start_date." ".$start_time); $end = strtotime ($end_date." ".$end_time); $period = $end - $start; $data = array (); //If time is negative or zero, don't process - it's invalid if ($start < 1 || $end < 1) { ui_print_error_message (__('Invalid time specified')); return; } //****************************************************************** // Starts, ends and dividers //****************************************************************** //Excel is tab-delimited, needs quotes and needs Windows-style newlines $datastart = __('Agent')."\t".__('Module')."\t".__('Data')."\t".__('Timestamp')."\r\n"; $rowstart = '"'; $divider = '"'."\t".'"'; $rowend = '"'."\r\n"; $dataend = "\r\n"; $extension = "xls"; //****************************************************************** // Header output //****************************************************************** $config['ignore_callback'] = true; while (@ob_end_clean ()); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=export_".date("Ymd", $start)."_".date("Ymd", $end).".".$extension); header("Pragma: no-cache"); header("Expires: 0"); //****************************************************************** // Data processing //****************************************************************** $data = array (); // Show header echo $datastart; foreach ($module as $selected) { $output = ""; $work_period = SECONDS_1DAY; if ($work_period > $period) { $work_period = $period; } $work_end = $end - $period + $work_period; //Buffer to get data, anyway this will report a memory exhaustin while ($work_end <= $end) { $data = array (); // Reinitialize array for each module chunk if ($export_type == "avg") { $arr = array (); $arr["data"] = reporting_get_agentmodule_data_average ($selected, $work_period, $work_end); if ($arr["data"] === false) { $work_end = $work_end + $work_period; continue; } $arr["module_name"] = modules_get_agentmodule_name ($selected); $arr["agent_name"] = modules_get_agentmodule_agent_name ($selected); $arr["agent_id"] = modules_get_agentmodule_agent ($selected); $arr["utimestamp"] = $end; array_push ($data, $arr); } else { $data_single = modules_get_agentmodule_data ($selected, $work_period, $work_end); if (!empty ($data_single)) { $data = array_merge ($data, $data_single); } } foreach ($data as $key => $module) { $output .= $rowstart; $output .= io_safe_output($module['agent_name']); $output .= $divider; $output .= io_safe_output($module['module_name']); $output .= $divider; $output .= $module['data']; $output .= $divider; $output .= date ("Y-m-d G:i:s", $module['utimestamp']); $output .= $rowend; } echo $output; unset($output); $output = ""; unset($data); unset($data_single); $work_end = $work_end + $work_period; } unset ($output); $output = ""; } // main foreach echo $dataend; } else { ui_print_error_message (__('No modules specified')); } ?>