546 lines
18 KiB
PHP
546 lines
18 KiB
PHP
<?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.
|
|
|
|
if (is_ajax ()) {
|
|
|
|
global $config;
|
|
|
|
$search_parents_2 = (bool) get_parameter ('search_parents_2');
|
|
|
|
if ($search_parents_2) {
|
|
require_once ('include/functions_agents.php');
|
|
|
|
$id_agent = (int) get_parameter ('id_agent');
|
|
$string = (string) get_parameter ('q'); /* q is what autocomplete plugin gives */
|
|
|
|
$filter = array ();
|
|
|
|
switch ($config['dbtype']) {
|
|
case "mysql":
|
|
case "postgresql":
|
|
$filter[] = '(nombre COLLATE utf8_general_ci LIKE "%' . $string . '%" OR direccion LIKE "%'.$string.'%" OR comentarios LIKE "%'.$string.'%")';
|
|
break;
|
|
case "oracle":
|
|
$filter[] = '(upper(nombre) LIKE upper("%' . $string . '%") OR upper(direccion) LIKE upper("%'.$string.'%") OR upper(comentarios) LIKE upper("%'.$string.'%"))';
|
|
break;
|
|
}
|
|
$filter[] = 'id_agente != ' . $id_agent;
|
|
|
|
$agents = agents_get_agents ($filter, array ('id_agente', 'nombre', 'direccion'));
|
|
if ($agents === false)
|
|
$agents = array();
|
|
|
|
$data = array();
|
|
foreach ($agents as $agent) {
|
|
$data[] = array('id' => $agent['id_agente'],
|
|
'name' => io_safe_output($agent['nombre']),
|
|
'ip' => io_safe_output($agent['direccion']));
|
|
}
|
|
|
|
echo io_json_mb_encode($data);
|
|
|
|
return;
|
|
}
|
|
|
|
$get_modules_json_for_multiple_snmp = (bool) get_parameter("get_modules_json_for_multiple_snmp", 0);
|
|
if ($get_modules_json_for_multiple_snmp) {
|
|
require_once ('include/graphs/functions_utils.php');
|
|
|
|
$idSNMP = get_parameter('id_snmp');
|
|
|
|
$id_snmp_serialize = get_parameter('id_snmp_serialize');
|
|
$snmp = unserialize_in_temp($id_snmp_serialize, false);
|
|
|
|
$oid_snmp = array();
|
|
$out = false;
|
|
foreach ($idSNMP as $id) {
|
|
foreach ($snmp[$id] as $key => $value){
|
|
|
|
// Check if it has "ifXXXX" syntax and skip it
|
|
if (! preg_match ( "/if/", $key)) {
|
|
continue;
|
|
}
|
|
|
|
$oid_snmp[$value['oid']] = $key;
|
|
}
|
|
|
|
if ($out === false) {
|
|
$out = $oid_snmp;
|
|
}
|
|
else {
|
|
$out = array_intersect($out,$oid_snmp);
|
|
}
|
|
|
|
$oid_snmp = array();
|
|
}
|
|
|
|
echo io_json_mb_encode($out);
|
|
}
|
|
|
|
return;
|
|
}
|
|
// Load global vars
|
|
enterprise_include ('godmode/agentes/agent_manager.php');
|
|
|
|
require_once ('include/functions_clippy.php');
|
|
require_once ('include/functions_servers.php');
|
|
require_once ('include/functions_gis.php');
|
|
require_once($config['homedir'] . "/include/functions_agents.php");
|
|
require_once ($config['homedir'] . '/include/functions_users.php');
|
|
|
|
ui_require_javascript_file('openlayers.pandora');
|
|
|
|
$new_agent = (bool) get_parameter ('new_agent');
|
|
|
|
if (! isset ($id_agente) && ! $new_agent) {
|
|
db_pandora_audit("ACL Violation", "Trying to access agent manager witout an agent");
|
|
require ("general/noaccess.php");
|
|
return;
|
|
}
|
|
|
|
if ($new_agent) {
|
|
if (! empty ($direccion_agente) && empty ($nombre_agente))
|
|
$nombre_agente = $direccion_agente;
|
|
|
|
$servers = servers_get_names();
|
|
if (!empty($servers))
|
|
$server_name = reset(array_keys($servers));
|
|
}
|
|
|
|
echo '<div style="height: 5px"> </div>';
|
|
|
|
if (!$new_agent) {
|
|
// Agent remote configuration editor
|
|
enterprise_include_once('include/functions_config_agents.php');
|
|
if (enterprise_installed()) {
|
|
$filename = config_agents_get_agent_config_filenames($id_agente);
|
|
}
|
|
}
|
|
|
|
$disk_conf_delete = (bool) get_parameter ('disk_conf_delete');
|
|
// Agent remote configuration DELETE
|
|
if ($disk_conf_delete) {
|
|
//TODO: Get this working on computers where the Pandora server(s) are not on the webserver
|
|
//TODO: Get a remote_config editor working in the open version
|
|
@unlink ($filename['md5']);
|
|
@unlink ($filename['conf']);
|
|
}
|
|
|
|
echo '<form name="conf_agent" method="post" action="index.php?sec=gagente&sec2=godmode/agentes/configurar_agente">';
|
|
|
|
$table->width = '98%';
|
|
$table->class = "databox_color";
|
|
|
|
$table->head = array ();
|
|
$table->style = array ();
|
|
$table->style[0] = 'font-weight: bold; width: 150px;';
|
|
$table->data = array ();
|
|
|
|
$table->align[2] = 'center';
|
|
|
|
$table->data[0][0] = __('Agent name') .
|
|
ui_print_help_tip (__("The agent's name must be the same as the one defined at the console"), true);
|
|
$table->data[0][1] = html_print_input_text ('agente', $nombre_agente, '', 50, 100,true);
|
|
|
|
$table->data[0][2] = __('QR Code Agent view');
|
|
|
|
if ($id_agente) {
|
|
|
|
$table->data[0][1] .= " <b>" . __("ID") . "</b> $id_agente ";
|
|
$table->data[0][1] .= ' <a href="index.php?sec=gagente&sec2=operation/agentes/ver_agente&id_agente='.$id_agente.'">';
|
|
$table->data[0][1] .= html_print_image ("images/zoom.png",
|
|
true, array ("border" => 0, "title" => __('Agent detail')));
|
|
$table->data[0][1] .= '</a>';
|
|
}
|
|
|
|
// Remote configuration available
|
|
if (!$new_agent) {
|
|
if (isset($filename)) {
|
|
if (file_exists ($filename['md5'])) {
|
|
$agent_name = agents_get_name($id_agente);
|
|
$agent_name = io_safe_output($agent_name);
|
|
$agent_md5 = md5 ($agent_name, false);
|
|
|
|
$table->data[0][1] .= ' ' .
|
|
'<a href="index.php?' .
|
|
'sec=gagente&' .
|
|
'sec2=godmode/agentes/configurar_agente&' .
|
|
'tab=remote_configuration&' .
|
|
'id_agente=' . $id_agente . '&' .
|
|
'disk_conf=' . $agent_md5 . '">';
|
|
$table->data[0][1] .= html_print_image(
|
|
"images/application_edit.png",
|
|
true,
|
|
array("border" => 0,
|
|
"title" => __('This agent can be remotely configured')));
|
|
$table->data[0][1] .= '</a>' .
|
|
ui_print_help_tip (
|
|
__('You can remotely edit this agent configuration'), true);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Delete link from here
|
|
if (!$new_agent) {
|
|
$table->data[0][1] .= " <span align='right'><a onClick=\"if (!confirm('" . __('Are you sure?') . "')) return false;\" href='index.php?sec=gagente&sec2=godmode/agentes/modificar_agente&borrar_agente=$id_agente&search=&offset=0&sort_field=&sort=none'>" . html_print_image('images/cross.png', true, array('title' => __("Delete agent"))) . "</a>";
|
|
}
|
|
|
|
$table->data[1][0] = __('IP Address');
|
|
$table->data[1][1] = html_print_input_text ('direccion', $direccion_agente, '', 16, 100, true);
|
|
|
|
if ($id_agente) {
|
|
$table->data[1][1] .= ' ';
|
|
|
|
$ip_all = agents_get_addresses ($id_agente);
|
|
|
|
$table->data[1][1] .= html_print_select ($ip_all, "address_list", $direccion_agente, '', '', 0, true);
|
|
$table->data[1][1] .= " ". html_print_checkbox ("delete_ip", 1, false, true).__('Delete selected');
|
|
}
|
|
|
|
?>
|
|
<style type="text/css">
|
|
#qr_code_agent_view img {
|
|
display: inline !important;
|
|
}
|
|
</style>
|
|
<?php
|
|
$table->rowspan[1][2] = 7;
|
|
if ($id_agente) {
|
|
$table->data[1][2] =
|
|
"<a id='qr_code_agent_view' href='javascript: show_dialog_qrcode(null, \"" .
|
|
ui_get_full_url('index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=' . $id_agente) . "\" );'></a>";
|
|
}
|
|
else {
|
|
$table->data[1][2] = __("Only it is show when<br />the agent is saved.");
|
|
}
|
|
|
|
$groups = users_get_groups ($config["id_user"], "AR",false);
|
|
$agents = agents_get_group_agents (array_keys ($groups));
|
|
|
|
$table->data[2][0] = __('Parent');
|
|
$params = array();
|
|
$params['return'] = true;
|
|
$params['show_helptip'] = true;
|
|
$params['input_name'] = 'id_parent';
|
|
$params['value'] = agents_get_name ($id_parent);
|
|
$table->data[2][1] = ui_print_agent_autocomplete_input($params);
|
|
|
|
$table->data[2][1] .= html_print_checkbox ("cascade_protection", 1, $cascade_protection, true).__('Cascade protection'). " " . ui_print_help_icon("cascade_protection", true);
|
|
|
|
$table->data[3][0] = __('Group');
|
|
$table->data[3][1] = html_print_select_groups(false, "AR", false, 'grupo', $grupo, '', '', 0, true);
|
|
|
|
$table->data[4][0] = __('Interval');
|
|
|
|
$table->data[4][1] = html_print_extended_select_for_time ('intervalo', $intervalo, '', '', '0', 10, true);
|
|
if($intervalo<300){
|
|
$table->data[4][1] .= clippy_context_help("interval_agent_min");
|
|
}
|
|
$table->data[5][0] = __('OS');
|
|
$table->data[5][1] = html_print_select_from_sql ('SELECT id_os, name FROM tconfig_os',
|
|
'id_os', $id_os, '', '', '0', true);
|
|
$table->data[5][1] .= ' <span id="os_preview">';
|
|
$table->data[5][1] .= ui_print_os_icon ($id_os, false, true);
|
|
$table->data[5][1] .= '</span>';
|
|
|
|
// Network server
|
|
$servers = servers_get_names();
|
|
if (!array_key_exists($server_name, $servers)) {
|
|
$server_Name = 0; //Set the agent have not server.
|
|
}
|
|
$table->data[6][0] = __('Server');
|
|
if ($new_agent) {
|
|
//Set first server by default.
|
|
$server_name = reset(array_keys(servers_get_names()));
|
|
}
|
|
$table->data[6][1] = html_print_select (servers_get_names (),
|
|
'server_name', $server_name, '', __('None'), 0, true). ' ' . ui_print_help_icon ('agent_server', true);
|
|
|
|
// Description
|
|
$table->data[7][0] = __('Description');
|
|
$table->data[7][1] = html_print_input_text ('comentarios', $comentarios,
|
|
'', 45, 255, true);
|
|
|
|
html_print_table ($table);
|
|
unset($table);
|
|
|
|
$table->width = '98%';
|
|
$table->class = "databox_color";
|
|
|
|
$table->head = array ();
|
|
$table->style = array ();
|
|
$table->style[0] = 'font-weight: bold; width: 150px;';
|
|
$table->data = array ();
|
|
|
|
// Custom ID
|
|
$table->data[0][0] = __('Custom ID');
|
|
$table->data[0][1] = html_print_input_text ('custom_id', $custom_id, '', 16, 255, true);
|
|
|
|
// Learn mode / Normal mode
|
|
$table->data[1][0] = __('Module definition') .
|
|
ui_print_help_icon("module_definition", true);
|
|
$table->data[1][1] = __('Learning mode') . ' ' .
|
|
html_print_radio_button_extended ("modo", 1, '', $modo, false, 'show_modules_not_learning_mode_context_help();',
|
|
'style="margin-right: 40px;"', true);
|
|
$table->data[1][1] .= __('Normal mode') . ' ' .
|
|
html_print_radio_button_extended ("modo", 0, '', $modo, false, 'show_modules_not_learning_mode_context_help();',
|
|
'style="margin-right: 40px;"', true);
|
|
|
|
// Status (Disabled / Enabled)
|
|
$table->data[2][0] = __('Status');
|
|
$table->data[2][1] = __('Disabled') . ' ' .
|
|
html_print_radio_button_extended ("disabled", 1, '', $disabled, false, '', 'style="margin-right: 40px;"', true);
|
|
$table->data[2][1] .= __('Active') . ' ' .
|
|
html_print_radio_button_extended ("disabled", 0, '', $disabled, false, '', 'style="margin-right: 40px;"', true);
|
|
|
|
// Remote configuration
|
|
$table->data[3][0] = __('Remote configuration');
|
|
|
|
if (!$new_agent) {
|
|
$table->data[3][1] = '<em>' . __('Not available') . '</em>';
|
|
if (isset($filename)) {
|
|
if (file_exists ($filename['md5'])) {
|
|
$table->data[3][1] = date ("F d Y H:i:s", fileatime ($filename['md5']));
|
|
// Delete remote configuration
|
|
$table->data[3][1] .= '<a href="index.php?' .
|
|
'sec=gagente&' .
|
|
'sec2=godmode/agentes/configurar_agente&' .
|
|
'tab=main&' .
|
|
'disk_conf_delete=1&' .
|
|
'id_agente=' . $id_agente . '">';
|
|
$table->data[3][1] .= html_print_image(
|
|
"images/cross.png", true,
|
|
array ('title' => __('Delete remote configuration file'), 'style' => 'vertical-align: middle;')).'</a>';
|
|
$table->data[3][1] .= '</a>' .
|
|
ui_print_help_tip(
|
|
__('Delete this conf file implies that for restore you must reactive remote config in the local agent.'),
|
|
true);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
$table->data[3][1] = '<em>' . __('Not available') . '</em>';
|
|
|
|
$listIcons = gis_get_array_list_icons();
|
|
|
|
$arraySelectIcon = array();
|
|
foreach ($listIcons as $index => $value)
|
|
$arraySelectIcon[$index] = $index;
|
|
|
|
$path = 'images/gis_map/icons/'; //TODO set better method the path
|
|
$table->data[4][0] = __('Agent icon') . ui_print_help_tip(__('Agent icon for GIS Maps.'), true);
|
|
if ($icon_path == '') {
|
|
$display_icons = 'none';
|
|
// Hack to show no icon. Use any given image to fix not found image errors
|
|
$path_without = "images/spinner.png";
|
|
$path_default = "images/spinner.png";
|
|
$path_ok = "images/spinner.png";
|
|
$path_bad = "images/spinner.png";
|
|
$path_warning = "images/spinner.png";
|
|
}
|
|
else {
|
|
$display_icons = '';
|
|
$path_without = $path . $icon_path . ".default.png";
|
|
$path_default = $path . $icon_path . ".default.png";
|
|
$path_ok = $path . $icon_path . ".ok.png";
|
|
$path_bad = $path . $icon_path . ".bad.png";
|
|
$path_warning = $path . $icon_path . ".warning.png";
|
|
}
|
|
|
|
$table->data[4][1] = html_print_select($arraySelectIcon, "icon_path",
|
|
$icon_path, "changeIcons();", __('None'), '', true) .
|
|
' ' . html_print_image($path_ok, true,
|
|
array("id" => "icon_ok", "style" => "display:".$display_icons.";")) .
|
|
' ' . html_print_image($path_bad, true,
|
|
array("id" => "icon_bad", "style" => "display:".$display_icons.";")) .
|
|
' ' . html_print_image($path_warning, true,
|
|
array("id" => "icon_warning", "style" => "display:".$display_icons.";"));
|
|
|
|
if ($config['activate_gis']) {
|
|
$table->data[5][0] = __('Ignore new GIS data:');
|
|
$table->data[5][1] = __('Yes') . ' ' .
|
|
html_print_radio_button_extended ("update_gis_data", 0, '',
|
|
$update_gis_data, false, '', 'style="margin-right: 40px;"', true);
|
|
$table->data[5][1] .= __('No') . ' ' .
|
|
html_print_radio_button_extended ("update_gis_data", 1, '',
|
|
$update_gis_data, false, '', 'style="margin-right: 40px;"', true);
|
|
}
|
|
|
|
$table->data[6][0] = __('Url address');
|
|
$table->data[6][1] = html_print_input_text ('url_description',
|
|
$url_description, '', 45, 255, true);
|
|
|
|
$table->data[7][0] = __('Quiet');
|
|
$table->data[7][0] .= ui_print_help_tip(
|
|
__('The agent still runs but the alerts and events will be stop'), true);
|
|
$table->data[7][1] = html_print_checkbox('quiet', 1, $quiet, true);
|
|
|
|
ui_toggle(html_print_table ($table, true), __('Advanced options'));
|
|
unset($table);
|
|
|
|
$table->width = '98%';
|
|
$table->class = "databox_color";
|
|
|
|
$table->head = array ();
|
|
$table->style = array ();
|
|
$table->style[0] = 'font-weight: bold; width: 150px;';
|
|
$table->data = array ();
|
|
|
|
$fields = db_get_all_fields_in_table('tagent_custom_fields');
|
|
|
|
if ($fields === false) $fields = array();
|
|
|
|
foreach ($fields as $field) {
|
|
|
|
$data[0] = '<b>'.$field['name'].'</b>';
|
|
|
|
$custom_value = db_get_value_filter('description',
|
|
'tagent_custom_data',
|
|
array('id_field' => $field['id_field'], 'id_agent' => $id_agente));
|
|
|
|
if ($custom_value === false) {
|
|
$custom_value = '';
|
|
}
|
|
|
|
$data[1] = html_print_textarea ('customvalue_'.$field['id_field'],
|
|
2, 65, $custom_value, 'style="min-height: 30px;"', true);
|
|
|
|
array_push ($table->data, $data);
|
|
}
|
|
|
|
if (!empty($fields)) {
|
|
ui_toggle(html_print_table ($table, true), __('Custom fields'));
|
|
}
|
|
|
|
echo '<div class="action-buttons" style="width: ' . $table->width . '">';
|
|
|
|
|
|
//The context help about the learning mode
|
|
if ($modo == 0) {
|
|
echo "<span id='modules_not_learning_mode_context_help' style=''>";
|
|
}
|
|
else {
|
|
echo "<span id='modules_not_learning_mode_context_help' style='display: none;'>";
|
|
}
|
|
echo clippy_context_help("modules_not_learning_mode");
|
|
echo "</span>";
|
|
|
|
|
|
|
|
if ($id_agente) {
|
|
|
|
html_print_submit_button (__('Update'), 'updbutton', false,
|
|
'class="sub upd"');
|
|
html_print_input_hidden ('update_agent', 1);
|
|
html_print_input_hidden ('id_agente', $id_agente);
|
|
}
|
|
else {
|
|
html_print_submit_button (__('Create'), 'crtbutton', false,
|
|
'class="sub wand"');
|
|
html_print_input_hidden ('create_agent', 1);
|
|
}
|
|
echo '</div></form>';
|
|
|
|
ui_require_jquery_file ('pandora.controls');
|
|
ui_require_jquery_file ('ajaxqueue');
|
|
ui_require_jquery_file ('bgiframe');
|
|
ui_require_javascript_file('tiny_mce', 'include/javascript/tiny_mce/');
|
|
?>
|
|
<script type="text/javascript">
|
|
/* <![CDATA[ */
|
|
|
|
//Use this function for change 3 icons when change the selectbox
|
|
function changeIcons() {
|
|
icon = $("#icon_path :selected").val();
|
|
|
|
$("#icon_without_status").attr("src", "images/spinner.png");
|
|
$("#icon_default").attr("src", "images/spinner.png");
|
|
$("#icon_ok").attr("src", "images/spinner.png");
|
|
$("#icon_bad").attr("src", "images/spinner.png");
|
|
$("#icon_warning").attr("src", "images/spinner.png");
|
|
|
|
if (icon.length == 0) {
|
|
$("#icon_without_status").attr("style", "display:none;");
|
|
$("#icon_default").attr("style", "display:none;");
|
|
$("#icon_ok").attr("style", "display:none;");
|
|
$("#icon_bad").attr("style", "display:none;");
|
|
$("#icon_warning").attr("style", "display:none;");
|
|
}
|
|
else {
|
|
$("#icon_without_status").attr("src",
|
|
"<?php echo $path; ?>" + icon + ".default.png");
|
|
$("#icon_default").attr("src",
|
|
"<?php echo $path; ?>" + icon + ".default.png");
|
|
$("#icon_ok").attr("src",
|
|
"<?php echo $path; ?>" + icon + ".ok.png");
|
|
$("#icon_bad").attr("src",
|
|
"<?php echo $path; ?>" + icon + ".bad.png");
|
|
$("#icon_warning").attr("src",
|
|
"<?php echo $path; ?>" + icon + ".warning.png");
|
|
$("#icon_without_status").attr("style", "");
|
|
$("#icon_default").attr("style", "");
|
|
$("#icon_ok").attr("style", "");
|
|
$("#icon_bad").attr("style", "");
|
|
$("#icon_warning").attr("style", "");
|
|
}
|
|
|
|
//$("#icon_default").attr("src", "<?php echo $path; ?>" + icon +
|
|
}
|
|
|
|
function show_modules_not_learning_mode_context_help() {
|
|
if ($("input[name='modo'][value=1]").is(':checked')) {
|
|
$("#modules_not_learning_mode_context_help").hide();
|
|
}
|
|
else {
|
|
$("#modules_not_learning_mode_context_help").show();
|
|
}
|
|
}
|
|
|
|
$(document).ready (function () {
|
|
$("select#id_os").pandoraSelectOS ();
|
|
|
|
paint_qrcode(
|
|
"<?php
|
|
echo ui_get_full_url('index.php?sec=estado&sec2=operation/agentes/ver_agente&id_agente=' . $id_agente);
|
|
?>",
|
|
"#qr_code_agent_view", 128, 128);
|
|
});
|
|
|
|
$(document).ready(function() {
|
|
tinyMCE.init({
|
|
mode : "exact",
|
|
elements: <?php
|
|
|
|
$elements = array('comentarios');
|
|
|
|
foreach ($fields as $field) {
|
|
$elements[] = 'customvalue_' . $field['id_field'];
|
|
}
|
|
|
|
echo '"' . implode(', ', $elements) . '"';
|
|
?>,
|
|
width: 300,
|
|
theme : "advanced",
|
|
theme_advanced_path : false,
|
|
statusbar : false,
|
|
plugins: "bbcode",
|
|
theme_advanced_toolbar_location : "top",
|
|
theme_advanced_toolbar_align : "left",
|
|
theme_advanced_buttons1 : "undo, redo, | , link, unlink"
|
|
});
|
|
});
|
|
/* ]]> */
|
|
</script>
|