pandorafms/pandora_console/extensions/resource_exportation.php

380 lines
13 KiB
PHP

<?php
// Pandora FMS - http://pandorafms.com
// ==================================================
// Copyright (c) 2005-2011 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; 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.
if (isset($_GET['get_ptr'])) {
if ($_GET['get_ptr'] == 1) {
if (file_exists("../include/config.php"))
require ("../include/config.php");
else {
//TODO FIX AND SET AS RELATIVE DIRECTORY
if (file_exists("/var/www/pandora_console/include/config.php"))
require ("/var/www/pandora_console/include/config.php");
if (file_exists("/srv/www/htdocs/pandora_console/include/config.php"))
require ("/srv/www/htdocs/pandora_console/include/config.php");
}
if (! isset ($_SESSION["id_usuario"])) {
session_start ();
session_write_close ();
}
// Login check
if (!isset($_SESSION["id_usuario"])) {
$config['id_user'] = null;
}
else {
$config['id_user'] = $_SESSION["id_usuario"];
}
if (! check_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) {
db_pandora_audit("ACL Violation", "Trying to access Setup Management");
require ("general/noaccess.php");
return;
}
$hook_enterprise = enterprise_include ('extensions/resource_exportation/functions.php');
header("Content-type: binary");
header("Content-Disposition: attachment; filename=\"".get_name_xml_resource($hook_enterprise)) . "\"";
header("Pragma: no-cache");
header("Expires: 0");
output_xml_resource($hook_enterprise);
}
}
else {
extensions_add_godmode_menu_option (__('Resource exportation'), 'PM','gservers','');
extensions_add_godmode_function('resource_exportation_extension_main');
}
function output_xml_resource($hook_enterprise) {
global $config;
$type = get_parameter('type');
$id = (int)get_parameter('id');
switch ($type) {
case 'report':
output_xml_report($id);
break;
case 'visual_console':
output_xml_visual_console($id);
break;
default:
if ($hook_enterprise === true)
return enterprise_output_xml_resource($type, $id);
break;
}
}
function output_xml_report($id) {
global $config;
require_once ($config['homedir'].'/include/functions_agents.php');
$report = db_get_row('treport', 'id_report', $id);
echo '<?xml version="1.0" encoding="UTF-8" ?>' . "\n";
echo "<report>\n";
echo "<name><![CDATA[" . io_safe_output($report['name']) . "]]></name>\n";
if (isset($report['description']))
echo "<description><![CDATA[" . io_safe_output($report['description']) . "]]></description>\n";
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $report['id_group']);
echo "<group><![CDATA[" . io_safe_output($group) . "]]></group>\n";
$items = db_get_all_rows_field_filter('treport_content', 'id_report', $report['id_report']);
foreach ($items as $item) {
echo "<item>\n";
echo "<type>" . io_safe_output($item['type']) . "</type>\n";
echo "<description>" . io_safe_output($item['description']) . "</description>\n";
echo "<period>" . io_safe_output($item['period']) . "</period>\n";
if ($item['id_agent'] != 0) {
$agent = agents_get_name($item['id_agent']);
}
if ($item['id_agent_module'] != 0) {
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $item['id_agent_module']);
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $item['id_agent_module']);
$agent = agents_get_name($item['id_agent']);
echo "<module><![CDATA[" . io_safe_output($module) . "]]></module>\n";
}
if (isset($agent))
echo "<agent><![CDATA[" . $agent . "]]></agent>\n";
$agent = null;
switch (io_safe_output($item['type'])) {
case 1:
case 'simple_graph':
break;
case 'simple_baseline_graph':
break;
case 2:
case 'custom_graph':
$graph = db_get_value('name', 'tgraph', 'id_graph', $item['id_gs']);
echo "<graph><![CDATA[" . io_safe_output($graph) . "]]></graph>\n";
break;
case 3:
case 'SLA':
echo "<only_display_wrong>" . $item['only_display_wrong'] . "</only_display_wrong>\n";
echo "<monday>" . $item['monday'] . "</monday>\n";
echo "<tuesday>" . $item['tuesday'] . "</tuesday>\n";
echo "<wednesday>" . $item['wednesday'] . "</wednesday>\n";
echo "<thursday>" . $item['thursday'] . "</thursday>\n";
echo "<friday>" . $item['friday'] . "</friday>\n";
echo "<saturday>" . $item['saturday'] . "</saturday>\n";
echo "<sunday>" . $item['sunday'] . "</sunday>\n";
echo "<time_from>" . $item['time_from'] . "</time_from>\n";
echo "<time_to>" . $item['time_to'] . "</time_to>\n";
$slas = db_get_all_rows_field_filter('treport_content_sla_combined', 'id_report_content', $item['id_rc']);
if ($slas === false) $slas = array();
foreach ($slas as $sla) {
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $sla['id_agent_module']);
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $sla['id_agent_module']);
$agent = agents_get_name($item['id_agent']);
echo "<sla>";
echo "<agent><![CDATA[" . $agent . "]]></agent>\n";
echo "<module><![CDATA[" . io_safe_output($module) . "]]></module>\n";
echo "<sla_max>" . $sla['sla_max'] . "</sla_max>\n";
echo "<sla_min>" . $sla['sla_min'] . "</sla_min>\n";
echo "<sla_limit>" . $sla['sla_limit'] . "</sla_limit>\n";
echo "</sla>";
}
break;
case 6:
case 'monitor_report':
break;
case 7:
case 'avg_value':
break;
case 8:
case 'max_value':
break;
case 9:
case 'min_value':
break;
case 10:
case 'sumatory':
break;
case 'agent_detailed_event':
case 'event_report_agent':
break;
case 'text':
echo "<text><![CDATA[" . io_safe_output($item['text']) . "]]></text>\n";
break;
case 'sql':
echo "<header_definition><![CDATA[" . io_safe_output($item['header_definition']) . "]]></header_definition>\n";
if (!empty($item['external_source'])) {
echo "<sql><![CDATA[" . io_safe_output($item['external_source']) . "]]></sql>\n";
}
else {
$sql = db_get_value('sql', 'treport_custom_sql', 'id', $item['treport_custom_sql_id']);
echo "<sql>" . io_safe_output($sql) . "</sql>\n";
}
break;
case 'sql_graph_pie':
case 'sql_graph_vbar':
case 'sql_graph_hbar':
echo "<header_definition>" . io_safe_output($item['header_definition']) . "</header_definition>\n";
if (!empty($item['external_source'])) {
echo "<sql>" . io_safe_output($item['external_source']) . "</sql>\n";
}
else {
$sql = db_get_value('sql', 'treport_custom_sql', 'id', $item['treport_custom_sql_id']);
echo "<sql>" . io_safe_output($sql) . "</sql>\n";
}
break;
case 'event_report_group':
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $item['id_agent']);
echo "<group><![CDATA[" . io_safe_output($group) . "]]></group>\n";
break;
case 'event_report_module':
break;
case 'alert_report_module':
break;
case 'alert_report_agent':
break;
case 'url':
echo "<url><![CDATA[" . io_safe_output($values["external_source"]) . "]]></url>";
break;
case 'database_serialized':
echo "<header_definition><![CDATA[" . io_safe_output($item["header_definition"]) . "]]></header_definition>";
echo "<line_separator><![CDATA[" . io_safe_output($item["line_separator"]) . "]]></line_separator>";
echo "<column_separator><![CDATA[" . io_safe_output($item["header_definition"]) . "]]></column_separator>";
break;
case 'TTRT':
break;
case 'TTO':
break;
case 'MTBF':
break;
case 'MTTR':
break;
}
echo "</item>\n";
}
echo "</report>\n";
}
function output_xml_visual_console($id) {
$visual_map = db_get_row('tlayout', 'id', $id);
echo '<?xml version="1.0" encoding="UTF-8" ?>' . "\n";
echo "<visual_map>\n";
echo "<name><![CDATA[" . io_safe_output($visual_map['name']) . "]]></name>\n";
if ($visual_map['id_group'] != 0) {
$group = db_get_value('nombre', 'tgrupo', 'id_grupo', $visual_map['id_group']);
echo "<group><![CDATA[" . io_safe_output($group) . "]]></group>\n";
}
echo "<background><![CDATA[" . io_safe_output($visual_map['background']) . "]]></background>\n";
echo "<height>" . io_safe_output($visual_map['height']) . "</height>\n";
echo "<width>" . io_safe_output($visual_map['width']) . "</width>\n";
$items = db_get_all_rows_field_filter('tlayout_data', 'id_layout', $visual_map['id']);
if ($items === false) $items = array();
foreach ($items as $item){
echo "<item>\n";
echo "<other_id>" . $item['id'] . "</other_id>\n"; //OLD ID USE FOR parent item
if (!empty($item['label'])) {
echo "<label><![CDATA[" . io_safe_output($item['label']) . "]]></label>\n";
}
echo "<x>" . $item['pos_x'] . "</x>\n";
echo "<y>" . $item['pos_y'] . "</y>\n";
echo "<type>" . $item['type'] . "</type>\n";
if ($item['width'] != 0) {
echo "<width>" . $item['width'] . "</width>\n";
}
if ($item['height'] != 0) {
echo "<height>" . $item['height'] . "</height>\n";
}
if (!empty($item['image'])) {
echo "<image>" . $item['image'] . "</image>\n";
}
if ($item['period'] != 0) {
echo "<period>" . $item['period'] . "</period>\n";
}
$agent = '';
if ($item['id_agent'] != 0) {
$agent = agents_get_name($item['id_agent']);
}
if (isset($item['id_agente_modulo'])) {
if ($item['id_agente_modulo'] != 0) {
$module = db_get_value('nombre', 'tagente_modulo', 'id_agente_modulo', $item['id_agente_modulo']);
$id_agent = db_get_value('id_agente', 'tagente_modulo', 'id_agente_modulo', $item['id_agente_modulo']);
$agent = agents_get_name($id_agent);
echo "<module><![CDATA[" . io_safe_output($module) . "]]></module>\n";
}
}
if (!empty($agent)) {
echo "<agent><![CDATA[" . $agent . "]]></agent>\n";
}
if ($item['id_layout_linked'] != 0) {
echo "<id_layout_linked>" . $item['id_layout_linked'] . "</id_layout_linked>\n";
}
if ($item['parent_item'] != 0) {
echo "<parent_item>" . $item['parent_item'] . "</parent_item>\n";
}
if (!empty($item['label_color'])) {
echo "<label_color>" . $item['label_color'] . "</label_color>\n";
}
echo "</item>\n";
}
echo "</visual_map>\n";
}
function get_name_xml_resource($hook_enterprise) {
global $config;
$type = get_parameter('type');
$id = (int)get_parameter('id');
switch ($type) {
case 'report':
$name = db_get_value('name', 'treport', 'id_report', $id);
break;
case 'visual_console':
$name = db_get_value('name', 'tlayout', 'id', $id);
break;
default:
if ($hook_enterprise === true)
return enterprise_get_name_xml_resource($type, $id);
break;
}
$file = $name . ".ptr";
return $file;
}
function get_xml_resource() {
global $config;
$hook_enterprise = enterprise_include ('extensions/resource_exportation/functions.php');
}
function resource_exportation_extension_main() {
global $config;
if (! check_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) {
db_pandora_audit("ACL Violation", "Trying to access Setup Management");
require ("general/noaccess.php");
return;
}
$hook_enterprise = enterprise_include ('extensions/resource_exportation/functions.php');
ui_print_page_header (__('Resource exportation'), "images/extensions.png", false, "", true, "" );
echo "<div class=notify>";
echo __("This extension makes exportation of resource template more easy. " .
"Here you can export as a resource template in Pandora FMS 3.x format (.ptr). ");
echo "</div>";
echo "<br /><br />";
$table = null;
$table->width = '98%';
$table->style[0] = 'width: 30%;';
$table->style[1] = 'width: 10%;';
$table->class = "databox_color";
$table->data[0][0] = __('Report');
$table->data[0][1] = html_print_select_from_sql('SELECT id_report, name FROM treport', 'report', '', '', '', 0, true);
$table->data[0][2] = html_print_button(__('Export'), '', false, 'export_to_ptr(\'report\');', 'class="sub"', true);
$table->data[1][0] = __('Visual console');
$table->data[1][1] = html_print_select_from_sql('SELECT id, name FROM tlayout', 'visual_console', '', '', '', 0, true);
$table->data[1][2] = html_print_button(__('Export'), '', false, 'export_to_ptr(\'visual_console\');', 'class="sub"', true);
if ($hook_enterprise === true)
add_rows_for_enterprise($table->data);
html_print_table($table);
?>
<script type="text/javascript">
function export_to_ptr(type) {
id = $("select#" + type + " option:selected").val();
url = location.href.split('index');
url = url[0] + 'extensions/resource_exportation.php?get_ptr=1&type=' + type
+ '&id=' + id;
location.href=url;
}
</script>
<?php
}
?>