From b3c1a4a3b9da2e4dd28fa64f8fe0f659d1a6aa35 Mon Sep 17 00:00:00 2001
From: Ramon Novoa <rnovoa@artica.es>
Date: Mon, 23 Apr 2012 12:16:20 +0000
Subject: [PATCH] 2012-04-23  Ramon Novoa  <rnovoa@artica.es>

	* lib/PandoraFMS/NetworkServer.pm,
	  lib/PandoraFMS/WMIServer.pm,
	  lib/PandoraFMS/PluginServer.pm: Simplified the calculation of
	  time_left to make sure it is always positive. Fixes bug #3519099.



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@6094 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
---
 pandora_server/ChangeLog                       | 7 +++++++
 pandora_server/lib/PandoraFMS/NetworkServer.pm | 8 ++++----
 pandora_server/lib/PandoraFMS/PluginServer.pm  | 8 ++++----
 pandora_server/lib/PandoraFMS/WMIServer.pm     | 8 ++++----
 4 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/pandora_server/ChangeLog b/pandora_server/ChangeLog
index 8b398bcb17..a91f116f48 100644
--- a/pandora_server/ChangeLog
+++ b/pandora_server/ChangeLog
@@ -1,3 +1,10 @@
+2012-04-23  Ramon Novoa  <rnovoa@artica.es>
+
+	* lib/PandoraFMS/NetworkServer.pm,
+	  lib/PandoraFMS/WMIServer.pm,
+	  lib/PandoraFMS/PluginServer.pm: Simplified the calculation of
+	  time_left to make sure it is always positive. Fixes bug #3519099.
+
 2012-04-20  Ramon Novoa  <rnovoa@artica.es>
 
 	* lib/PandoraFMS/Core.pm: Merged from 4.0 branch. Do not try to reset
diff --git a/pandora_server/lib/PandoraFMS/NetworkServer.pm b/pandora_server/lib/PandoraFMS/NetworkServer.pm
index d2c1aeccbc..af9a39a0ab 100644
--- a/pandora_server/lib/PandoraFMS/NetworkServer.pm
+++ b/pandora_server/lib/PandoraFMS/NetworkServer.pm
@@ -92,7 +92,7 @@ sub data_producer ($) {
 	my $network_filter = enterprise_hook ('get_network_filter', [$pa_config]);
 	
 	if ($pa_config->{'pandora_master'} == 0) {
-		@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left, last_execution_try
+		@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, tagente_estado.current_interval + tagente_estado.last_execution_try AS time_left, last_execution_try
 		FROM tagente, tagente_modulo, tagente_estado
 		WHERE server_name = ?
 		AND tagente_modulo.id_agente = tagente.id_agente
@@ -103,9 +103,9 @@ sub data_producer ($) {
 		'AND tagente_modulo.disabled = 0
 		AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
 		AND (tagente_modulo.flag = 1 OR ((tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP())) 
-		ORDER BY tagente_modulo.flag DESC, time_left DESC, tagente_estado.last_execution_try ASC ', $pa_config->{'servername'});
+		ORDER BY tagente_modulo.flag DESC, time_left ASC, tagente_estado.last_execution_try ASC ', $pa_config->{'servername'});
     } else {
-		@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, tagente_estado.last_execution_try, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try  AS time_left, last_execution_try
+		@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, tagente_estado.last_execution_try, tagente_estado.current_interval + tagente_estado.last_execution_try AS time_left, last_execution_try
 		FROM tagente, tagente_modulo, tagente_estado
 		WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0))) 
 		AND tagente_modulo.id_agente = tagente.id_agente
@@ -116,7 +116,7 @@ sub data_producer ($) {
 		. (defined ($network_filter) ? $network_filter : ' ') .
 		'AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
 		AND (tagente_modulo.flag = 1 OR ((tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP()))
-		ORDER BY tagente_modulo.flag DESC, time_left DESC, tagente_estado.last_execution_try ASC', $pa_config->{'servername'});
+		ORDER BY tagente_modulo.flag DESC, time_left ASC, tagente_estado.last_execution_try ASC', $pa_config->{'servername'});
 	}
 
 	foreach my $row (@rows) {
diff --git a/pandora_server/lib/PandoraFMS/PluginServer.pm b/pandora_server/lib/PandoraFMS/PluginServer.pm
index 3db09f029c..c4f8830de1 100644
--- a/pandora_server/lib/PandoraFMS/PluginServer.pm
+++ b/pandora_server/lib/PandoraFMS/PluginServer.pm
@@ -89,7 +89,7 @@ sub data_producer ($) {
 	my @rows;
 
 	if ($pa_config->{'pandora_master'} != 1) {
-		@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try  AS time_left, last_execution_try
+		@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, tagente_estado.current_interval + tagente_estado.last_execution_try AS time_left, last_execution_try
 			FROM tagente, tagente_modulo, tagente_estado
 			WHERE server_name = ?
 			AND tagente_modulo.id_agente = tagente.id_agente
@@ -98,9 +98,9 @@ sub data_producer ($) {
 			AND tagente_modulo.disabled = 0
 			AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
 			AND (tagente_modulo.flag = 1 OR (tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP())
-			ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC', $pa_config->{'servername'});
+			ORDER BY tagente_modulo.flag DESC, time_left ASC, last_execution_try ASC', $pa_config->{'servername'});
     } else {
-		@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try  AS time_left, last_execution_try
+		@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, tagente_estado.current_interval + tagente_estado.last_execution_try AS time_left, last_execution_try
 			FROM tagente, tagente_modulo, tagente_estado
 			WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0)))
 			AND tagente_modulo.id_agente = tagente.id_agente
@@ -109,7 +109,7 @@ sub data_producer ($) {
 			AND tagente_modulo.id_plugin != 0
 			AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
 			AND (tagente_modulo.flag = 1 OR (tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP())
-			ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC', $pa_config->{'servername'});
+			ORDER BY tagente_modulo.flag DESC, time_left ASC, last_execution_try ASC', $pa_config->{'servername'});
 	}
 
 	foreach my $row (@rows) {
diff --git a/pandora_server/lib/PandoraFMS/WMIServer.pm b/pandora_server/lib/PandoraFMS/WMIServer.pm
index f0dc9b1eb9..95f9008c2c 100644
--- a/pandora_server/lib/PandoraFMS/WMIServer.pm
+++ b/pandora_server/lib/PandoraFMS/WMIServer.pm
@@ -89,7 +89,7 @@ sub data_producer ($) {
 	my @rows;
 
 	if ($pa_config->{'pandora_master'} != 1) {
-		@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try  AS time_left, last_execution_try
+		@rows = get_db_rows ($dbh, 'SELECT tagente_modulo.id_agente_modulo, tagente_modulo.flag, tagente_estado.current_interval + tagente_estado.last_execution_try  AS time_left, last_execution_try
 			FROM tagente, tagente_modulo, tagente_estado
 			WHERE server_name = ?
 			AND tagente_modulo.id_agente = tagente.id_agente
@@ -99,9 +99,9 @@ sub data_producer ($) {
 			AND	tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
 			AND ((tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP() 
 			OR tagente_modulo.flag = 1)				
-			ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC', $pa_config->{'servername'});		
+			ORDER BY tagente_modulo.flag DESC, time_left ASC, last_execution_try ASC', $pa_config->{'servername'});		
 	} else {
-		@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, UNIX_TIMESTAMP() - tagente_estado.current_interval - tagente_estado.last_execution_try AS time_left, last_execution_try
+		@rows = get_db_rows ($dbh, 'SELECT DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag, tagente_estado.current_interval + tagente_estado.last_execution_try AS time_left, last_execution_try
 			FROM tagente, tagente_modulo, tagente_estado, tserver
 			WHERE ((server_name = ?) OR (server_name = ANY(SELECT name FROM tserver WHERE status = 0)))
 			AND tagente_modulo.id_agente = tagente.id_agente
@@ -110,7 +110,7 @@ sub data_producer ($) {
 			AND tagente_modulo.id_modulo = 6
 			AND tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
 			AND ((tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP() OR tagente_modulo.flag = 1 )
-			ORDER BY tagente_modulo.flag DESC, time_left DESC, last_execution_try ASC', $pa_config->{'servername'});
+			ORDER BY tagente_modulo.flag DESC, time_left ASC, last_execution_try ASC', $pa_config->{'servername'});
 	}
 
 	foreach my $row (@rows) {