2007-05-07 Sancho Lerena <slerena@artica.es>

* bin/pandora_db.pm: Fixed some problems with quotes and other aditional
	checks.

	* bin/pandora_network.pl: Fixed some problems with quotes and other
	aditional checks.  Detected a serious BUG in snmplib for Ubuntu Freeze
	(already submitted as detected BUG with veryhigh priority). This makes
	pandora network server unusable on feisty until fixed :(. Bug item is in
	https://bugs.launchpad.net/ubuntu/+source/net-snmp/+bug/65047



git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@452 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
slerena 2007-05-07 11:45:01 +00:00
parent dfb5a815ba
commit 264b7aa66b
3 changed files with 61 additions and 25 deletions

View File

@ -1,3 +1,14 @@
2007-05-07 Sancho Lerena <slerena@artica.es>
* bin/pandora_db.pm: Fixed some problems with quotes and other aditional
checks.
* bin/pandora_network.pl: Fixed some problems with quotes and other
aditional checks. Detected a serious BUG in snmplib for Ubuntu Freeze
(already submitted as detected BUG with veryhigh priority). This makes
pandora network server unusable on feisty until fixed :(. Bug item is in
https://bugs.launchpad.net/ubuntu/+source/net-snmp/+bug/65047
2007-05-07 Sancho Lerena <slerena@artica.es> 2007-05-07 Sancho Lerena <slerena@artica.es>
* bin/pandora_db.pm: Fixed BUG #1714003 for data_inc unit division * bin/pandora_db.pm: Fixed BUG #1714003 for data_inc unit division

View File

@ -327,7 +327,7 @@ sub pandora_writestate (%$$$$$$$) {
my $estado = $_[5]; my $estado = $_[5];
my $dbh = $_[6]; my $dbh = $_[6];
my $needs_update = $_[7]; my $needs_update = $_[7];
my $timestamp = &UnixDate("today","%Y-%m-%d %H:%M:%S"); my $timestamp = &UnixDate ("today", "%Y-%m-%d %H:%M:%S");
my $utimestamp; # integer version of timestamp my $utimestamp; # integer version of timestamp
$utimestamp = &UnixDate($timestamp,"%s"); # convert from human to integer $utimestamp = &UnixDate($timestamp,"%s"); # convert from human to integer
my @data; my @data;
@ -544,8 +544,13 @@ sub module_generic_data (%$$$$$) {
my $m_name = $datos->{name}->[0]; my $m_name = $datos->{name}->[0];
my $a_desc = $datos->{description}->[0]; my $a_desc = $datos->{description}->[0];
my $m_data = $datos->{data}->[0]; my $m_data = $datos->{data}->[0];
my $bUpdateDatos = 0; # added, patch submitted by Dassing my $bUpdateDatos = 0; # added, patch submitted by Dassing
if (ref($m_data) ne "HASH"){ if (ref($m_data) ne "HASH"){
if (!is_numeric($m_data)){
logger($pa_config, "(data) Invalid data (non-numeric) received from $agent_name, module $m_name", 1);
return -1;
}
if ($m_data =~ /[0-9]*/){ if ($m_data =~ /[0-9]*/){
$m_data =~ s/\,/\./g; # replace "," by "." $m_data =~ s/\,/\./g; # replace "," by "."
$m_data = sprintf("%.2f", $m_data); # Two decimal float. We cannot store more $m_data = sprintf("%.2f", $m_data); # Two decimal float. We cannot store more
@ -628,10 +633,10 @@ sub module_generic_data_inc (%$$$$$) {
my $need_reset = 0; my $need_reset = 0;
my $need_update = 0; my $need_update = 0;
my $new_data = 0; my $new_data = 0;
my $data_anterior; my $data_anterior = 0;
my $timestamp_diferencia; my $timestamp_diferencia;
my $timestamp_anterior; my $timestamp_anterior;
my $m_utimestamp = &UnixDate($m_timestamp,"%s"); my $m_utimestamp = &UnixDate ($m_timestamp, "%s");
if ($id_agente_modulo == -1) { if ($id_agente_modulo == -1) {
$no_existe = 1; $no_existe = 1;
@ -647,7 +652,7 @@ sub module_generic_data_inc (%$$$$$) {
$diferencia = $m_data - $data_anterior; $diferencia = $m_data - $data_anterior;
$timestamp_diferencia = $m_utimestamp - $timestamp_anterior; $timestamp_diferencia = $m_utimestamp - $timestamp_anterior;
# get seconds between last data and this data # get seconds between last data and this data
if ($diferencia > 0){ if (($timestamp_diferencia > 0) && ($diferencia > 0)) {
$diferencia = $diferencia / $timestamp_diferencia; $diferencia = $diferencia / $timestamp_diferencia;
} }
if ($diferencia < 0 ){ if ($diferencia < 0 ){
@ -746,24 +751,24 @@ sub pandora_writedata (%$$$$$$$$$$){
$max = "0"; $max = "0";
} }
if (!defined($min)){ if (!defined($min)){
$min = "0"; $min = "0";
} }
# Obtenemos los identificadores # Obtenemos los identificadores
my $id_agente = dame_agente_id($pa_config, $nombre_agente,$dbh); my $id_agente = dame_agente_id($pa_config, $nombre_agente,$dbh);
# Check if exists module and agent_module reference in DB, if not, and learn mode activated, insert module in DB # Check if exists module and agent_module reference in DB, if not, and learn mode activated, insert module in DB
if ($id_agente eq "-1"){ if ($id_agente eq "-1"){
goto fin_DB_insert_datos; goto fin_DB_insert_datos;
} }
my $id_modulo = dame_modulo_id($pa_config, $tipo_modulo,$dbh); my $id_modulo = dame_modulo_id($pa_config, $tipo_modulo,$dbh);
my $id_agente_modulo = dame_agente_modulo_id($pa_config, $id_agente, $id_modulo, $nombre_modulo,$dbh); my $id_agente_modulo = dame_agente_modulo_id($pa_config, $id_agente, $id_modulo, $nombre_modulo,$dbh);
# Pandora 1.3. Now uses integer to store timestamp in datatables # Pandora 1.3. Now uses integer to store timestamp in datatables
# much more faster to do comparations... # much more faster to do comparations...
my $utimestamp; # integer version of timestamp my $utimestamp; # integer version of timestamp
$utimestamp = &UnixDate($timestamp,"%s"); # convert from human to integer $utimestamp = &UnixDate($timestamp,"%s"); # convert from human to integer
my $needscreate = 0; my $needscreate = 0;
# take max and min values for this id_agente_module # take max and min values for this id_agente_module
if ($id_agente_modulo != -1){ # ID AgenteModulo does exists if ($id_agente_modulo != -1){ # ID AgenteModulo does exists
my $query_idag = "SELECT * FROM tagente_modulo WHERE id_agente = $id_agente AND id_agente_modulo = ".$id_agente_modulo; my $query_idag = "SELECT * FROM tagente_modulo WHERE id_agente = $id_agente AND id_agente_modulo = ".$id_agente_modulo;
my $s_idag = $dbh->prepare($query_idag); my $s_idag = $dbh->prepare($query_idag);
$s_idag ->execute; $s_idag ->execute;
@ -803,13 +808,13 @@ sub pandora_writedata (%$$$$$$$$$$){
# Transform data (numeric types only) # Transform data (numeric types only)
if ($tipo_modulo =~ /string/){ if ($tipo_modulo =~ /string/){
$datos = $datos; # No change $datos = $datos; # No change
} else { # Numeric change to real } else { # Numeric change to real
$datos =~ s/\,/\./g; # replace "," by "."
$data[2] =~ s/\,/\./g; # replace "," by "."
$datos = sprintf("%.2f", $datos); $datos = sprintf("%.2f", $datos);
$data[2] = sprintf("%.2f", $data[2]); $data[2] = sprintf("%.2f", $data[2]);
# Two decimal float. We cannot store more # Two decimal float. We cannot store more
# to change this, you need to change mysql structure # to change this, you need to change mysql structure
$datos =~ s/\,/\./g; # replace "," by "."
$data[2] =~ s/\,/\./g; # replace "," by "."
} }
# Detect changes between stored data and adquired data. # Detect changes between stored data and adquired data.
if ($data[2] ne $datos){ if ($data[2] ne $datos){
@ -842,8 +847,10 @@ sub pandora_writedata (%$$$$$$$$$$){
$$Ref_bUpdateDatos = 1; # true $$Ref_bUpdateDatos = 1; # true
} }
if ($tipo_modulo =~ /string/) { # String module types if ($tipo_modulo =~ /string/) { # String module types
$datos = $dbh->quote($datos); # Parse data entry for adecuate SQL representation. $datos = $dbh->quote($datos);
$query = "insert into tagente_datos_string (id_agente_modulo,datos,timestamp,utimestamp,id_agente) VALUES ($id_agente_modulo,$datos,'$timestamp',$utimestamp,$id_agente)"; $timestamp = $dbh->quote($timestamp);
# Parse data entry for adecuate SQL representation.
$query = "INSERT INTO tagente_datos_string (id_agente_modulo, datos, timestamp, utimestamp, id_agente) VALUES ($id_agente_modulo, $datos, $timestamp, $utimestamp, $id_agente)";
} else { } else {
if ($max != $min) { if ($max != $min) {
if ($datos > $max) { if ($datos > $max) {
@ -857,8 +864,11 @@ sub pandora_writedata (%$$$$$$$$$$){
logger($pa_config, "DEBUG: MIN Value reached ($min) for agent $nombre_agente / $nombre_modulo",6); logger($pa_config, "DEBUG: MIN Value reached ($min) for agent $nombre_agente / $nombre_modulo",6);
} }
} }
$query = "insert into tagente_datos (id_agente_modulo, datos,timestamp, utimestamp, id_agente) VALUES ($id_agente_modulo, $datos, '$timestamp', $utimestamp, $id_agente)"; $datos = $dbh->quote($datos);
} # If data is out of limits, do not insert into database (Thanks for David Villanueva for his words) $timestamp = $dbh->quote($timestamp);
# Parse data entry for adecuate SQL representation.
$query = "INSERT INTO tagente_datos (id_agente_modulo, datos, timestamp, utimestamp, id_agente) VALUES ($id_agente_modulo, $datos, $timestamp, $utimestamp, $id_agente)";
} # If data is out of limits, do not insert into database
if ($outlimit == 0){ if ($outlimit == 0){
logger($pa_config, "DEBUG: pandora_insertdata Calculado id_agente_modulo a $id_agente_modulo",6); logger($pa_config, "DEBUG: pandora_insertdata Calculado id_agente_modulo a $id_agente_modulo",6);
logger($pa_config, "DEBUG: pandora_insertdata SQL : $query",10); logger($pa_config, "DEBUG: pandora_insertdata SQL : $query",10);

View File

@ -319,17 +319,32 @@ sub pandora_network_subsystem {
# pandora_ping_icmp (destination, timeout) - Do a ICMP scan, 1 if alive, 0 if not # pandora_ping_icmp (destination, timeout) - Do a ICMP scan, 1 if alive, 0 if not
############################################################################## ##############################################################################
sub pandora_ping_icmp { sub pandora_ping_icmp {
my $p;
my $dest = $_[0]; my $dest = $_[0];
my $l_timeout = $_[1]; my $l_timeout = $_[1];
# temporal vars.
my $result = 0;
my $p;
# Check for valid destination
if (!defined($dest)) {
return 0;
}
$p = Net::Ping->new("icmp",$l_timeout); $p = Net::Ping->new("icmp",$l_timeout);
if ($p->ping($dest) == 1) { $result = $p->ping($dest);
$p->close();
# Check for valid result
if (!defined($result)) {
return 0;
}
# Lets see the result
if ($result == 1) {
$p->close();
return 1; return 1;
} else { } else {
$p->close(); $p->close();
return 0; return 0;
} }
} }