<?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. include_once("../include/functions_users.php"); class Agent { private $correct_acl = false; private $id = 0; private $agent = null; function __construct() { $system = System::getInstance(); $this->id = $system->getRequest('id', 0); $this->agent = agents_get_agents(array( 'disabled' => 0, 'id_agente' => $this->id), array('*')); if (!empty($this->agent)) { $this->agent = $this->agent[0]; if ($system->checkACL('AR', $this->agent['id_grupo'])) { $this->correct_acl = true; } else { $this->correct_acl = false; } } else { $this->agent = null; $this->correct_acl = true; } } public function show() { if (!$this->correct_acl) { $this->show_fail_acl(); } else { $this->show_agent(); } } private function show_fail_acl() { $error['type'] = 'onStart'; $error['title_text'] = __('You don\'t have access to this page'); $error['content_text'] = __('Access to this page is restricted to authorized users only, please contact system administrator if you need assistance. <br><br>Please know that all attempts to access this page are recorded in security logs of Pandora System Database'); if (class_exists("HomeEnterprise")) $home = new HomeEnterprise(); else $home = new Home(); $home->show($error); } public function ajax($parameter2 = false) { $system = System::getInstance(); if (!$this->correct_acl) { return; } else { switch ($parameter2) { case 'render_events_bar': $agent_id = $system->getRequest('agent_id', '0'); $width = $system->getRequest('width', '400'); graph_graphic_agentevents( $this->id, $width, 30, SECONDS_1DAY, ui_get_full_url(false)); exit; } } } private function show_agent() { $ui = Ui::getInstance(); $system = System::getInstance(); $ui->createPage(); if ($this->id != 0) { $agent_name = (string) agents_get_name ($this->id); $ui->createDefaultHeader( sprintf('%s', $agent_name), $ui->createHeaderButton( array('icon' => 'back', 'pos' => 'left', 'text' => __('Back'), 'href' => 'index.php?page=agents'))); } else { $ui->createDefaultHeader(__("PandoraFMS: Agents")); } $ui->showFooter(false); $ui->beginContent(); if (empty($this->agent)) { $ui->contentAddHtml('<span style="color: red;">' . __('No agent found') . '</span>'); } else { $ui->contentBeginGrid(); if ($this->agent['disabled']) { $agent_name = "<em>" . $agent_name . "</em>" . ui_print_help_tip(__('Disabled'), true); } else if ($this->agent['quiet']) { $agent_name = "<em>" . $agent_name . " " . html_print_image("images/dot_green.disabled.png", true, array("border" => '0', "title" => __('Quiet'), "alt" => "")) . "</em>"; } else { $agent_name = $agent_name; } $addresses = agents_get_addresses($this->id); $address = agents_get_address($this->id); foreach ($addresses as $k => $add) { if ($add == $address) { unset($addresses[$k]); } } $ip = html_print_image('images/world.png', true, array('title' => __('IP address'))) . ' '; $ip .= empty($address) ? '<em>' . __('N/A') . '</em>' : $address; if (!empty($addresses)) { $ip .= ui_print_help_tip(__('Other IP addresses').': <br>'.implode('<br>',$addresses), true); } $ip .= '<br />'; $last_contact = '<b>' . __('Last contact') . '</b>: ' .ui_print_timestamp ($this->agent["ultimo_contacto"], true) . '<br />'; $description = '<b>' . __('Description') . ':</b><br>'; if (empty($agent["comentarios"])) { $description .= '<i>' . __('N/A') . '</i>'; } else { $description .= ui_bbcode_to_html($this->agent["comentarios"]); } $html = '<div class="agent_details">'; $html .= ui_print_group_icon ($this->agent["id_grupo"], true, "groups_small", "", false) . ' '; $html .= '<span class="agent_name">' . $agent_name . '</span><br />'; $html .= $ip; $html .= $last_contact; $html .= $description; $html .= '</div>'; $ui->contentGridAddCell($html, 'agent_details'); ob_start(); $html = '<div class="agent_graphs">'; $html .= "<b>" . __('Modules by status') . "</b><br />"; $html .= graph_agent_status ($this->id, 160, 160, true); $graph_js = ob_get_clean(); $html = $graph_js . $html; unset($this->agent['fired_count']); if ($this->agent['total_count'] > 0) { $html .= '<span class="agents_tiny_stats agents_tiny_stats_tactical">' . reporting_tiny_stats($this->agent, true) . ' </span><br>'; } $html .= "<b>" . __('Events (24h)') . "</b><br /><br />"; $html .= '<div id="events_bar"></div>'; $html .= '<br>'; $html .= '</div>'; $ui->contentGridAddCell($html, 'agent_graphs'); $ui->contentEndGrid(); $modules = new Modules(); $filters = array('id_agent' => $this->id, 'all_modules' => true, 'status' => -1); $modules->setFilters($filters); $modules->disabledColumns(array('agent')); $ui->contentBeginCollapsible(__('Modules')); $ui->contentCollapsibleAddItem($modules->listModulesHtml(0, true)); $ui->contentEndCollapsible(); $alerts = new Alerts(); $filters = array('id_agent' => $this->id, 'all_alerts' => true); $alerts->setFilters($filters); $alerts->disabledColumns(array('agent')); $ui->contentBeginCollapsible(__('Alerts')); $ui->contentCollapsibleAddItem($alerts->listAlertsHtml(true)); $ui->contentEndCollapsible(); $events = new Events(); $events->addJavascriptDialog(); $options = $events->get_event_dialog_options(); $ui->addDialog($options); $options = $events->get_event_dialog_error_options($options); $ui->addDialog($options); $ui->contentAddHtml("<a id='detail_event_dialog_hook' href='#detail_event_dialog' style='display:none;'>detail_event_hook</a>"); $ui->contentAddHtml("<a id='detail_event_dialog_error_hook' href='#detail_event_dialog_error' style='display:none;'>detail_event_dialog_error_hook</a>"); $ui->contentBeginCollapsible(sprintf(__('Last %s Events'), $system->getPageSize())); $tabledata = $events->listEventsHtml(0, true, 'last_agent_events'); $ui->contentCollapsibleAddItem($tabledata['table']); $ui->contentCollapsibleAddItem($events->putEventsTableJS($this->id)); $ui->contentEndCollapsible(); } $ui->contentAddLinkListener('last_agent_events'); $ui->contentAddLinkListener('list_events'); $ui->contentAddLinkListener('list_agent_Modules'); $ui->contentAddHtml("<script type=\"text/javascript\"> $(document).ready(function() { function set_same_heigth() { //Set same height to boxes var max_height = 0; if ($('.agent_details').height() > $('.agent_graphs').height()) { max_height = $('.agent_details').height(); $('.agent_graphs').height(max_height); } else { max_height = $('.agent_graphs').height(); $('.agent_details').height(max_height); } } if ($('.ui-block-a').css('float') != 'none') { set_same_heigth(); } $('.ui-collapsible').bind('expand', function () { refresh_link_listener_last_agent_events(); refresh_link_listener_list_agent_Modules(); }); function ajax_load_events_bar() { $('#events_bar').html('<div style=\"text-align: center\"> " . __('Loading...') . "<br /><img src=\"images/ajax-loader.gif\" /></div>'); var bar_width = $('.agent_graphs').width() * 0.9; postvars = {}; postvars[\"action\"] = \"ajax\"; postvars[\"parameter1\"] = \"agent\"; postvars[\"parameter2\"] = \"render_events_bar\"; postvars[\"agent_id\"] = \"" . $this->id . "\"; postvars[\"width\"] = bar_width; $.post(\"index.php\", postvars, function (data) { $('#events_bar').html(data); if ($('.ui-block-a').css('float') != 'none') { set_same_heigth(); } }, \"html\"); } ajax_load_events_bar(); // Detect orientation change to refresh dinamic content $(window).on({ orientationchange: function(e) { // Refresh events bar ajax_load_events_bar(); // Keep same height on boxes if ($('.ui-block-a').css('float') == 'none') { $('.agent_graphs').height('auto'); $('.agent_details').height('auto'); } else { set_same_heigth(); } } }); if ($('.ui-block-a').css('float') != 'none') { set_same_heigth(); } }); </script>"); $ui->endContent(); $ui->showPage(); } }