406 lines
12 KiB
PHP
406 lines
12 KiB
PHP
<?php
|
|
// Pandora FMS - http://pandorafms.com
|
|
// ==================================================
|
|
// Copyright (c) 2005-2021 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.
|
|
class Alerts
|
|
{
|
|
|
|
private $correct_acl = false;
|
|
|
|
private $acl = 'LM';
|
|
|
|
private $default = true;
|
|
|
|
private $default_filters = [];
|
|
|
|
private $free_search = '';
|
|
|
|
private $group = 0;
|
|
|
|
private $status = 'all';
|
|
|
|
private $standby = -1;
|
|
|
|
private $id_agent = 0;
|
|
|
|
private $all_alerts = false;
|
|
|
|
private $alert_status_items = null;
|
|
|
|
private $alert_standby_items = null;
|
|
|
|
private $columns = null;
|
|
|
|
|
|
function __construct()
|
|
{
|
|
$this->alert_status_items = [
|
|
'all_enabled' => __('All (Enabled)'),
|
|
'all' => __('All'),
|
|
'fired' => __('Fired'),
|
|
'notfired' => __('Not fired'),
|
|
'disabled' => __('Disabled'),
|
|
];
|
|
|
|
$this->alert_standby_items = [
|
|
'-1' => __('All'),
|
|
'1' => __('Standby on'),
|
|
'0' => __('Standby off'),
|
|
];
|
|
|
|
$this->columns = ['agent' => 1];
|
|
|
|
$system = System::getInstance();
|
|
|
|
if ($system->checkACL($this->acl)) {
|
|
$this->correct_acl = true;
|
|
} else {
|
|
$this->correct_acl = false;
|
|
}
|
|
}
|
|
|
|
|
|
private function alertsGetFilters()
|
|
{
|
|
$system = System::getInstance();
|
|
$user = User::getInstance();
|
|
|
|
$this->default_filters['standby'] = true;
|
|
$this->default_filters['group'] = true;
|
|
$this->default_filters['status'] = true;
|
|
$this->default_filters['free_search'] = true;
|
|
|
|
$this->free_search = $system->getRequest('free_search', '');
|
|
if ($this->free_search != '') {
|
|
$this->default = false;
|
|
$this->default_filters['free_search'] = false;
|
|
}
|
|
|
|
$this->status = $system->getRequest('status', __('Status'));
|
|
if (($this->status === __('Status')) || ($this->status == 'all')) {
|
|
$this->status = 'all';
|
|
} else {
|
|
$this->default = false;
|
|
$this->default_filters['status'] = false;
|
|
}
|
|
|
|
$this->group = $system->getRequest('group', __('Group'));
|
|
if (!$user->isInGroup($this->acl, $this->group)) {
|
|
$this->group = 0;
|
|
}
|
|
|
|
if (($this->group === __('Group')) || ($this->group == 0)) {
|
|
$this->group = 0;
|
|
} else {
|
|
$this->default = false;
|
|
$this->default_filters['group'] = false;
|
|
}
|
|
|
|
$this->standby = $system->getRequest('standby', __('Stand by'));
|
|
if (($this->standby === __('Stand by')) || ($this->standby == -1)) {
|
|
$this->standby = -1;
|
|
} else {
|
|
$this->default = false;
|
|
$this->default_filters['standby'] = false;
|
|
}
|
|
}
|
|
|
|
|
|
public function setFilters($filters)
|
|
{
|
|
if (isset($filters['id_agent'])) {
|
|
$this->id_agent = $filters['id_agent'];
|
|
}
|
|
|
|
if (isset($filters['all_alerts'])) {
|
|
$this->all_alerts = $filters['all_alerts'];
|
|
}
|
|
}
|
|
|
|
|
|
public function ajax($parameter2=false)
|
|
{
|
|
$system = System::getInstance();
|
|
|
|
if (!$this->correct_acl) {
|
|
return;
|
|
} else {
|
|
switch ($parameter2) {
|
|
case 'xxxx':
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public function show()
|
|
{
|
|
if (!$this->correct_acl) {
|
|
$this->show_fail_acl();
|
|
} else {
|
|
$this->alertsGetFilters();
|
|
$this->show_alerts();
|
|
}
|
|
}
|
|
|
|
|
|
private function show_fail_acl()
|
|
{
|
|
$error['type'] = 'onStart';
|
|
$error['title_text'] = __('You don\'t have access to this page');
|
|
$error['content_text'] = System::getDefaultACLFailText();
|
|
if (class_exists('HomeEnterprise')) {
|
|
$home = new HomeEnterprise();
|
|
} else {
|
|
$home = new Home();
|
|
}
|
|
|
|
$home->show($error);
|
|
}
|
|
|
|
|
|
private function show_alerts()
|
|
{
|
|
$ui = Ui::getInstance();
|
|
|
|
$ui->createPage();
|
|
$ui->createDefaultHeader(
|
|
__('Alerts'),
|
|
$ui->createHeaderButton(
|
|
[
|
|
'icon' => 'back',
|
|
'pos' => 'left',
|
|
'text' => __('Back'),
|
|
'href' => 'index.php?page=home',
|
|
]
|
|
)
|
|
);
|
|
$ui->showFooter(false);
|
|
$ui->beginContent();
|
|
$filter_title = sprintf(
|
|
__('Filter Alerts by %s'),
|
|
$this->filterAlertsGetString()
|
|
);
|
|
$ui->contentBeginCollapsible($filter_title);
|
|
$ui->beginForm();
|
|
$options = [
|
|
'name' => 'page',
|
|
'type' => 'hidden',
|
|
'value' => 'alerts',
|
|
];
|
|
$ui->formAddInput($options);
|
|
|
|
$system = System::getInstance();
|
|
$groups = users_get_groups_for_select(
|
|
$system->getConfig('id_user'),
|
|
'ER',
|
|
true,
|
|
true,
|
|
false,
|
|
'id_grupo'
|
|
);
|
|
$options = [
|
|
'name' => 'group',
|
|
'title' => __('Group'),
|
|
'label' => __('Group'),
|
|
'items' => $groups,
|
|
'selected' => $this->group,
|
|
];
|
|
$ui->formAddSelectBox($options);
|
|
|
|
$options = [
|
|
'name' => 'free_search',
|
|
'value' => $this->free_search,
|
|
'placeholder' => __('Free search'),
|
|
];
|
|
$ui->formAddInputSearch($options);
|
|
|
|
$options = [
|
|
'name' => 'status',
|
|
'title' => __('Status'),
|
|
'label' => __('Status'),
|
|
'items' => $this->alert_status_items,
|
|
'selected' => $this->status,
|
|
];
|
|
$ui->formAddSelectBox($options);
|
|
|
|
$options = [
|
|
'name' => 'standby',
|
|
'title' => __('Stand by'),
|
|
'label' => __('Stand by'),
|
|
'items' => $this->alert_standby_items,
|
|
'selected' => $this->standby,
|
|
];
|
|
$ui->formAddSelectBox($options);
|
|
|
|
$options = [
|
|
'icon' => 'refresh',
|
|
'icon_pos' => 'right',
|
|
'text' => __('Apply Filter'),
|
|
];
|
|
$ui->formAddSubmitButton($options);
|
|
|
|
$html = $ui->getEndForm();
|
|
$ui->contentCollapsibleAddItem($html);
|
|
$ui->contentEndCollapsible();
|
|
$this->listAlertsHtml();
|
|
$ui->endContent();
|
|
$ui->showPage();
|
|
}
|
|
|
|
|
|
public function disabledColumns($columns=null)
|
|
{
|
|
if (!empty($columns)) {
|
|
foreach ($columns as $column) {
|
|
unset($this->columns[$column]);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public function listAlertsHtml($return=false)
|
|
{
|
|
$countAlerts = alerts_get_alerts(
|
|
$this->group,
|
|
$this->free_search,
|
|
$this->status,
|
|
$this->standby,
|
|
'AR',
|
|
true,
|
|
$this->id_agent
|
|
);
|
|
|
|
$alerts = alerts_get_alerts(
|
|
$this->group,
|
|
$this->free_search,
|
|
$this->status,
|
|
$this->standby,
|
|
'AR',
|
|
false,
|
|
$this->id_agent
|
|
);
|
|
if (empty($alerts)) {
|
|
$alerts = [];
|
|
}
|
|
|
|
$table = [];
|
|
foreach ($alerts as $alert) {
|
|
if ($alert['alert_disabled']) {
|
|
$disabled_style = "<i style='color: grey;'>%s</i>";
|
|
} else {
|
|
$disabled_style = '%s';
|
|
}
|
|
|
|
if ($alert['times_fired'] > 0) {
|
|
$status = STATUS_ALERT_FIRED;
|
|
$title = __('Alert fired').' '.$alert['internal_counter'].' '.__('time(s)');
|
|
} else if ($alert['disabled'] > 0) {
|
|
$status = STATUS_ALERT_DISABLED;
|
|
$title = __('Alert disabled');
|
|
} else {
|
|
$status = STATUS_ALERT_NOT_FIRED;
|
|
$title = __('Alert not fired');
|
|
}
|
|
|
|
$row = [];
|
|
if (isset($this->columns['agent']) && $this->columns['agent']) {
|
|
$row[__('Agent')] = sprintf($disabled_style, io_safe_output($alert['agent_alias']));
|
|
}
|
|
|
|
$row[__('Module')] = sprintf(
|
|
$disabled_style,
|
|
io_safe_output($alert['module_name'])
|
|
);
|
|
$row[__('Template')] = sprintf(
|
|
$disabled_style,
|
|
io_safe_output($alert['template_name'])
|
|
);
|
|
$row[__('Last Fired')] = sprintf(
|
|
$disabled_style,
|
|
ui_print_timestamp($alert['last_fired'], true)
|
|
);
|
|
$row[__('Status')] = ui_print_status_image($status, $title, true);
|
|
|
|
$table[] = $row;
|
|
}
|
|
|
|
$ui = UI::getInstance();
|
|
if (empty($table)) {
|
|
$html = '<p class="empty_advice">'.__('No alerts').'</p>';
|
|
if (!$return) {
|
|
$ui->contentAddHtml($html);
|
|
} else {
|
|
return $html;
|
|
}
|
|
} else {
|
|
$tableHTML = new Table();
|
|
$tableHTML->id = 'list_alerts';
|
|
$tableHTML->importFromHash($table);
|
|
if (!$return) {
|
|
$ui->contentAddHtml($tableHTML->getHTML());
|
|
} else {
|
|
return $tableHTML->getHTML();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
private function filterAlertsGetString()
|
|
{
|
|
if ($this->default) {
|
|
return __('(Default)');
|
|
} else {
|
|
$filters_to_serialize = [];
|
|
|
|
if (!$this->default_filters['standby']) {
|
|
$filters_to_serialize[] = sprintf(
|
|
__('Standby: %s'),
|
|
$this->alert_standby_items[$this->standby]
|
|
);
|
|
}
|
|
|
|
if (!$this->default_filters['group']) {
|
|
$filters_to_serialize[] = sprintf(
|
|
__('Group: %s'),
|
|
groups_get_name($this->group, true)
|
|
);
|
|
}
|
|
|
|
if (!$this->default_filters['status']) {
|
|
$filters_to_serialize[] = sprintf(
|
|
__('Status: %s'),
|
|
$this->alert_status_items[$this->status]
|
|
);
|
|
}
|
|
|
|
if (!$this->default_filters['free_search']) {
|
|
$filters_to_serialize[] = sprintf(
|
|
__('Free Search: %s'),
|
|
$this->free_search
|
|
);
|
|
}
|
|
|
|
$string = '('.implode(' - ', $filters_to_serialize).')';
|
|
|
|
return $string;
|
|
|
|
// ~ $status_text = $this->alert_status_items[$this->status];
|
|
// ~ $standby_text = $this->alert_standby_items[$this->standby];
|
|
// ~ $group_text = groups_get_name($this->group, true);
|
|
// ~ return sprintf(__('(Status: %s - Standby: %s - Group: %s - Free Search: %s)'),
|
|
// ~ $status_text, $standby_text, $group_text, $this->free_search);
|
|
}
|
|
}
|
|
|
|
|
|
}
|