2010-01-15 Pablo de la Concepción <pablo.concepcion@artica.es>
* lib/PandoraFMS/Core.pm: Modified to have different functions for the creation and update of the agent when it has position information, also added some auxiliary functions to store and update this position information. * lib/PandoraFMS/DataServer.pm: Modified to use the new functions to create and update the agent data adding also the position information. * lib/PandoraFMS/PluginServer.pm, lib/PandoraFMS/PredictionServer.pm, lib/PandoraFMS/NetworkServer.pm, lib/PandoraFMS/WMIServer.pm: Modified to use again the old functions to create and update the angent as in this servers we don't have the position information. git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@2272 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
parent
e50294a8f7
commit
0743941092
|
@ -1,3 +1,17 @@
|
|||
2010-01-15 Pablo de la Concepción <pablo.concepcion@artica.es>
|
||||
|
||||
* lib/PandoraFMS/Core.pm: Modified to have different functions for the
|
||||
creation and update of the agent when it has position information, also
|
||||
added some auxiliary functions to store and update this position information.
|
||||
|
||||
* lib/PandoraFMS/DataServer.pm: Modified to use the new functions to create
|
||||
and update the agent data adding also the position information.
|
||||
|
||||
* lib/PandoraFMS/PluginServer.pm, lib/PandoraFMS/PredictionServer.pm,
|
||||
lib/PandoraFMS/NetworkServer.pm, lib/PandoraFMS/WMIServer.pm: Modified to use
|
||||
again the old functions to create and update the angent as in this servers
|
||||
we don't have the position information.
|
||||
|
||||
2010-01-14 Miguel de Dios <miguel.dedios@artica.es>
|
||||
* DEBIAN/* : restore previus version, I had mistake with this directory in
|
||||
Eclipse aplication between Enterprise and Open.
|
||||
|
|
|
@ -38,6 +38,7 @@ our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
|
|||
our @EXPORT = qw(
|
||||
pandora_audit
|
||||
pandora_create_agent
|
||||
pandora_create_agent_gis
|
||||
pandora_create_incident
|
||||
pandora_create_module
|
||||
pandora_evaluate_alert
|
||||
|
@ -59,9 +60,9 @@ our @EXPORT = qw(
|
|||
pandora_reset_server
|
||||
pandora_server_keep_alive
|
||||
pandora_update_agent
|
||||
pandora_update_agent_gis
|
||||
pandora_update_module_on_error
|
||||
pandora_update_server
|
||||
pandora_update_position
|
||||
|
||||
@ServerTypes
|
||||
);
|
||||
|
@ -711,25 +712,81 @@ sub pandora_update_server ($$$$$;$$) {
|
|||
##########################################################################
|
||||
# Update last contact field in agent table
|
||||
##########################################################################
|
||||
sub pandora_update_agent ($$$$$$$$) {
|
||||
sub pandora_update_agent ($$$$$$$) {
|
||||
my ($pa_config, $agent_timestamp, $agent_id, $os_version,
|
||||
$agent_version, $agent_interval, $timezone_offset, $dbh) = @_;
|
||||
$agent_version, $agent_interval, $dbh) = @_;
|
||||
|
||||
my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime());
|
||||
|
||||
pandora_access_update ($pa_config, $agent_id, $dbh);
|
||||
|
||||
# No update for interval nor timezone field (some old agents don't support it
|
||||
# No update for interval field (some old agents don't support it)
|
||||
if ($agent_interval == -1){
|
||||
db_do($dbh, 'UPDATE tagente SET agent_version = ?, ultimo_contacto_remoto = ?, ultimo_contacto = ?, os_version = ?, WHERE id_agente = ?',
|
||||
$agent_version, $agent_timestamp, $timestamp, $os_version, $agent_id);
|
||||
return;
|
||||
}
|
||||
|
||||
db_do ($dbh, 'UPDATE tagente SET intervalo = ?, agent_version = ?, ultimo_contacto_remoto = ?, ultimo_contacto = ?, os_version = ?, timezone_offset = ? WHERE id_agente = ?',
|
||||
$agent_interval, $agent_version, $agent_timestamp, $timestamp, $os_version, $timezone_offset, $agent_id);
|
||||
db_do ($dbh, 'UPDATE tagente SET intervalo = ?, agent_version = ?, ultimo_contacto_remoto = ?, ultimo_contacto = ?, os_version = ?, WHERE id_agente = ?',
|
||||
$agent_interval, $agent_version, $agent_timestamp, $timestamp, $os_version, $agent_id);
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
# Update last contact, timezone and position fields in agent table
|
||||
##########################################################################
|
||||
sub pandora_update_agent_gis ($$$$$$$$$$$) {
|
||||
my ($pa_config, $agent_timestamp, $agent_id, $os_version,
|
||||
$agent_version, $agent_interval, $timezone_offset,
|
||||
$longitude, $latitude, $altitude, $dbh) = @_;
|
||||
|
||||
my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime());
|
||||
|
||||
pandora_access_update ($pa_config, $agent_id, $dbh);
|
||||
|
||||
# No update for interval, timezone and position fields (some old agents don't support it)
|
||||
if ($agent_interval == -1){
|
||||
db_do($dbh, 'UPDATE tagente SET agent_version = ?, ultimo_contacto_remoto = ?, ultimo_contacto = ?, os_version = ?, WHERE id_agente = ?',
|
||||
$agent_version, $agent_timestamp, $timestamp, $os_version, $agent_id);
|
||||
return;
|
||||
}
|
||||
|
||||
logger($pa_config, "Agent id $agent_id",10);
|
||||
# Get the last position to see if it has moved.
|
||||
my $last_agent_info= get_db_single_row ($dbh, 'SELECT * FROM tagente WHERE id_agente = ?', $agent_id);
|
||||
|
||||
logger($pa_config, "Old Agent data: last-latitude = ". $last_agent_info->{'last_longitude'}. " ID: $agent_id ", 10);
|
||||
|
||||
# If the agent has moved outside the range stablised as
|
||||
if (distance_moved($last_agent_info->{'last_latitude'}, $last_agent_info->{'last_longitude'},$last_agent_info->{'last_altitude'}, $latitude, $longitude, $altitude) > 10 ){
|
||||
# Save the agent data in the agent table
|
||||
save_agent_position($pa_config, $timestamp, $last_agent_info->{'last_latitude'}, $last_agent_info->{'last_longitude'},$last_agent_info->{'last_altitude'}, $agent_id, $dbh);
|
||||
}
|
||||
else {
|
||||
# Update the end timestamp for the agent
|
||||
update_agent_position($pa_config, $timestamp, $agent_id, $dbh);
|
||||
}
|
||||
|
||||
db_do ($dbh, 'UPDATE tagente SET intervalo = ?, agent_version = ?, ultimo_contacto_remoto = ?, ultimo_contacto = ?, os_version = ?, timezone_offset = ?,
|
||||
last_longitude = ?, last_latitude =?, last_altitude = ? WHERE id_agente = ?',
|
||||
$agent_interval, $agent_version, $agent_timestamp, $timestamp, $os_version, $timezone_offset, $last_agent_info->{'last_latitude'}, $last_agent_info->{'last_longitude'},
|
||||
$last_agent_info->{'last_altitude'}, $agent_id);
|
||||
}
|
||||
|
||||
|
||||
sub distance_moved ($$$$$$) {
|
||||
my ($last_latitude, $last_longitude, $last_altiude, $latitude, $longitude, $altitude) = @_;
|
||||
|
||||
# Quick and dirty function to check if the point has moved.
|
||||
# $prec_factor = 1000000;
|
||||
# if (int ($last_latitude * $prec_factor) == int ($latitude * $prec_factor) &&
|
||||
# int ($last_longitude * $prec_factor) == int ($longitude * $prec_factor) &&
|
||||
# int ($last_altitude * $prec_factor) == int ($altitude * $prec_factor) ) { return false } else { return true}
|
||||
|
||||
# TODO: Replace with a valid calculation of the distance
|
||||
return rand(12);
|
||||
}
|
||||
|
||||
|
||||
##########################################################################
|
||||
# Updates the keep_alive module for the given agent.
|
||||
##########################################################################
|
||||
|
@ -818,6 +875,27 @@ sub pandora_create_agent ($$$$$$$$$$$) {
|
|||
pandora_event ($pa_config, "Agent [$agent_name] created by $server_name", $pa_config->{'autocreate_group'}, $agent_id, 2, 0, 0, 'new_agent', $dbh);
|
||||
return $agent_id;
|
||||
}
|
||||
##########################################################################
|
||||
# Create a new entry in tagente with position information
|
||||
##########################################################################
|
||||
sub pandora_create_agent_gis ($$$$$$$$$$$$$$$) {
|
||||
my ($pa_config, $server_name, $agent_name, $address,
|
||||
$address_id, $group_id, $parent_id, $os_id,
|
||||
$description, $interval, $timezone_offset,
|
||||
$longitude, $latitude, $altitude, $dbh) = @_;
|
||||
|
||||
logger ($pa_config, "Server '$server_name' creating agent '$agent_name' address '$address'.", 10);
|
||||
|
||||
$description = "Created by $server_name" unless ($description ne '');
|
||||
|
||||
my $agent_id = db_insert ($dbh, 'INSERT INTO tagente (`nombre`, `direccion`, `comentarios`, `id_grupo`, `id_os`, `server_name`, `intervalo`, `id_parent`,
|
||||
`timezone_offset`, `last_longitude`, `last_latitude`, `last_altitude`,`modo` ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)', $agent_name, $address,
|
||||
$description, $group_id, $os_id, $server_name, $interval, $parent_id, $timezone_offset, $longitude, $latitude, $altitude);
|
||||
|
||||
logger ($pa_config, "Server '$server_name' CREATED agent '$agent_name' address '$address'.", 10);
|
||||
pandora_event ($pa_config, "Agent [$agent_name] created by $server_name", $pa_config->{'autocreate_group'}, $agent_id, 2, 0, 0, 'new_agent', $dbh);
|
||||
return $agent_id;
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
# Generate an event.
|
||||
|
@ -1274,20 +1352,33 @@ sub pandora_inhibit_alerts ($$$) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
# Updates the end_timestamp of an agent in the tgis_data table
|
||||
##########################################################################
|
||||
sub update_agent_position($$$$) {
|
||||
my ($pa_config, $timestamp, $agent_id, $dbh) = @_;
|
||||
|
||||
logger($pa_config, "Updating agent position: end_timestamp=$timestamp agent_id=$agent_id", 10);
|
||||
|
||||
# Find the last data from the received agent
|
||||
my $agent_position = get_db_single_row ($dbh, 'SELECT * FROM tgis_data WHERE tagente_id_agente = ? ORDER BY start_timestamp DESC LIMIT 1', $agent_id );
|
||||
return unless (defined ($agent_position));
|
||||
|
||||
# Upadate the timestap of the received agent
|
||||
db_do ($dbh, 'UPDATE tgis_data SET end_timestamp = ? WHERE id_tgis_data = ?', $timestamp, $agent_position->{'id_tgis_data'});
|
||||
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
# Sets the new position of an agent in the tgis_data table
|
||||
# Saves the last position of an agent in the tgis_data table
|
||||
##########################################################################
|
||||
sub pandora_update_position($$$$$$) {
|
||||
my ($pa_config, $agent_id, $latitude, $longitude, $altitude, $dbh) = @_;
|
||||
|
||||
my $utimestamp = time ();
|
||||
my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime($utimestamp));
|
||||
|
||||
sub save_agent_position($$$$$$$) {
|
||||
my ($pa_config, $timestamp, $longitude,$latitude, $altitude, $agent_id, $dbh) = @_;
|
||||
|
||||
logger($pa_config, "Updating agent position: timestamp=$timestamp latitude=$latitude longitude=$longitude altitude=$altitude", 10);
|
||||
|
||||
db_insert($dbh, 'INSERT INTO tgis_data (`longitude`, `latitude`, `altitude`, `tagente_id_agente`, `start_timestamp`, `end_timestamp`) VALUES (?, ?, ?, ?, ?, ?)',
|
||||
"".$longitude, "".$latitude, $altitude, $agent_id, $timestamp, $timestamp);
|
||||
$longitude, $latitude, $altitude, $agent_id, $timestamp, $timestamp);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -215,7 +215,9 @@ sub process_xml_data ($$$$$) {
|
|||
$description = $data->{'description'} if (defined ($data->{'description'}));
|
||||
|
||||
# Create the agent
|
||||
$agent_id = pandora_create_agent ($pa_config, $pa_config->{'servername'}, $agent_name, '', 0, $group_id, 0, $os, $description, $interval, $dbh);
|
||||
logger($pa_config, "Creating agent $agent_name at long: $longitude lat: $latitude alt: $altitude", 5);
|
||||
$agent_id = pandora_create_agent_gis ($pa_config, $pa_config->{'servername'}, $agent_name, '', 0, $group_id, 0, $os, $description, $interval, $timezone_offset,
|
||||
$longitude, $latitude, $altitude, $dbh);
|
||||
if (! defined ($agent_id)) {
|
||||
$AgentSem->up ();
|
||||
return;
|
||||
|
@ -223,9 +225,10 @@ sub process_xml_data ($$$$$) {
|
|||
}
|
||||
$AgentSem->up ();
|
||||
|
||||
pandora_update_agent ($pa_config, $timestamp, $agent_id, $os_version, $agent_version, $interval, $timezone_offset, $dbh);
|
||||
# TODO: Check if it's needed to update the position
|
||||
pandora_update_position($pa_config, $agent_id, $latitude, $longitude, $altitude, $dbh);
|
||||
logger($pa_config, "Updating agent $agent_name at long: $longitude lat: $latitude alt: $altitude", 5);
|
||||
# Update agent information including position information
|
||||
pandora_update_agent_gis ($pa_config, $timestamp, $agent_id, $os_version, $agent_version, $interval, $timezone_offset, $latitude, $longitude, $altitude, $dbh);
|
||||
|
||||
pandora_module_keep_alive ($pa_config, $agent_id, $agent_name, $server_id, $dbh);
|
||||
|
||||
# Process modules
|
||||
|
|
|
@ -379,7 +379,7 @@ sub exec_network_module ($$$$) {
|
|||
pandora_process_module ($pa_config, $module_data, undef, $module, undef, $timestamp, $utimestamp, $server_id, $dbh);
|
||||
|
||||
# Update agent last contact using Pandora version as agent version
|
||||
pandora_update_agent ($pa_config, $timestamp, $id_agente, $pa_config->{'servername'}.'_Net', $pa_config->{'version'}, -1, 0, $dbh);
|
||||
pandora_update_agent ($pa_config, $timestamp, $id_agente, $pa_config->{'servername'}.'_Net', $pa_config->{'version'}, -1, $dbh);
|
||||
|
||||
} else {
|
||||
# Modules who cannot connect or something go bad, update last_execution_try field
|
||||
|
|
|
@ -207,7 +207,7 @@ sub data_consumer ($$) {
|
|||
my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime($utimestamp));
|
||||
|
||||
pandora_process_module ($pa_config, $module_data, undef, $module, undef, $timestamp, $utimestamp, $self->getServerID (), $dbh);
|
||||
pandora_update_agent ($pa_config, $timestamp, $module->{'id_agente'}, $pa_config->{'servername'}.'_Plugin', $pa_config->{'version'}, -1, 0, $dbh);
|
||||
pandora_update_agent ($pa_config, $timestamp, $module->{'id_agente'}, $pa_config->{'servername'}.'_Plugin', $pa_config->{'version'}, -1, $dbh);
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -236,7 +236,7 @@ sub exec_prediction_module ($$$$) {
|
|||
}
|
||||
|
||||
pandora_process_module ($pa_config, $module_data, undef, $agent_module, undef, $timestamp, $utimestamp, $server_id, $dbh);
|
||||
pandora_update_agent ($pa_config, $timestamp, $agent_module->{'id_agente'}, $pa_config->{'servername'}.'_Prediction', $pa_config->{'version'}, -1, 0,$dbh);
|
||||
pandora_update_agent ($pa_config, $timestamp, $agent_module->{'id_agente'}, $pa_config->{'servername'}.'_Prediction', $pa_config->{'version'}, -1, $dbh);
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -193,7 +193,7 @@ sub data_consumer ($$) {
|
|||
my $timestamp = strftime ("%Y-%m-%d %H:%M:%S", localtime($utimestamp));
|
||||
|
||||
pandora_process_module ($pa_config, $module_data, undef, $module, undef, $timestamp, $utimestamp, $self->getServerID (), $dbh);
|
||||
pandora_update_agent ($pa_config, $timestamp, $module->{'id_agente'}, $pa_config->{'servername'} . '_WMI', $pa_config->{'version'}, -1, 0,$dbh);
|
||||
pandora_update_agent ($pa_config, $timestamp, $module->{'id_agente'}, $pa_config->{'servername'} . '_WMI', $pa_config->{'version'}, -1, $dbh);
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
Loading…
Reference in New Issue