" imported
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5
diff --git a/pandora_agents/unix/DEBIAN/control b/pandora_agents/unix/DEBIAN/control
index 8be1382079..6565816416 100644
--- a/pandora_agents/unix/DEBIAN/control
+++ b/pandora_agents/unix/DEBIAN/control
@@ -1,5 +1,5 @@
package: pandorafms-agent-unix
-Version: 6.1dev-160329
+Version: 6.1dev-160420
Architecture: all
Priority: optional
Section: admin
diff --git a/pandora_agents/unix/DEBIAN/make_deb_package.sh b/pandora_agents/unix/DEBIAN/make_deb_package.sh
index e0527a44d5..e8f3e58f2a 100644
--- a/pandora_agents/unix/DEBIAN/make_deb_package.sh
+++ b/pandora_agents/unix/DEBIAN/make_deb_package.sh
@@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-pandora_version="6.1dev-160329"
+pandora_version="6.1dev-160420"
echo "Test if you has the tools for to make the packages."
whereis dpkg-deb | cut -d":" -f2 | grep dpkg-deb > /dev/null
diff --git a/pandora_agents/unix/pandora_agent b/pandora_agents/unix/pandora_agent
index 418c0e9395..bb1adc1844 100644
--- a/pandora_agents/unix/pandora_agent
+++ b/pandora_agents/unix/pandora_agent
@@ -41,7 +41,7 @@ my $Sem = undef;
my $ThreadSem = undef;
use constant AGENT_VERSION => '6.1dev';
-use constant AGENT_BUILD => '160329';
+use constant AGENT_BUILD => '160420';
# Commands to retrieve total memory information in kB
use constant TOTALMEMORY_CMDS => {
diff --git a/pandora_agents/unix/pandora_agent.redhat.spec b/pandora_agents/unix/pandora_agent.redhat.spec
index ce49c0982c..2c4ba35dde 100644
--- a/pandora_agents/unix/pandora_agent.redhat.spec
+++ b/pandora_agents/unix/pandora_agent.redhat.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_agent_unix
%define version 6.1dev
-%define release 160329
+%define release 160420
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}
diff --git a/pandora_agents/unix/pandora_agent.spec b/pandora_agents/unix/pandora_agent.spec
index 44ca4d8a74..27cf019463 100644
--- a/pandora_agents/unix/pandora_agent.spec
+++ b/pandora_agents/unix/pandora_agent.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_agent_unix
%define version 6.1dev
-%define release 160329
+%define release 160420
Summary: Pandora FMS Linux agent, PERL version
Name: %{name}
diff --git a/pandora_agents/unix/pandora_agent_installer b/pandora_agents/unix/pandora_agent_installer
index 387ea09553..3fc7026c4d 100644
--- a/pandora_agents/unix/pandora_agent_installer
+++ b/pandora_agents/unix/pandora_agent_installer
@@ -10,7 +10,7 @@
# **********************************************************************
PI_VERSION="6.1dev"
-PI_BUILD="160329"
+PI_BUILD="160420"
OS_NAME=`uname -s`
FORCE=0
diff --git a/pandora_agents/win32/installer/pandora.mpi b/pandora_agents/win32/installer/pandora.mpi
index c1d53be169..a3d4405d58 100644
--- a/pandora_agents/win32/installer/pandora.mpi
+++ b/pandora_agents/win32/installer/pandora.mpi
@@ -186,7 +186,7 @@ UpgradeApplicationID
{}
Version
-{160329}
+{160420}
ViewReadme
{Yes}
diff --git a/pandora_agents/win32/pandora.cc b/pandora_agents/win32/pandora.cc
index 699aba0038..7f77f928d0 100644
--- a/pandora_agents/win32/pandora.cc
+++ b/pandora_agents/win32/pandora.cc
@@ -30,7 +30,7 @@ using namespace Pandora;
using namespace Pandora_Strutils;
#define PATH_SIZE _MAX_PATH+1
-#define PANDORA_VERSION ("6.1dev(Build 160329)")
+#define PANDORA_VERSION ("6.1dev(Build 160420)")
string pandora_path;
string pandora_dir;
diff --git a/pandora_agents/win32/versioninfo.rc b/pandora_agents/win32/versioninfo.rc
index 243098ffb7..038c44fd39 100644
--- a/pandora_agents/win32/versioninfo.rc
+++ b/pandora_agents/win32/versioninfo.rc
@@ -11,7 +11,7 @@ BEGIN
VALUE "LegalCopyright", "Artica ST"
VALUE "OriginalFilename", "PandoraAgent.exe"
VALUE "ProductName", "Pandora FMS Windows Agent"
- VALUE "ProductVersion", "(6.1dev(Build 160329))"
+ VALUE "ProductVersion", "(6.1dev(Build 160420))"
VALUE "FileVersion", "1.0.0.0"
END
END
diff --git a/pandora_console/DEBIAN/control b/pandora_console/DEBIAN/control
index 6a0c3adb9e..3812870e4b 100644
--- a/pandora_console/DEBIAN/control
+++ b/pandora_console/DEBIAN/control
@@ -1,5 +1,5 @@
package: pandorafms-console
-Version: 6.1dev-160329
+Version: 6.1dev-160420
Architecture: all
Priority: optional
Section: admin
diff --git a/pandora_console/DEBIAN/make_deb_package.sh b/pandora_console/DEBIAN/make_deb_package.sh
index fac407aa3a..0711bbfc11 100644
--- a/pandora_console/DEBIAN/make_deb_package.sh
+++ b/pandora_console/DEBIAN/make_deb_package.sh
@@ -14,7 +14,7 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
-pandora_version="6.1dev-160329"
+pandora_version="6.1dev-160420"
package_pear=0
package_pandora=1
diff --git a/pandora_console/extras/pandoradb_migrate_6.0_to_6.1.mysql.sql b/pandora_console/extras/pandoradb_migrate_6.0_to_6.1.mysql.sql
index 831efe6859..f6c5709604 100644
--- a/pandora_console/extras/pandoradb_migrate_6.0_to_6.1.mysql.sql
+++ b/pandora_console/extras/pandoradb_migrate_6.0_to_6.1.mysql.sql
@@ -9,3 +9,28 @@ ALTER TABLE talert_templates ADD COLUMN `min_alerts_reset_counter` tinyint(1) DE
-- ----------------------------------------------------------------------
ALTER TABLE tserver ADD COLUMN `server_keepalive` int(11) DEFAULT 0;
+
+-- ----------------------------------------------------------------------
+-- Table `tagente_estado`
+-- ----------------------------------------------------------------------
+
+ALTER TABLE tagente_estado MODIFY `status_changes` tinyint(4) unsigned default 0;
+
+-- ---------------------------------------------------------------------
+-- Table `talert_actions`
+-- ---------------------------------------------------------------------
+UPDATE talert_actions SET `field4` = 'integria',
+ `field5` = '_agent_: _alert_name_',
+ `field6` = '1',
+ `field7` = '3',
+ `field8` = 'copy@dom.com',
+ `field9` = 'admin',
+ `field10` = '_alert_description_'
+WHERE `id` = 4 AND `id_alert_command` = 11;
+
+-- ---------------------------------------------------------------------
+-- Table `talert_commands`
+-- ---------------------------------------------------------------------
+UPDATE `talert_commands` SET `fields_descriptions` = '[\"Integria IMS API path\",\"Integria IMS API pass\",\"Integria IMS user\",\"Integria IMS user pass\",\"Ticket title\",\"Ticket group ID\",\"Ticket priority\",\"Email copy\",\"Ticket owner\",\"Ticket description\"]', `fields_values` = '[\"\",\"\",\"\",\"\",\"\",\"\",\"10,Maintenance;0,Informative;1,Low;2,Medium;3,Serious;4,Very Serious\",\"\",\"\",\"\"]' WHERE `id` = 11 AND `name` = 'Integria IMS Ticket';
+
+
diff --git a/pandora_console/extras/pandoradb_migrate_6.0_to_6.1.oracle.sql b/pandora_console/extras/pandoradb_migrate_6.0_to_6.1.oracle.sql
index 1ede58f9cb..6c32126e8d 100644
--- a/pandora_console/extras/pandoradb_migrate_6.0_to_6.1.oracle.sql
+++ b/pandora_console/extras/pandoradb_migrate_6.0_to_6.1.oracle.sql
@@ -9,3 +9,20 @@ ALTER TABLE talert_templates ADD COLUMN min_alerts_reset_counter NUMBER(5, 0) DE
-- ----------------------------------------------------------------------
ALTER TABLE tserver ADD COLUMN server_keepalive NUMBER(10, 0) DEFAULT 0;
+
+-- ---------------------------------------------------------------------
+-- Table `talert_actions`
+-- ---------------------------------------------------------------------
+UPDATE talert_actions SET field4 = 'integria',
+ field5 = '_agent_: _alert_name_',
+ field6 = '1',
+ field7 = '3',
+ field8 = 'copy@dom.com',
+ field9 = 'admin',
+ field10 = '_alert_description_'
+WHERE id = 4 AND id_alert_command = 11;
+
+-- ---------------------------------------------------------------------
+-- Table `talert_commands`
+-- ---------------------------------------------------------------------
+UPDATE talert_commands SET fields_descriptions = '[\"Integria IMS API path\",\"Integria IMS API pass\",\"Integria IMS user\",\"Integria IMS user pass\",\"Ticket title\",\"Ticket group ID\",\"Ticket priority\",\"Email copy\",\"Ticket owner\",\"Ticket description\"]', fields_values = '[\"\",\"\",\"\",\"\",\"\",\"\",\"10,Maintenance;0,Informative;1,Low;2,Medium;3,Serious;4,Very Serious\",\"\",\"\",\"\"]' WHERE id = 11 AND name = 'Integria IMS Ticket';
diff --git a/pandora_console/godmode/reporting/reporting_builder.php b/pandora_console/godmode/reporting/reporting_builder.php
index d367dd6a33..113bac230b 100755
--- a/pandora_console/godmode/reporting/reporting_builder.php
+++ b/pandora_console/godmode/reporting/reporting_builder.php
@@ -602,7 +602,14 @@ switch ($action) {
$data[1] = $report['description'];
- if (!$report['non_interactive']) {
+ //Remove html and xml button if items are larger than limit
+ $item_count = db_get_num_rows ('SELECT * FROM treport_content WHERE id_report=' . $report['id_report']);
+ $report['overload'] = $item_count >= $config['report_limit'];
+ if ($report['overload']) {
+ $data[2] = html_print_image("images/application_not_writable.png", true, array('title' => __('This report exceeds the item limit for realtime operations')));
+ $data[3] = null;
+ }
+ else if (!$report['non_interactive']) {
$data[2] = '' .
html_print_image("images/html.png", true, array('title' => __('HTML view'))) . '';
$data[3] = '' . html_print_image("images/xml.png", true, array('title' => __('Export to XML'))) . ''; //I chose ajax.php because it's supposed to give XML anyway
diff --git a/pandora_console/godmode/setup/performance.php b/pandora_console/godmode/setup/performance.php
index 654318d7b4..2158bcddeb 100644
--- a/pandora_console/godmode/setup/performance.php
+++ b/pandora_console/godmode/setup/performance.php
@@ -77,8 +77,12 @@ $table_other->style[0] = "font-weight: bold";
$table_other->size[0] = '70%';
$table_other->size[1] = '30%';
-$table_other->data[1][0] = __('Compact interpolation in hours (1 Fine-20 bad)') . ui_print_help_tip(__('Data will be compacted in intervals of the specified length.'), true);
-$table_other->data[1][1] = html_print_input_text ('step_compact',
+$table_other->data[1][0] = __('Item limit for realtime reports') . ui_print_help_tip(__('Set a value too high cause a slowdown on console and a performance penalty in the system.'), true);
+$table_other->data[1][1] = html_print_input_text ('report_limit',
+ $config["report_limit"], '', 5, 5, true);
+
+$table_other->data[2][0] = __('Compact interpolation in hours (1 Fine-20 bad)') . ui_print_help_tip(__('Data will be compacted in intervals of the specified length.'), true);
+$table_other->data[2][1] = html_print_input_text ('step_compact',
$config["step_compact"], '', 5, 5, true);
$intervals = array ();
diff --git a/pandora_console/godmode/update_manager/update_manager.offline.php b/pandora_console/godmode/update_manager/update_manager.offline.php
index ce9faad466..5bfc3ad6bd 100644
--- a/pandora_console/godmode/update_manager/update_manager.offline.php
+++ b/pandora_console/godmode/update_manager/update_manager.offline.php
@@ -18,6 +18,14 @@ global $config;
// ui_require_css_file('update_manager', 'godmode/update_manager/');
+check_login ();
+
+// ui_require_css_file('update_manager', 'godmode/update_manager/');
+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;
+}
$baseurl = ui_get_full_url(false, false, false, false);
?>
diff --git a/pandora_console/godmode/update_manager/update_manager.online.php b/pandora_console/godmode/update_manager/update_manager.online.php
index 30cd8c94cc..d9939fcb27 100644
--- a/pandora_console/godmode/update_manager/update_manager.online.php
+++ b/pandora_console/godmode/update_manager/update_manager.online.php
@@ -16,6 +16,14 @@
global $config;
+check_login ();
+
+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;
+}
+
ui_require_css_file('update_manager', 'godmode/update_manager/');
require_once("include/functions_update_manager.php");
enterprise_include_once("include/functions_update_manager.php");
diff --git a/pandora_console/godmode/update_manager/update_manager.php b/pandora_console/godmode/update_manager/update_manager.php
index 34d99ba324..4659550a4e 100644
--- a/pandora_console/godmode/update_manager/update_manager.php
+++ b/pandora_console/godmode/update_manager/update_manager.php
@@ -16,9 +16,16 @@
global $config;
+check_login ();
//The ajax is in
// include/ajax/update_manager.ajax.php
+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;
+}
+
$tab = get_parameter('tab', 'online');
$buttons = array(
diff --git a/pandora_console/godmode/update_manager/update_manager.setup.php b/pandora_console/godmode/update_manager/update_manager.setup.php
index 0b558d5b1e..1d7f3b6952 100644
--- a/pandora_console/godmode/update_manager/update_manager.setup.php
+++ b/pandora_console/godmode/update_manager/update_manager.setup.php
@@ -16,6 +16,14 @@
global $config;
+check_login ();
+
+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;
+}
+
$action_update_url_update_manager = (bool)get_parameter(
'action_update_url_update_manager', 0);
diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php
index 16d7163196..e84111e8c3 100644
--- a/pandora_console/include/config_process.php
+++ b/pandora_console/include/config_process.php
@@ -22,7 +22,7 @@
/**
* Pandora build version and version
*/
-$build_version = 'PC160329';
+$build_version = 'PC160420';
$pandora_version = 'v6.1dev';
// Do not overwrite default timezone set if defined.
diff --git a/pandora_console/include/functions_agents.php b/pandora_console/include/functions_agents.php
index 3c876914f2..4268c41a1a 100644
--- a/pandora_console/include/functions_agents.php
+++ b/pandora_console/include/functions_agents.php
@@ -1202,11 +1202,13 @@ function agents_get_modules ($id_agent = null, $details = false,
//$where .= " AND id_policy_module = 0 ";
- $where_tags = tags_get_acl_tags($config['id_user'], $id_groups, 'AR',
- 'module_condition', 'AND', 'tagente_modulo', false, array(),
- true);
-
- $where .= "\n\n" . $where_tags;
+ if (tags_has_user_acl_tags($config['id_user'])){
+ $where_tags = tags_get_acl_tags($config['id_user'], $id_groups, 'AR',
+ 'module_condition', 'AND', 'tagente_modulo', false, array(),
+ true);
+
+ $where .= "\n\n" . $where_tags;
+ }
$sql = sprintf ('SELECT %s%s
FROM tagente_modulo
diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php
index 0b0e419d4e..ce619227e1 100644
--- a/pandora_console/include/functions_config.php
+++ b/pandora_console/include/functions_config.php
@@ -376,6 +376,8 @@ function config_update_config () {
$error_update[] = __('Max. days before delete unknown modules');
if (!config_update_value ('days_compact', (int) get_parameter ('days_compact')))
$error_update[] = __('Max. days before compact data');
+ if (!config_update_value ('report_limit', (int) get_parameter ('report_limit')))
+ $error_update[] = __('Item limit for realtime reports)');
if (!config_update_value ('step_compact', (int) get_parameter ('step_compact')))
$error_update[] = __('Compact interpolation in hours (1 Fine-20 bad)');
if (!config_update_value ('event_view_hr', (int) get_parameter ('event_view_hr')))
@@ -708,6 +710,10 @@ function config_process_config () {
config_update_value ('event_view_hr', 8);
}
+ if (!isset ($config['report_limit'])) {
+ config_update_value ('report_limit', 100);
+ }
+
if (!isset ($config['loginhash_pwd'])) {
config_update_value ('loginhash_pwd', io_input_password(rand (0, 1000) * rand (0, 1000)."pandorahash"));
}
diff --git a/pandora_console/include/functions_graph.php b/pandora_console/include/functions_graph.php
index f6402da5e5..bf08732ef2 100644
--- a/pandora_console/include/functions_graph.php
+++ b/pandora_console/include/functions_graph.php
@@ -893,7 +893,7 @@ function grafico_modulo_sparse ($agent_module_id, $period, $show_events,
$config['font_size'], $unit, $ttl, $series_type,
$chart_extra_data, $warning_min, $critical_min,
$adapt_key, false, $series_suffix_str, $menu,
- $backgroundColor, $dashboard, $vconsole);
+ $backgroundColor, $dashboard, $vconsole, $agent_module_id);
}
}
elseif ($config['type_module_charts'] === 'line') {
diff --git a/pandora_console/include/functions_modules.php b/pandora_console/include/functions_modules.php
index 256333e21a..6690f10e95 100755
--- a/pandora_console/include/functions_modules.php
+++ b/pandora_console/include/functions_modules.php
@@ -2241,6 +2241,85 @@ function modules_get_first_contact_date($id_agent_module) {
return $first_date;
}
+/**
+ * Get the unknown time status of a module in a period.
+ * If there is more than 1 days between data, there is some unknown time modules
+ *
+ * @param int id_agent_module.
+ * @param int ending interval timestamp
+ * @param int interval duration
+ *
+ * @return int unknown seconds.
+ */
+function modules_get_unknown_time ($id_agent_module, $date, $period){
+
+ // TODO REMOVE THE TIME IN PLANNED DOWNTIME
+
+ if (empty($id_agent_module) || empty($date))
+ return false;
+
+ // Set initial conditions
+ $unknown_seconds = 0;
+ $datelimit = $date - $period;
+ $search_in_history_db = db_search_in_history_db($datelimit);
+
+ // Get interval data
+ $sql = sprintf ('SELECT utimestamp
+ FROM tagente_datos
+ WHERE id_agente_modulo = %d
+ AND utimestamp > %d AND utimestamp <= %d',
+ $id_agent_module, $datelimit, $date);
+ $sql .= ' ORDER BY utimestamp ASC';
+ $interval_data = db_get_all_rows_sql ($sql, $search_in_history_db);
+
+ $previous_data = modules_get_previous_data ($id_agent_module, $datelimit);
+
+ // All alternatives on first data
+ if ($previous_data === false && $interval_data === false) {
+ return false;
+ } else if($previous_data !== false && $interval_data === false) {
+ if (($date - $previous_data['utimestamp']) <= SECONDS_1DAY) {
+ return 0;
+ }
+ if (($previous_data['utimestamp'] + SECONDS_1DAY) >= $datelimit) {
+ return $date - ($previous_data['utimestamp'] + SECONDS_1DAY);
+ } else {
+ return $period;
+ }
+ } else if ($previous_data === false && $interval_data !== false) {
+ $first_data = array_shift ($interval_data);
+ $unknown_seconds += $first_data['utimestamp'] - $datelimit;
+ array_unshift ($interval_data, $first_data);
+ } else {
+ $first_data = array_shift ($interval_data);
+ if (($previous_data['utimestamp'] + SECONDS_1DAY) >= $first_data['utimestamp']) {
+ if (($previous_data['utimestamp'] + SECONDS_1DAY) >= $datelimit) {
+ $unknown_seconds += $previous_data['utimestamp'] + SECONDS_1DAY - $first_data['utimestamp'];
+ } else {
+ $unknown_seconds += $first_data['utimestamp'] - $datetime;
+ }
+ }
+ array_unshift ($interval_data, $first_data);
+ }
+
+ // Put utimestamp like last data
+ $last_data['utimestamp'] = $date;
+ array_push ($interval_data, $last_data);
+ $previous_data = array_shift ($previous_data);
+
+ // Check if all datas have data maximum one day before
+ foreach ($interval_data as $data) {
+ $previous_1day = $previous_data['utimestamp'] + SECONDS_1DAY;
+ if ($previous_1day >= $data['utimestamp']) {
+ $unknown_period += $previous_1day - $data['utimestamp'];
+ }
+ $previous_data = $data;
+ }
+
+ return $unknown_seconds;
+}
+
+
function modules_get_module_group_status($id_agent, $id_module_group) {
$status_return = null;
diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php
index a89347801d..b6b0136a07 100644
--- a/pandora_console/include/functions_reporting.php
+++ b/pandora_console/include/functions_reporting.php
@@ -3859,11 +3859,11 @@ function reporting_availability($report, $content) {
$content['time_from'],
$content['time_to']);
- $count_checks = modules_get_count_datas(
- $item['id_agent_module'],
- $report["datetime"] - $content['period'],
- $report["datetime"]);
-
+ $item['interval_agent_module'] = modules_get_interval ($item['id_agent_module']);
+ $unknown_seconds = modules_get_unknown_time ($item['id_agent_module'], $report["datetime"], $content['period']);
+ if ($unknown_seconds !== false) {
+ $count_checks = (int)(($content['period'] - $unknown_seconds)/$item['interval_agent_module']);
+ }
if ($sla_value === false) {
$row['checks'] = __('Unknown');
@@ -3887,11 +3887,13 @@ function reporting_availability($report, $content) {
$row['failed'] =
format_numeric($percent_fail * $count_checks / 100, 0);
-
+ $row['poling_time'] = "-";
+ if ($percent_ok > 0) {
$row['poling_time'] =
human_time_description_raw(
($percent_ok * $count_checks / 100) * modules_get_interval($item['id_agent_module']),
true);
+ }
$row['time_unavaliable'] = "-";
if ($percent_fail > 0) {
diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php
index f4b14d1be9..a94edba05e 100755
--- a/pandora_console/include/functions_ui.php
+++ b/pandora_console/include/functions_ui.php
@@ -93,7 +93,7 @@ function ui_print_truncate_text($text, $numChars = GENERIC_SIZE_TEXT, $showTextI
else {
echo $text;
}
- }
+ }
$text = io_safe_output($text);
if (mb_strlen($text, "UTF-8") > ($numChars)) {
@@ -134,10 +134,10 @@ function ui_print_truncate_text($text, $numChars = GENERIC_SIZE_TEXT, $showTextI
}
}
else {
- if ($style !== false) {
+ if ($style !== false) {
$truncateText = '' . $text . '';
}
- else {
+ else {
$truncateText = $text;
}
}
@@ -183,7 +183,7 @@ function printSmallFont ($string, $return = true) {
}
}
-/**
+/**
* Prints a generic message between tags.
*
* @param mixed The string message or array ('title', 'message', 'icon', 'no_close', 'force_style') to be displayed
@@ -267,7 +267,7 @@ function ui_print_message ($message, $class = '', $attributes = '', $return = fa
' . $text_title . ' |
';
if (!$no_close_bool) {
- //Use the no_meta parameter because this image is only in the base console
+ //Use the no_meta parameter because this image is only in the base console
$output .= '' .
html_print_image('images/blade.png', true, false, false, false, true) . '';
}
@@ -296,11 +296,11 @@ function ui_print_message ($message, $class = '', $attributes = '', $return = fa
return $output;
else
echo $output;
-
+
return '';
}
-/**
+/**
* Prints an error message.
*
* @param mixed The string error message or array ('title', 'message', 'icon', 'no_close') to be displayed
@@ -315,7 +315,7 @@ function ui_print_error_message ($message, $attributes = '', $return = false, $t
return ui_print_message ($message, 'error', $attributes, $return, $tag);
}
-/**
+/**
* Prints an operation success message.
*
* @param mixed The string message or array ('title', 'message', 'icon', 'no_close') to be displayed
@@ -330,7 +330,7 @@ function ui_print_success_message ($message, $attributes = '', $return = false,
return ui_print_message ($message, 'suc', $attributes, $return, $tag);
}
-/**
+/**
* Prints an operation info message.
*
* @param mixed The string message or array ('title', 'message', 'icon', 'no_close') to be displayed
@@ -349,10 +349,10 @@ function ui_print_empty_data($message, $attributes = '', $return = false, $tag =
return ui_print_message ($message, 'info', $attributes, $return, $tag);
}
-/**
+/**
* Evaluates a result using empty() and then prints an error or success message
*
- * @param mixed The results to evaluate. 0, NULL, false, '' or
+ * @param mixed The results to evaluate. 0, NULL, false, '' or
* array() is bad, the rest is good
* @param mixed The string or array ('title', 'message') to be displayed if the result was good
* @param mixed The string or array ('title', 'message') to be displayed if the result was bad
@@ -378,7 +378,7 @@ function ui_print_result_message ($result, $good = '', $bad = '', $attributes =
}
}
-/**
+/**
* Prints an warning message.
*
* @param mixed The string warning message or array ('title', 'message', 'icon', 'no_close') to be displayed
@@ -517,7 +517,7 @@ function ui_print_tags_warning ($return = false) {
}
}
-/**
+/**
* Print group icon within a link
*
* @param int Group id
@@ -543,7 +543,7 @@ function ui_print_group_icon ($id_group, $return = false, $path = "groups_small"
if (defined('METACONSOLE'))
$link = false;
- if ($link)
+ if ($link)
$output = '';
if ($config['show_group_name']) {
@@ -559,7 +559,7 @@ function ui_print_group_icon ($id_group, $return = false, $path = "groups_small"
}
}
- if ($link)
+ if ($link)
$output .= '';
if (!$return)
@@ -568,7 +568,7 @@ function ui_print_group_icon ($id_group, $return = false, $path = "groups_small"
return $output;
}
-/**
+/**
* Print group icon within a link. Other version.
*
* @param int Group id
@@ -587,7 +587,7 @@ function ui_print_group_icon_path ($id_group, $return = false, $path = "images/g
$style = 'width: 16px; height: 16px;';
$output = '';
- if ($link)
+ if ($link)
$output = '';
if (empty ($icon))
@@ -595,7 +595,7 @@ function ui_print_group_icon_path ($id_group, $return = false, $path = "images/g
else
$output .= ' ';
- if ($link)
+ if ($link)
$output .= '';
if (!$return)
@@ -604,12 +604,12 @@ function ui_print_group_icon_path ($id_group, $return = false, $path = "images/g
return $output;
}
-/**
+/**
* Get the icon of an operating system.
*
* @param int Operating system id
* @param bool Whether to also append the name of the OS after the icon
- * @param bool Whether to return or echo the result
+ * @param bool Whether to return or echo the result
* @param bool Whether to apply skin or not
*
* @return string HTML with icon of the OS
@@ -636,8 +636,7 @@ function ui_print_os_icon ($id_os, $name = true, $return = false,
return "-";
}
}
-
- if ($apply_skin) {
+ else if ($apply_skin) {
if ($only_src) {
$output = html_print_image("images/" . $subfolter . "/" . $icon, true, $options, true, $relative);
}
@@ -690,7 +689,7 @@ function ui_print_agent_name ($id_agent, $return = false, $cutoff = 'agent_mediu
}
if ($link) {
- $url = $server_url . 'index.php?sec=estado&'.
+ $url = $server_url . 'index.php?sec=estado&'.
'sec2=operation/agentes/ver_agente&' .
'id_agente=' . $id_agent.$extra_params;
@@ -710,7 +709,7 @@ function ui_print_agent_name ($id_agent, $return = false, $cutoff = 'agent_mediu
echo $output;
}
-/**
+/**
* Formats a row from the alert table and returns an array usable in the table function
*
* @param array A valid (non empty) row from the alert table
@@ -769,12 +768,12 @@ function ui_format_alert_row ($alert, $agent = true, $url = '', $agent_style = f
}
if ($alert['disabled']) {
- $disabledHtmlStart = '';
+ $disabledHtmlStart = '';
$disabledHtmlEnd = '';
$styleDisabled = "font-style: italic; color: #aaaaaa;";
}
else {
- $disabledHtmlStart = '';
+ $disabledHtmlStart = '';
$disabledHtmlEnd = '';
$styleDisabled = "";
}
@@ -802,7 +801,7 @@ function ui_format_alert_row ($alert, $agent = true, $url = '', $agent_style = f
else {
$img = 'images/policies.png';
- $data[$index['policy']] = '' .
+ $data[$index['policy']] = '' .
html_print_image($img,true, array('title' => $policyInfo['name'])) .
'';
}
@@ -813,7 +812,7 @@ function ui_format_alert_row ($alert, $agent = true, $url = '', $agent_style = f
$data[$index['standby']] = '';
if (isset ($alert["standby"]) && $alert["standby"] == 1) {
$data[$index['standby']] = html_print_image ('images/bell_pause.png', true, array('title' => __('Standby on')));
- }
+ }
if (!defined('METACONSOLE')) {
// Force alert execution
@@ -821,7 +820,7 @@ function ui_format_alert_row ($alert, $agent = true, $url = '', $agent_style = f
if ($alert["force_execution"] == 0) {
$data[$index['force_execution']] =
'' . html_print_image("images/target.png", true, array("border" => '0', "title" => __('Force'))) . '';
- }
+ }
else {
$data[$index['force_execution']] =
'' . html_print_image("images/refresh.png", true) . '';
@@ -832,7 +831,7 @@ function ui_format_alert_row ($alert, $agent = true, $url = '', $agent_style = f
if ($agent == 0) {
$data[$index['module_name']] .=
ui_print_truncate_text(isset($alert['agent_module_name']) ? $alert['agent_module_name'] : modules_get_agentmodule_name ($alert["id_agent_module"]), 'module_small', false, true, true, '[…]', 'font-size: 7.2pt');
- }
+ }
else {
if (defined('METACONSOLE')) {
$agent_name = $alert['agent_name'];
@@ -851,7 +850,7 @@ function ui_format_alert_row ($alert, $agent = true, $url = '', $agent_style = f
$data[$index['agent_name']] .= ui_print_agent_name ($id_agent, true, 'agent_medium', $styleDisabled . " $agent_style", false, $console_url, $url_hash, $agent_name);
}
else {
- $data[$index['agent_name']] .= ui_print_agent_name ($id_agent, true, 'agent_medium', $styleDisabled, false, $console_url, $url_hash);
+ $data[$index['agent_name']] .= ui_print_agent_name ($id_agent, true, 'agent_medium', $styleDisabled, false, $console_url, $url_hash);
}
}
@@ -932,7 +931,7 @@ function ui_format_alert_row ($alert, $agent = true, $url = '', $agent_style = f
}
/**
- * Prints a substracted string, length specified by cutoff, the full string will be in a rollover.
+ * Prints a substracted string, length specified by cutoff, the full string will be in a rollover.
*
* @param string The string to be cut
* @param int At how much characters to cut
@@ -1050,7 +1049,7 @@ function ui_print_alert_template_example ($id_alert_template, $return = false, $
*
* @param string Id of the help article
* @param bool Whether to return or output the result
- * @param string Home url if its necessary
+ * @param string Home url if its necessary
* @param string Image path
*
* @return string The help tip
@@ -1063,7 +1062,7 @@ function ui_print_help_icon ($help_id, $return = false, $home_url = '', $image =
$home_url = "../../" . $home_url;
}
- $output = html_print_image ($image, true,
+ $output = html_print_image ($image, true,
array ("class" => "img_help",
"title" => __('Help'),
"onclick" => "open_help ('" . $help_id . "','" . $home_url . "')"));
@@ -1257,7 +1256,7 @@ function ui_require_jquery_file ($name, $path = 'include/javascript/', $echo_tag
* @param string Callback will fill this with the current buffer.
* @param bitfield Callback will fill this with a bitfield (see ob_start)
*
- * @return string String to return to the browser
+ * @return string String to return to the browser
*/
function ui_process_page_head ($string, $bitfield) {
global $config;
@@ -1286,7 +1285,7 @@ function ui_process_page_head ($string, $bitfield) {
$_GET['sec2'] == 'enterprise/dashboard/main_dashboard') {
$query = ui_get_url_refresh (false, false);
- $output .= '';
}
@@ -1357,7 +1356,7 @@ function ui_process_page_head ($string, $bitfield) {
$exists_css = false;
if ($login_ok and $isFunctionSkins !== ENTERPRISE_NOT_HOOK) {
- //Checks if user's skin is available
+ //Checks if user's skin is available
$exists_skin = enterprise_hook('skins_is_path_set');
if ($exists_skin) {
$skin_path = enterprise_hook('skins_get_skin_path');
@@ -1369,15 +1368,15 @@ function ui_process_page_head ($string, $bitfield) {
if ($exists_css) {
foreach ($skin_styles as $filename => $name) {
$style = substr ($filename, 0, strlen ($filename) - 4);
- $config['css'][$style] = $skin_path . 'include/styles/' . $filename;
+ $config['css'][$style] = $skin_path . 'include/styles/' . $filename;
}
- }
+ }
//Otherwise assign default and user's css
else {
//User style should go last so it can rewrite common styles
$config['css'] = array_merge (array (
- "common" => "include/styles/common.css",
- "menu" => "include/styles/menu.css",
+ "common" => "include/styles/common.css",
+ "menu" => "include/styles/menu.css",
$config['style'] => "include/styles/" . $config['style'] . ".css"),
$config['css']);
}
@@ -1552,7 +1551,7 @@ function ui_process_page_body ($string, $bitfield) {
return $output;
}
-/**
+/**
* Prints a pagination menu to browse into a collection of data.
*
* @param int $count Number of elements in the collection.
@@ -1562,7 +1561,7 @@ function ui_process_page_body ($string, $bitfield) {
* taken from $_REQUEST['offset']
* @param int $pagination Current pagination size. If a user requests a larger
* pagination than config["block_size"]
- * @param bool $return Whether to return or print this
+ * @param bool $return Whether to return or print this
* @param string $offset_name The name of parameter for the offset.
* @param bool $print_total_items Show the text with the total items. By default true.
*
@@ -1596,8 +1595,8 @@ function ui_pagination ($count, $url = false, $offset = 0,
/*
URL passed render links with some parameter
&offset - Offset records passed to next page
- &counter - Number of items to be blocked
- Pagination needs $url to build the base URL to render links, its a base url, like
+ &counter - Number of items to be blocked
+ Pagination needs $url to build the base URL to render links, its a base url, like
" http://pandora/index.php?sec=godmode&sec2=godmode/admin_access_logs "
*/
$block_limit = PAGINATION_BLOCKS_LIMIT; // Visualize only $block_limit blocks
@@ -1793,7 +1792,7 @@ function ui_pagination ($count, $url = false, $offset = 0,
return $output;
}
-/**
+/**
* Prints only a tip button which shows a text when the user puts the mouse over it.
*
* @param string Complete text to show in the tip
@@ -1804,8 +1803,8 @@ function ui_pagination ($count, $url = false, $offset = 0,
*/
function ui_print_session_action_icon ($action, $return = false) {
$key_icon = array(
- 'acl' => 'images/delete.png',
- 'agent' => 'images/agent.png',
+ 'acl' => 'images/delete.png',
+ 'agent' => 'images/agent.png',
'module' => 'images/module.png',
'alert' => 'images/bell.png',
'incident' => 'images/default_list.png',
@@ -1831,7 +1830,7 @@ function ui_print_session_action_icon ($action, $return = false) {
$output = '';
foreach($key_icon as $key => $icon) {
if (stristr($action, $key) !== false) {
- $output = html_print_image($icon, true, array('title' => $action)) . ' ';
+ $output = html_print_image($icon, true, array('title' => $action)) . ' ';
break;
}
}
@@ -1841,7 +1840,7 @@ function ui_print_session_action_icon ($action, $return = false) {
echo $output;
}
-/**
+/**
* Prints only a tip button which shows a text when the user puts the mouse over it.
*
* @param string Complete text to show in the tip
@@ -1889,7 +1888,7 @@ function ui_debug ($var, $backtrace = true) {
foreach ($traces as $trace) {
$trace_id++;
- /* Many classes are used to allow better customization.
+ /* Many classes are used to allow better customization.
Please, do not remove them */
echo '';
if (isset ($trace['class']))
@@ -1947,7 +1946,7 @@ function ui_print_moduletype_icon ($id_moduletype, $return = false, $relative =
$type = db_get_row ("ttipo_modulo", "id_tipo", (int) $id_moduletype, array ("descripcion", "icon"));
if ($type === false) {
$type = array ();
- $type["descripcion"] = __('Unknown type');
+ $type["descripcion"] = __('Unknown type');
$type["icon"] = 'b_down.png';
}
$imagepath = 'images/'.$type["icon"];
@@ -1987,7 +1986,7 @@ function ui_print_module_warn_value ($max_warning, $min_warning, $str_warning, $
}
else {
$data .= __("N/A");
- }
+ }
$data .= " - ";
@@ -2032,7 +2031,7 @@ function ui_get_status_images_path () {
$imageset = $config["status_images_set"];
- if (strpos ($imageset, ",") === false)
+ if (strpos ($imageset, ",") === false)
$imageset .= ",40x18";
list ($imageset, $sizes) = preg_split ("/\,/", $imageset);
@@ -2049,7 +2048,7 @@ function ui_get_status_images_path () {
* Prints an image representing a status.
*
* @param string
- * @param string
+ * @param string
* @param bool Whether to return an output string or echo now (optional, echo by default).
* @param array options to set image attributes: I.E.: style
* @param Path of the image, if not provided use the status path
@@ -2158,7 +2157,7 @@ function ui_toggle($code, $name, $title = '', $hidden_default = true, $return =
function ui_get_url_refresh ($params = false, $relative = true, $add_post = true) {
// Agent selection filters and refresh
global $config;
-
+
// slerena, 8/Ene/2015 - Need to put index.php on URL which have it.
if (strpos($_SERVER['REQUEST_URI'], 'index.php') === false)
$url = '';
@@ -2381,7 +2380,7 @@ function ui_get_full_url ($url = '', $no_proxy = false, $add_name_php_file = fal
* @param boolean Return (false will print using a echo)
* @param boolean help (Help ID to print the Help link)
* @param boolean Godmode (false = operation mode).
- * @param string Options (HTML code for make tabs or just a brief info string
+ * @param string Options (HTML code for make tabs or just a brief info string
* @return string Header HTML
*/
@@ -2399,7 +2398,7 @@ function ui_print_page_header ($title, $icon = "", $return = false, $help = "",
$type = "view";
$type2 = "menu_tab_frame_view";
$separator_class = "separator";
- }
+ }
else {
$type = "view";
$type2 = "menu_tab_frame_view";
@@ -2411,7 +2410,7 @@ function ui_print_page_header ($title, $icon = "", $return = false, $help = "",
$buffer .= '- ' . ' ';
- $buffer .= '' .
+ $buffer .= '' .
ui_print_truncate_text($title, 38);
if ($help != "")
$buffer .= "
" .
@@ -2627,7 +2626,7 @@ function ui_print_page_header ($title, $icon = "", $return = false, $help = "",
*
* - $parameters['javascript_function_action_after_select_js_call'] The
* call of this function to call after user select a agent into the
- * list in the autocomplete field. Instead the
+ * list in the autocomplete field. Instead the
* $parameters['javascript_function_action_after_select'], this is
* overwrite the previous element. And this is necesary when you need
* to set some params in your custom function.
@@ -3214,7 +3213,7 @@ function ui_print_agent_autocomplete_input($parameters) {
server_id = ui.item.id_server;
}
-
+
//Put the name
$(this).val(agent_name);
@@ -3535,7 +3534,7 @@ function ui_get_error ($error_code) {
case 'error_dbconfig':
$title = __('Problem with Pandora FMS database');
$message = __('Cannot connect to the database, please check your database setup in the include/config.php file.
- Probably your database, hostname, user or password values are incorrect or
+ Probably your database, hostname, user or password values are incorrect or
the database server is not running.').'
';
$message .= '';
$message .= '' . __('DB ERROR') . ': ';
@@ -3577,9 +3576,9 @@ function ui_get_error ($error_code) {
break;
case 'error_perms':
$title = __('Bad permission for include/config.php');
- $message = __('For security reasons, config.php must have restrictive permissions, and "other" users
- should not read it or write to it. It should be written only for owner
- (usually www-data or http daemon user), normal operation is not possible until you change
+ $message = __('For security reasons, config.php must have restrictive permissions, and "other" users
+ should not read it or write to it. It should be written only for owner
+ (usually www-data or http daemon user), normal operation is not possible until you change
permissions for include/config.php file. Please do it, it is for your security.');
break;
}
@@ -3700,4 +3699,4 @@ function ui_print_module_string_value($value, $id_agente_module,
return $salida;
}
-?>
+?>
\ No newline at end of file
diff --git a/pandora_console/include/functions_visual_map.php b/pandora_console/include/functions_visual_map.php
index e384b78f1c..0c154906e5 100755
--- a/pandora_console/include/functions_visual_map.php
+++ b/pandora_console/include/functions_visual_map.php
@@ -776,9 +776,14 @@ function visual_map_print_item($mode = "read", $layoutData,
true, true, true, 1, false, $graph_javascript);
}
else {
+ if ($isExternalLink)
+ $homeurl = $config['homeurl'];
+ else
+ $homeurl = '';
+
$img = grafico_modulo_sparse($id_module, $period, 0, $width,
$height, '', null, false, 1, false, 0, '', 0, 0,
- true, true, '', 1, false, '', false, false, true,
+ true, true, $homeurl, 1, false, '', false, false, true,
$layoutData['image'], null, false, $graph_javascript);
}
diff --git a/pandora_console/include/graphs/fgraph.php b/pandora_console/include/graphs/fgraph.php
index 12b249d036..ea396467d9 100644
--- a/pandora_console/include/graphs/fgraph.php
+++ b/pandora_console/include/graphs/fgraph.php
@@ -46,6 +46,7 @@ if (!empty($graph_type)) {
include_once($homeurl . 'include/graphs/functions_gd.php');
include_once($homeurl . 'include/graphs/functions_utils.php');
include_once($homeurl . 'include/graphs/functions_d3.php');
+ include_once($homeurl . 'include/graphs/functions_flot.php');
}
// Clean the output buffer and turn off output buffering
@@ -218,8 +219,9 @@ function area_graph($flash_chart, $chart_data, $width, $height, $color,
$chart_extra_data = array(), $yellow_threshold = 0,
$red_threshold = 0, $adapt_key = '', $force_integer = false,
$series_suffix_str = '', $menu = true, $backgroundColor = 'white',
- $dashboard = false, $vconsole = false) {
+ $dashboard = false, $vconsole = false, $agent_module_id = 0) {
+ include_once('functions_flot.php');
setup_watermark($water_mark, $water_mark_file, $water_mark_url);
@@ -257,7 +259,9 @@ function area_graph($flash_chart, $chart_data, $width, $height, $color,
$series_suffix_str,
$menu,
$backgroundColor,
- $dashboard);
+ $dashboard,
+ false,
+ $agent_module_id);
}
else {
if ($vconsole) {
@@ -281,7 +285,8 @@ function area_graph($flash_chart, $chart_data, $width, $height, $color,
$menu,
$backgroundColor,
$dashboard,
- $vconsole);
+ $vconsole,
+ $agent_module_id);
}
else {
$graph = array();
@@ -316,7 +321,7 @@ function stacked_area_graph($flash_chart, $chart_data, $width, $height,
$color, $legend, $long_index, $no_data_image, $xaxisname = "",
$yaxisname = "", $water_mark = "", $font = '', $font_size = '',
$unit = '', $ttl = 1, $homeurl = '', $backgroundColor = 'white',
- $dashboard = false, $vconsole = false) {
+ $dashboard = false, $vconsole = false, $agent_module_id) {
setup_watermark($water_mark, $water_mark_file, $water_mark_url);
@@ -368,7 +373,8 @@ function stacked_area_graph($flash_chart, $chart_data, $width, $height,
true,
$backgroundColor,
$dashboard,
- $vconsole);
+ $vconsole,
+ $agent_module_id);
}
else {
//Stack the data
@@ -537,6 +543,8 @@ function line_graph($flash_chart, $chart_data, $width, $height, $color,
$unit = '', $ttl = 1, $homeurl = '', $backgroundColor = 'white',
$dashboard = false, $vconsole = false) {
+ include_once("functions_flot.php");
+
setup_watermark($water_mark, $water_mark_file, $water_mark_url);
if (empty($chart_data)) {
diff --git a/pandora_console/include/graphs/flot/pandora.flot.js b/pandora_console/include/graphs/flot/pandora.flot.js
index 45283b24a2..97e6a449cd 100644
--- a/pandora_console/include/graphs/flot/pandora.flot.js
+++ b/pandora_console/include/graphs/flot/pandora.flot.js
@@ -804,7 +804,9 @@ function pandoraFlotArea(graph_id, values, labels, labels_long, legend,
colors, type, serie_types, water_mark, width, max_x, homeurl, unit,
font_size, menu, events, event_ids, legend_events, alerts,
alert_ids, legend_alerts, yellow_threshold, red_threshold,
- force_integer, separator, separator2, series_suffix_str, vconsole) {
+ force_integer, separator, separator2,
+ yellow_up, red_up, yellow_inverse, red_inverse,
+ series_suffix_str, vconsole) {
var threshold = true;
var thresholded = false;
@@ -861,14 +863,8 @@ function pandoraFlotArea(graph_id, values, labels, labels_long, legend,
for (i = 0; i < values.length; i++) {
var serie = values[i].split(separator);
var aux = new Array();
- var critical_min = new Array();
- var warning_min = new Array();
$.each(serie, function(i, v) {
aux.push([i, v]);
- if (threshold) {
- critical_min.push([i,red_threshold]);
- warning_min.push([i,yellow_threshold]);
- }
});
switch (serie_types[i]) {
@@ -958,24 +954,518 @@ function pandoraFlotArea(graph_id, values, labels, labels_long, legend,
// showed[i] = true;
}
- var threshold_data = new Array();
+ // If threshold and up are the same, that critical or warning is disabled
+ if (yellow_threshold == yellow_up) yellow_inverse = false;
+ if (red_threshold == red_up) red_inverse = false;
+ //Array with points to be painted
+ var threshold_data = new Array();
+ //Array with some interesting points
+ var extremes = new Array ();
+
+ yellow_threshold = parseFloat (yellow_threshold);
+ yellow_up = parseFloat (yellow_up);
+ red_threshold = parseFloat (red_threshold);
+ red_up = parseFloat (red_up);
+ var yellow_only_min = ((yellow_up == 0) && (yellow_threshold != 0));
+ red_only_min = ((red_up == 0) && (red_threshold != 0));
+
if (threshold) {
- // Warning and critical treshold
- threshold_data.push({
- id: 'critical_min',
- data: critical_min,
- label: null,
- color: critical,
- lines: { show: true, fill: false, lineWidth:3}
- });
- threshold_data.push({
- id: 'warning_min',
- data: warning_min,
- label: null,
- color: warning,
- lines: { show: true, fill: false, lineWidth:3}
- });
+ // Warning interval. Change extremes depends on critical interval
+ if (yellow_inverse && red_inverse) {
+ if (red_only_min && yellow_only_min) {
+ // C: |-------- |
+ // W: |········==== |
+
+ if (yellow_threshold > red_threshold) {
+ threshold_data.push({
+ id: 'warning_normal_fdown',
+ data: [[max_x, red_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: yellow_threshold - red_threshold, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fdown_1'] = red_threshold;
+ extremes['warning_normal_fdown_2'] = yellow_threshold;
+ }
+ } else if (!red_only_min && yellow_only_min) {
+ // C: |-------- ------|
+ // W: |········===· |
+
+ if (yellow_threshold > red_up) {
+ yellow_threshold = red_up;
+ }
+ if (yellow_threshold > red_threshold) {
+ threshold_data.push({
+ id: 'warning_normal_fdown',
+ data: [[max_x, red_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: yellow_threshold - red_threshold, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fdown_1'] = red_threshold;
+ extremes['warning_normal_fdown_2'] = yellow_threshold;
+ }
+ } else if (red_only_min && !yellow_only_min) {
+ // C: |------- |
+ // W: |·······==== ===|
+ if (red_threshold < yellow_threshold) {
+ threshold_data.push({
+ id: 'warning_normal_fdown',
+ data: [[max_x, red_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: yellow_threshold - red_threshold, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fdown_1'] = red_threshold;
+ extremes['warning_normal_fdown_2'] = yellow_threshold;
+ }
+
+ if (yellow_up < red_threshold) {
+ yellow_up = red_threshold;
+ }
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_up',
+ data: [[max_x, yellow_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_up'] = yellow_up;
+
+ } else {
+ if (yellow_threshold > red_threshold) {
+ // C: |-------- ------|
+ // W: |········===· ···|
+ if (yellow_threshold > red_up) {
+ yellow_threshold = red_up;
+ }
+ threshold_data.push({
+ id: 'warning_normal_fdown',
+ data: [[max_x, red_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: yellow_threshold - red_threshold, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fdown_1'] = red_threshold;
+ extremes['warning_normal_fdown_2'] = yellow_threshold;
+ }
+ if (yellow_up < red_up) {
+ // C: |-------- ---|
+ // W: |····· ·======···|
+ if (yellow_up < red_threshold) {
+ yellow_up = red_up;
+ }
+ threshold_data.push({
+ id: 'warning_normal_fup',
+ data: [[max_x, yellow_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: red_up - yellow_up, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fup_1'] = red_up;
+ extremes['warning_normal_fup_2'] = yellow_up;
+ }
+ // If warning is under critical completely do not paint anything yellow
+ // C: |-------- -----|
+ // W: |···· ···|
+ }
+ } else if (yellow_inverse && !red_inverse) {
+ if (red_only_min && yellow_only_min) {
+ // C: | -----|
+ // W: |============··· |
+ if (yellow_threshold > red_threshold) {
+ yellow_threshold = red_threshold;
+ }
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_down',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_down'] = yellow_threshold;
+
+ } else if (!red_only_min && yellow_only_min) {
+ // C: | ---- |
+ // W: |======····=== |
+
+ if (yellow_threshold > red_up) {
+ threshold_data.push({
+ id: 'warning_normal_fdown',
+ data: [[max_x, red_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: yellow_threshold - red_up, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fdown_1'] = red_up;
+ extremes['warning_normal_fdown_2'] = yellow_threshold;
+ }
+
+ if (yellow_threshold > red_threshold) {
+ yellow_threshold = red_threshold;
+ }
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_down',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_down'] = yellow_threshold;
+
+ } else if (red_only_min && !yellow_only_min) {
+ if (yellow_threshold < red_threshold) {
+ // C: | -----|
+ // W: |======= ===·····|
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_down',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_down'] = yellow_threshold;
+
+ if (red_threshold > yellow_up) {
+ threshold_data.push({
+ id: 'warning_normal_fup',
+ data: [[max_x, yellow_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: red_threshold - yellow_up, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fup_1'] = yellow_up;
+ extremes['warning_normal_fup_2'] = red_threshold;
+ }
+ } else {
+ // C: | ------------|
+ // W: |=====·· ········|
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_down',
+ data: [[max_x, red_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_down'] = red_threshold;
+ }
+ } else {
+ if (yellow_threshold > red_up) {
+ // C: | ----- |
+ // W: |====·····=== ===|
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_down',
+ data: [[max_x, red_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_down'] = red_threshold;
+
+ threshold_data.push({
+ id: 'warning_normal_fdown',
+ data: [[max_x, red_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: yellow_threshold - red_up, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fdown_1'] = red_up;
+ extremes['warning_normal_fdown_2'] = yellow_threshold;
+
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_up',
+ data: [[max_x, yellow_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_up'] = yellow_up;
+ } else if (red_threshold > yellow_up){
+ // C: | ----- |
+ // W: |=== ===·····==|
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_down',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_down'] = yellow_threshold;
+
+ threshold_data.push({
+ id: 'warning_normal_fup',
+ data: [[max_x, yellow_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: red_threshold - yellow_up, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fup_1'] = yellow_up;
+ extremes['warning_normal_fup_2'] = red_threshold;
+
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_up',
+ data: [[max_x, red_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_up'] = red_up;
+ } else {
+ // C: | -------- |
+ // W: |==· ···=======|
+ if (yellow_threshold > red_threshold) {
+ yellow_threshold = red_threshold;
+ }
+ if (yellow_up < red_up) {
+ yellow_up = red_up;
+ }
+
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_down',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_down'] = yellow_threshold;
+
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_up',
+ data: [[max_x, yellow_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_up'] = yellow_up;
+ }
+ }
+ } else if (!yellow_inverse && red_inverse) {
+ if (yellow_only_min && red_only_min) {
+ // C: |----- |
+ // W: | ··============|
+ if (yellow_threshold < red_threshold) {
+ yellow_threshold = red_threshold;
+ }
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_up',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_up'] = yellow_threshold;
+
+ } else if (!yellow_only_min && red_only_min) {
+ // C: |----- |
+ // W: | ··======== |
+ if (yellow_threshold < red_threshold) {
+ yellow_threshold = red_threshold;
+ }
+ if (yellow_up > red_threshold) {
+ threshold_data.push({
+ id: 'warning_normal',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: (yellow_up - yellow_threshold), lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_1'] = yellow_threshold;
+ extremes['warning_normal_2'] = yellow_up;
+ }
+ } else if (yellow_only_min && !red_only_min) {
+ // C: |----- ------|
+ // W: | ··======······|
+ if (yellow_threshold < red_threshold) {
+ yellow_threshold = red_threshold;
+ }
+ if (yellow_threshold < red_up) {
+ threshold_data.push({
+ id: 'warning_normal',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: (red_up - yellow_threshold), lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_1'] = yellow_threshold;
+ extremes['warning_normal_2'] = red_up;
+ }
+ // If warning is under critical completely do not paint anything yellow
+ // C: |-------- -----|
+ // W: | ···|
+ } else {
+ if (red_up > yellow_threshold && red_threshold < yellow_up) {
+ // C: |----- ------|
+ // W: | ··======· |
+ if (yellow_threshold < red_threshold) {
+ yellow_threshold = red_threshold;
+ }
+ if (yellow_up > red_up) {
+ yellow_up = red_up;
+ }
+
+ threshold_data.push({
+ id: 'warning_normal',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: (yellow_up - yellow_threshold), lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_1'] = yellow_threshold;
+ extremes['warning_normal_2'] = yellow_up;
+ }
+ }
+ }
+ // If warning is under critical completely do not paint anything yellow
+ // C: |-------- -----| or // C: |-------- -----|
+ // W: | ···· | // W: | ·· |
+ else {
+ if (red_only_min && yellow_only_min) {
+ if (yellow_threshold < red_threshold) {
+ // C: | ---------|
+ // W: | =====·········|
+ threshold_data.push({
+ id: 'warning_normal',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: (red_threshold - yellow_threshold), lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_1'] = yellow_threshold;
+ extremes['warning_normal_2'] = red_threshold;
+ }
+ } else if (red_only_min && !yellow_only_min) {
+ // C: | ---------|
+ // W: | =====··· |
+ if (yellow_up > red_threshold) {
+ yellow_up = red_threshold;
+ }
+ if (yellow_threshold < red_threshold) {
+ threshold_data.push({
+ id: 'warning_normal',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: (yellow_up - yellow_threshold), lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_1'] = yellow_threshold;
+ extremes['warning_normal_2'] = yellow_up;
+ }
+ } else if (!red_only_min && yellow_only_min) {
+ // C: | ------- |
+ // W: | ==·······=====|
+
+ if (yellow_threshold < red_threshold) {
+ threshold_data.push({
+ id: 'warning_normal_fdown',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: red_threshold - yellow_threshold, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fdown_1'] = yellow_threshold;
+ extremes['warning_normal_fdown_2'] = red_threshold;
+ }
+
+ if (yellow_threshold < red_up) {
+ yellow_threshold = red_up;
+ }
+
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'warning_up',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_up'] = yellow_threshold;
+
+ } else {
+ if (red_threshold > yellow_threshold && red_up < yellow_up ) {
+ // C: | ------ |
+ // W: | ==······==== |
+ threshold_data.push({
+ id: 'warning_normal_fdown',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: red_threshold - yellow_threshold, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fdown_1'] = yellow_threshold;
+ extremes['warning_normal_fdown_2'] = red_threshold;
+
+ threshold_data.push({
+ id: 'warning_normal_fup',
+ data: [[max_x, red_up]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: yellow_up - red_up, lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_fup_1'] = red_up;
+ extremes['warning_normal_fup_2'] = yellow_up;
+ } else if (red_threshold < yellow_threshold && red_up > yellow_up) {
+ // If warning is under critical completely do not paint anything yellow
+ // C: | -------- |
+ // W: | ···· |
+ } else {
+ // C: | -------- | or // C: | ------ |
+ // W: | ==·· | // W: | ···==== |
+ if ((yellow_up > red_threshold) && (yellow_up < red_up)) {
+ yellow_up = red_threshold;
+ }
+ if ((yellow_threshold < red_up) && (yellow_threshold > red_threshold)) {
+ yellow_threshold = red_up;
+ }
+ threshold_data.push({
+ id: 'warning_normal',
+ data: [[max_x, yellow_threshold]],
+ label: null,
+ color: warning,
+ bars: {show: true, align: "left", barWidth: (yellow_up - yellow_threshold), lineWidth: 0, horizontal: true}
+ });
+ extremes['warning_normal_1'] = yellow_threshold;
+ extremes['warning_normal_2'] = yellow_up;
+ }
+ }
+ }
+ // Critical interval
+ if (red_inverse) {
+ if (!red_only_min) {
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'critical_up',
+ data: [[max_x, red_up]],
+ label: null,
+ color: critical,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ }
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'critical_down',
+ data: [[max_x, red_threshold]],
+ label: null,
+ color: critical,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ } else {
+ if (red_up == 0 && red_threshold != 0) {
+ threshold_data.push({ // barWidth will be correct on draw time
+ id: 'critical_up',
+ data: [[max_x, red_threshold]],
+ label: null,
+ color: critical,
+ bars: {show: true, align: "left", barWidth: 1, lineWidth: 0, horizontal: true}
+ });
+ } else {
+ threshold_data.push({
+ id: 'critical_normal',
+ data: [[max_x, red_threshold]],
+ label: null,
+ color: critical,
+ bars: {show: true, align: "left", barWidth: (red_up - red_threshold), lineWidth: 0, horizontal: true}
+ });
+ }
+ }
+
}
// The first execution, the graph data is the base data
@@ -1082,7 +1572,7 @@ function pandoraFlotArea(graph_id, values, labels, labels_long, legend,
new_steps = parseInt(factor * steps);
- plot = $.plot($('#' + graph_id), datas,
+ plot = $.plot($('#' + graph_id), data_base,
$.extend(true, {}, options, {
xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to},
xaxes: [ {
@@ -1092,6 +1582,15 @@ function pandoraFlotArea(graph_id, values, labels, labels_long, legend,
} ],
legend: { show: false }
}));
+ if (thresholded) {
+ var zoom_data_threshold = new Array ();
+
+ zoom_data_threshold = add_threshold (data_base, threshold_data, plot.getAxes().yaxis.min, plot.getAxes().yaxis.max,
+ yellow_threshold, red_threshold, extremes, red_up);
+ plot.setData(zoom_data_threshold);
+ plot.draw();
+ }
+
$('#menu_cancelzoom_' + graph_id)
.attr('src', homeurl + '/images/zoom_cross_grey.png');
@@ -1535,23 +2034,21 @@ function pandoraFlotArea(graph_id, values, labels, labels_long, legend,
datas = new Array();
if (thresholded) {
- thresholded = false;
- }
- else {
- $.each(threshold_data, function() {
- datas.push(this);
+ $.each(data_base, function() {
+ // Prepared to turning series
+ //if(showed[this.id.split('_')[1]]) {
+ datas.push(this);
+ //}
});
+ thresholded = false;
+ } else {
+ datas = add_threshold (data_base, threshold_data, plot.getAxes().yaxis.min, plot.getAxes().yaxis.max,
+ yellow_threshold, red_threshold, extremes, red_up);
thresholded = true;
}
- $.each(data_base, function() {
- // Prepared to turning series
- //if(showed[this.id.split('_')[1]]) {
- datas.push(this);
- //}
- });
-
- plot = $.plot($('#' + graph_id), datas, options);
+ plot.setData(datas);
+ plot.draw();
plot.setSelection(currentRanges);
});
@@ -1568,6 +2065,8 @@ function pandoraFlotArea(graph_id, values, labels, labels_long, legend,
.attr('src', homeurl + '/images/zoom_cross.disabled.png');
overview.clearSelection();
currentRanges = null;
+
+ thresholded = false;
});
// Adjust the menu image on top of the plot
@@ -1735,3 +2234,51 @@ function number_format(number, force_integer, unit) {
return number + ' ' + shorts[pos] + unit;
}
+function add_threshold (data_base, threshold_data, y_min, y_max, yellow_threshold,
+ red_threshold, extremes, red_up) {
+
+ var datas = new Array ();
+
+ $.each(data_base, function() {
+ // Prepared to turning series
+ //if(showed[this.id.split('_')[1]]) {
+ datas.push(this);
+ //}
+ });
+
+ // Resize the threshold data
+ $.each(threshold_data, function() {
+ if (/_up/.test(this.id)){
+ this.bars.barWidth = y_max - this.data[0][1];
+ }
+ if (/_down/.test(this.id)){
+ var end;
+ if (/critical/.test(this.id)) {
+ end = red_threshold;
+ } else {
+ end = extremes[this.id];
+ }
+ this.bars.barWidth = end - y_min;
+ this.data[0][1] = y_min;
+ }
+ if (/_normal/.test(this.id)){
+ var end;
+ if (/critical/.test(this.id)) {
+ end = red_up;
+ } else {
+ end = extremes[this.id + '_2'];
+ }
+ if (this.data[0][1] < y_min) {
+ this.bars.barWidth = end - y_min;
+ this.data[0][1] = y_min;
+ end = this.bars.barWidth + this.data[0][1];
+ }
+ if (end > y_max) {
+ this.bars.barWidth = y_max - this.data[0][1];
+ }
+ }
+ datas.push(this);
+ });
+
+ return datas;
+}
diff --git a/pandora_console/include/graphs/functions_flot.php b/pandora_console/include/graphs/functions_flot.php
index b3dbb11096..f618aba3b9 100644
--- a/pandora_console/include/graphs/functions_flot.php
+++ b/pandora_console/include/graphs/functions_flot.php
@@ -94,7 +94,7 @@ function flot_area_stacked_graph($chart_data, $width, $height, $color,
$serie_types = array(), $chart_extra_data = array(),
$yellow_threshold = 0, $red_threshold = 0, $adapt_key= '',
$force_integer = false, $series_suffix_str = '', $menu = true,
- $background_color = 'white', $dashboard = false, $vconsole = false) {
+ $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0) {
global $config;
@@ -102,7 +102,7 @@ function flot_area_stacked_graph($chart_data, $width, $height, $color,
$legend, $long_index, $homeurl, $unit, 'area_stacked',
$water_mark, $serie_types, $chart_extra_data, $yellow_threshold,
$red_threshold, $adapt_key, $force_integer, $series_suffix_str,
- $menu, $background_color, $dashboard, $vconsole);
+ $menu, $background_color, $dashboard, $vconsole, $agent_module_id);
}
function flot_area_simple_graph($chart_data, $width, $height, $color,
@@ -110,7 +110,7 @@ function flot_area_simple_graph($chart_data, $width, $height, $color,
$serie_types = array(), $chart_extra_data = array(),
$yellow_threshold = 0, $red_threshold = 0, $adapt_key= '',
$force_integer = false, $series_suffix_str = '', $menu = true,
- $background_color = 'white', $dashboard = false, $vconsole = false) {
+ $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0) {
global $config;
@@ -118,7 +118,7 @@ function flot_area_simple_graph($chart_data, $width, $height, $color,
$legend, $long_index, $homeurl, $unit, 'area_simple',
$water_mark, $serie_types, $chart_extra_data, $yellow_threshold,
$red_threshold, $adapt_key, $force_integer, $series_suffix_str,
- $menu, $background_color, $dashboard, $vconsole);
+ $menu, $background_color, $dashboard, $vconsole, $agent_module_id);
}
function flot_line_stacked_graph($chart_data, $width, $height, $color,
@@ -126,7 +126,7 @@ function flot_line_stacked_graph($chart_data, $width, $height, $color,
$serie_types = array(), $chart_extra_data = array(),
$yellow_threshold = 0, $red_threshold = 0, $adapt_key= '',
$force_integer = false, $series_suffix_str = '', $menu = true,
- $background_color = 'white', $dashboard = false, $vconsole = false) {
+ $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0) {
global $config;
@@ -134,7 +134,7 @@ function flot_line_stacked_graph($chart_data, $width, $height, $color,
$legend, $long_index, $homeurl, $unit, 'line_stacked',
$water_mark, $serie_types, $chart_extra_data, $yellow_threshold,
$red_threshold, $adapt_key, $force_integer, $series_suffix_str,
- $menu, $background_color, $dashboard, $vconsole);
+ $menu, $background_color, $dashboard, $vconsole, $agent_module_id);
}
function flot_line_simple_graph($chart_data, $width, $height, $color,
@@ -142,7 +142,7 @@ function flot_line_simple_graph($chart_data, $width, $height, $color,
$serie_types = array(), $chart_extra_data = array(),
$yellow_threshold = 0, $red_threshold = 0, $adapt_key= '',
$force_integer = false, $series_suffix_str = '', $menu = true,
- $background_color = 'white', $dashboard = false, $vconsole = false) {
+ $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0) {
global $config;
@@ -157,7 +157,7 @@ function flot_area_graph($chart_data, $width, $height, $color, $legend,
$long_index, $homeurl, $unit, $type, $water_mark, $serie_types,
$chart_extra_data, $yellow_threshold, $red_threshold, $adapt_key,
$force_integer, $series_suffix_str = '', $menu = true,
- $background_color = 'white', $dashboard = false, $vconsole = false) {
+ $background_color = 'white', $dashboard = false, $vconsole = false, $agent_module_id = 0) {
global $config;
@@ -189,9 +189,25 @@ function flot_area_graph($chart_data, $width, $height, $color, $legend,
$return = "";
// Set some containers to legend, graph, timestamp tooltip, etc.
$return .= " ";
+
+
+ // Get other required module datas to draw warning and critical
+ if ($agent_module_id == 0) {
+ $yellow_up = 0;
+ $red_up = 0;
+ $yellow_inverse = false;
+ $red_inverse = false;
+ } else {
+ $module_data = db_get_row_sql ('SELECT * FROM tagente_modulo WHERE id_agente_modulo = ' . $agent_module_id);
+ $yellow_up = $module_data['max_warning'];
+ $red_up = $module_data['max_critical'];
+ $yellow_inverse = !($module_data['warning_inverse'] == 0);
+ $red_inverse = !($module_data['critical_inverse'] == 0);
+ }
+
if ($menu) {
$threshold = false;
- if ($yellow_threshold != 0 || $red_threshold != 0) {
+ if ($yellow_threshold != $yellow_up || $red_threshold != $red_up) {
$threshold = true;
}
@@ -426,6 +442,10 @@ function flot_area_graph($chart_data, $width, $height, $color, $legend,
"$force_integer, \n" .
"'$separator', \n" .
"'$separator2', \n" .
+ "'$yellow_up', \n" .
+ "'$red_up', \n" .
+ "'$yellow_inverse', \n" .
+ "'$red_inverse', \n" .
"'$series_suffix_str',
'$vconsole');";
$return .= "\n//]]>";
diff --git a/pandora_console/include/graphs/pChart/pDraw.class.php b/pandora_console/include/graphs/pChart/pDraw.class.php
index 814f4ec824..300d2f49ba 100755
--- a/pandora_console/include/graphs/pChart/pDraw.class.php
+++ b/pandora_console/include/graphs/pChart/pDraw.class.php
@@ -2556,6 +2556,7 @@
if (floor($Value2) == 0) { return(0); }
if (is_infinite($Value2)) { return(0); }
if ($Value2 == 0.0) { return(0); }
+ if ($Value1 > $Value2) { return(0); }
if ($this->mod_check($Value1, $Value2)) { return(0); }
if (floor($Value2) != 0) { return($Value1 % $Value2); }
diff --git a/pandora_console/index.php b/pandora_console/index.php
index 1a0f617f4c..fa99a340b3 100755
--- a/pandora_console/index.php
+++ b/pandora_console/index.php
@@ -36,7 +36,7 @@ if ($develop_bypass != 1) {
exit;
}
}
-
+
if (filesize("include/config.php") == 0) {
include ("install.php");
exit;
@@ -99,7 +99,7 @@ if (!empty ($config["https"]) && empty ($_SERVER['HTTPS'])) {
if (sizeof ($_REQUEST))
//Some (old) browsers don't like the ?&key=var
$query .= '?1=1';
-
+
//We don't clean these variables up as they're only being passed along
foreach ($_GET as $key => $value) {
if ($key == 1)
@@ -110,11 +110,11 @@ if (!empty ($config["https"]) && empty ($_SERVER['HTTPS'])) {
$query .= '&'.$key.'='.$value;
}
$url = ui_get_full_url($query);
-
+
// Prevent HTTP response splitting attacks
// http://en.wikipedia.org/wiki/HTTP_response_splitting
$url = str_replace ("\n", "", $url);
-
+
header ('Location: '.$url);
exit; //Always exit after sending location headers
}
@@ -140,10 +140,10 @@ echo '' . "\n";
//This starts the page head. In the call back function, things from $page['head'] array will be processed into the head
ob_start ('ui_process_page_head');
-// Enterprise main
+// Enterprise main
enterprise_include ('index.php');
-// This tag is included in the buffer passed to ui_process_page_head so
+// This tag is included in the buffer passed to ui_process_page_head so
// technically it can be stripped
echo '' . "\n";
@@ -165,12 +165,12 @@ $process_login = false;
$change_pass = get_parameter_post('renew_password', 0);
if ($change_pass == 1) {
-
+
$password_old = (string) get_parameter_post ('old_password', '');
$password_new = (string) get_parameter_post ('new_password', '');
$password_confirm = (string) get_parameter_post ('confirm_new_password', '');
$id = (string) get_parameter_post ('login', '');
-
+
$changed_pass = login_update_password_check ($password_old, $password_new, $password_confirm, $id);
}
@@ -188,40 +188,40 @@ if (strlen($search) > 0) {
if (! isset ($config['id_user'])) {
if (isset ($_GET["login"])) {
include_once('include/functions_db.php'); //Include it to use escape_string_sql function
-
+
$config["auth_error"] = ""; //Set this to the error message from the authorization mechanism
$nick = get_parameter_post ("nick"); //This is the variable with the login
$pass = get_parameter_post ("pass"); //This is the variable with the password
$nick = db_escape_string_sql($nick);
$pass = db_escape_string_sql($pass);
-
+
//Since now, only the $pass variable are needed
unset ($_GET['pass'], $_POST['pass'], $_REQUEST['pass']);
-
+
// If the auth_code exists, we assume the user has come through the double auth page
if (isset ($_POST['auth_code'])) {
$double_auth_success = false;
-
+
// The double authentication is activated and the user has surpassed the first step (the login).
// Now the authentication code provided will be checked.
if (isset ($_SESSION['prepared_login_da'])) {
if (isset ($_SESSION['prepared_login_da']['id_user'])
&& isset ($_SESSION['prepared_login_da']['timestamp'])) {
-
+
// The user has a maximum of 5 minutes to introduce the double auth code
$dauth_period = SECONDS_2MINUTES;
$now = time();
$dauth_time = $_SESSION['prepared_login_da']['timestamp'];
-
+
if ($now - $dauth_period < $dauth_time) {
// Nick
$nick = $_SESSION["prepared_login_da"]['id_user'];
// Code
$code = (string) get_parameter_post ("auth_code");
-
+
if (!empty($code)) {
$result = validate_double_auth_code($nick, $code);
-
+
if ($result === true) {
// Double auth success
$double_auth_success = true;
@@ -231,7 +231,7 @@ if (! isset ($config['id_user'])) {
$login_screen = 'double_auth';
// Error message
$config["auth_error"] = __("Invalid code");
-
+
if (!isset($_SESSION['prepared_login_da']['attempts']))
$_SESSION['prepared_login_da']['attempts'] = 0;
$_SESSION['prepared_login_da']['attempts']++;
@@ -242,7 +242,7 @@ if (! isset ($config['id_user'])) {
$login_screen = 'double_auth';
// Error message
$config["auth_error"] = __("The code shouldn't be empty");
-
+
if (!isset($_SESSION['prepared_login_da']['attempts']))
$_SESSION['prepared_login_da']['attempts'] = 0;
$_SESSION['prepared_login_da']['attempts']++;
@@ -251,7 +251,7 @@ if (! isset ($config['id_user'])) {
else {
// Expired login
unset ($_SESSION['prepared_login_da']);
-
+
// Error message
$config["auth_error"] = __('Expired login');
}
@@ -259,7 +259,7 @@ if (! isset ($config['id_user'])) {
else {
// If the code doesn't exist, remove the prepared login
unset ($_SESSION['prepared_login_da']);
-
+
// Error message
$config["auth_error"] = __('Login error');
}
@@ -269,10 +269,10 @@ if (! isset ($config['id_user'])) {
// Error message
$config["auth_error"] = __('Login error');
}
-
+
// Remove the authenticator code
unset ($_POST['auth_code'], $code);
-
+
if (!$double_auth_success) {
$login_failed = true;
require_once ('general/login_page.php');
@@ -288,15 +288,10 @@ if (! isset ($config['id_user'])) {
$nick_in_db = $_SESSION["prepared_login_da"]['id_user'];
$expired_pass = false;
}
- else if (($config['auth'] == 'saml') && $login_button_saml) {
- if (is_user_admin($nick)) {
- $nick_in_db = $nick;
- }
- else {
- include_once(ENTERPRISE_DIR . "/include/auth/saml.php");
- $saml_user_id = saml_process_user_login();
- $nick_in_db = $saml_user_id;
- }
+ else if (($config['auth'] == 'saml') && $login_button_saml && !is_user_admin($nick)) {
+ include_once(ENTERPRISE_DIR . "/include/auth/saml.php");
+ $saml_user_id = saml_process_user_login();
+ $nick_in_db = $saml_user_id;
}
else {
// process_user_login is a virtual function which should be defined in each auth file.
@@ -304,27 +299,27 @@ if (! isset ($config['id_user'])) {
// The auth file can set $config["auth_error"] to an informative error output or reference their internal error messages to it
// process_user_login should return false in case of errors or invalid login, the nickname if correct
$nick_in_db = process_user_login ($nick, $pass);
-
+
$expired_pass = false;
-
+
if (($nick_in_db != false) && ((!is_user_admin($nick)
|| $config['enable_pass_policy_admin']))
&& (defined('PANDORA_ENTERPRISE'))
&& ($config['enable_pass_policy'])) {
include_once(ENTERPRISE_DIR . "/include/auth/mysql.php");
-
+
$blocked = login_check_blocked($nick);
-
+
if ($blocked) {
require_once ('general/login_page.php');
db_pandora_audit("Password expired", "Password expired: ".$nick, $nick);
while (@ob_end_flush ());
exit ("
|