Merge branch 'ent-3418-nueva-estructura-de-datos-tnetworkmatrix' into 'develop'
Ent 3418 nueva estructura de datos tnetworkmatrix See merge request artica/pandorafms!2136 Former-commit-id: b04eaee2ce78625f9710b0851609ca8dfa2aea43
This commit is contained in:
commit
c75f94f9e0
|
@ -1868,3 +1868,17 @@ CREATE TABLE IF NOT EXISTS `tgis_map_layer_groups` (
|
||||||
FOREIGN KEY (`group_id`) REFERENCES `tgrupo` (`id_grupo`) ON DELETE CASCADE,
|
FOREIGN KEY (`group_id`) REFERENCES `tgrupo` (`id_grupo`) ON DELETE CASCADE,
|
||||||
FOREIGN KEY (`agent_id`) REFERENCES `tagente` (`id_agente`) ON DELETE CASCADE
|
FOREIGN KEY (`agent_id`) REFERENCES `tagente` (`id_agente`) ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
-- Table `tnetwork_matrix`
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `tnetwork_matrix` (
|
||||||
|
`id` int(10) unsigned NOT NULL auto_increment,
|
||||||
|
`source` varchar(60) default '',
|
||||||
|
`destination` varchar(60) default '',
|
||||||
|
`utimestamp` bigint(20) default 0,
|
||||||
|
`bytes` int(18) unsigned default 0,
|
||||||
|
`pkts` int(18) unsigned default 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE (`source`, `destination`, `utimestamp`)
|
||||||
|
) ENGINE = InnoDB DEFAULT CHARSET=utf8 ;
|
||||||
|
|
|
@ -3378,3 +3378,17 @@ CREATE TABLE IF NOT EXISTS `tagent_custom_fields_filter` (
|
||||||
`group_search` int(10) unsigned default '0',
|
`group_search` int(10) unsigned default '0',
|
||||||
PRIMARY KEY(`id`)
|
PRIMARY KEY(`id`)
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE = InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
-- Table `tnetwork_matrix`
|
||||||
|
-- -----------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS `tnetwork_matrix` (
|
||||||
|
`id` int(10) unsigned NOT NULL auto_increment,
|
||||||
|
`source` varchar(60) default '',
|
||||||
|
`destination` varchar(60) default '',
|
||||||
|
`utimestamp` bigint(20) default 0,
|
||||||
|
`bytes` int(18) unsigned default 0,
|
||||||
|
`pkts` int(18) unsigned default 0,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE (`source`, `destination`, `utimestamp`)
|
||||||
|
) ENGINE = InnoDB DEFAULT CHARSET=utf8 ;
|
|
@ -29,6 +29,8 @@ use XML::Parser::Expat;
|
||||||
use XML::Simple;
|
use XML::Simple;
|
||||||
use POSIX qw(setsid strftime);
|
use POSIX qw(setsid strftime);
|
||||||
use IO::Uncompress::Unzip;
|
use IO::Uncompress::Unzip;
|
||||||
|
use JSON qw(decode_json);
|
||||||
|
use MIME::Base64;
|
||||||
|
|
||||||
# For Reverse Geocoding
|
# For Reverse Geocoding
|
||||||
use LWP::Simple;
|
use LWP::Simple;
|
||||||
|
@ -217,6 +219,10 @@ sub data_consumer ($$) {
|
||||||
process_xml_server ($self->getConfig (), $file_name, $xml_data, $self->getDBH ());
|
process_xml_server ($self->getConfig (), $file_name, $xml_data, $self->getDBH ());
|
||||||
} elsif (defined($xml_data->{'connection_source'})) {
|
} elsif (defined($xml_data->{'connection_source'})) {
|
||||||
enterprise_hook('process_xml_connections', [$self->getConfig (), $file_name, $xml_data, $self->getDBH ()]);
|
enterprise_hook('process_xml_connections', [$self->getConfig (), $file_name, $xml_data, $self->getDBH ()]);
|
||||||
|
} elsif (defined($xml_data->{'network_matrix'})){
|
||||||
|
process_xml_matrix_network(
|
||||||
|
$self->getConfig(), $xml_data, $self->getDBH()
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
process_xml_data ($self->getConfig (), $file_name, $xml_data, $self->getServerID (), $self->getDBH ());
|
process_xml_data ($self->getConfig (), $file_name, $xml_data, $self->getServerID (), $self->getDBH ());
|
||||||
}
|
}
|
||||||
|
@ -321,6 +327,7 @@ sub process_xml_data ($$$$$) {
|
||||||
|
|
||||||
# Get agent id
|
# Get agent id
|
||||||
my $agent_id = get_agent_id ($dbh, $agent_name);
|
my $agent_id = get_agent_id ($dbh, $agent_name);
|
||||||
|
my $group_id = 0;
|
||||||
if ($agent_id < 1) {
|
if ($agent_id < 1) {
|
||||||
if ($pa_config->{'autocreate'} == 0) {
|
if ($pa_config->{'autocreate'} == 0) {
|
||||||
logger($pa_config, "ERROR: There is no agent defined with name $agent_name", 3);
|
logger($pa_config, "ERROR: There is no agent defined with name $agent_name", 3);
|
||||||
|
@ -329,7 +336,7 @@ sub process_xml_data ($$$$$) {
|
||||||
|
|
||||||
# Get OS, group and description
|
# Get OS, group and description
|
||||||
my $os = pandora_get_os ($dbh, $data->{'os_name'});
|
my $os = pandora_get_os ($dbh, $data->{'os_name'});
|
||||||
my $group_id = $pa_config->{'autocreate_group'};
|
$group_id = $pa_config->{'autocreate_group'};
|
||||||
if (! defined (get_group_name ($dbh, $group_id))) {
|
if (! defined (get_group_name ($dbh, $group_id))) {
|
||||||
if (defined ($data->{'group_id'}) && $data->{'group_id'} ne '') {
|
if (defined ($data->{'group_id'}) && $data->{'group_id'} ne '') {
|
||||||
$group_id = $data->{'group_id'};
|
$group_id = $data->{'group_id'};
|
||||||
|
@ -594,6 +601,9 @@ sub process_xml_data ($$$$$) {
|
||||||
|
|
||||||
# Process snmptrapd modules
|
# Process snmptrapd modules
|
||||||
enterprise_hook('process_snmptrap_data', [$pa_config, $data, $server_id, $dbh]);
|
enterprise_hook('process_snmptrap_data', [$pa_config, $data, $server_id, $dbh]);
|
||||||
|
|
||||||
|
# Process events
|
||||||
|
process_events_dataserver($pa_config, $data, $agent_id, $group_id, $dbh);
|
||||||
}
|
}
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
@ -962,5 +972,85 @@ sub unlink_modules {
|
||||||
db_do($dbh, "UPDATE tagente_modulo SET parent_module_id = 0 WHERE id_agente_modulo = ?", $child_id);
|
db_do($dbh, "UPDATE tagente_modulo SET parent_module_id = 0 WHERE id_agente_modulo = ?", $child_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# Process events in the XML.
|
||||||
|
##########################################################################
|
||||||
|
sub process_events_dataserver {
|
||||||
|
my ($pa_config, $data, $agent_id, $group_id, $dbh) = @_;
|
||||||
|
|
||||||
|
return unless defined($data->{'events'});
|
||||||
|
|
||||||
|
foreach my $event (@{$data->{'events'}}) {
|
||||||
|
next unless defined($event->{'event'}) && defined($event->{'event'}->[0]);
|
||||||
|
my $event_info_encoded = $event->{'event'}->[0];
|
||||||
|
|
||||||
|
# Try to decode the base64 inside
|
||||||
|
my $event_info;
|
||||||
|
eval {
|
||||||
|
$event_info = decode_json(decode_base64($event_info_encoded));
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($@) {
|
||||||
|
logger($pa_config, "Error processing base64 event data '$event_info_encoded'.", 5);
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
next unless defined($event_info->{'data'});
|
||||||
|
|
||||||
|
pandora_event(
|
||||||
|
$pa_config,
|
||||||
|
$event_info->{'data'},
|
||||||
|
$group_id,
|
||||||
|
$agent_id,
|
||||||
|
defined($event_info->{'severity'}) ? $event_info->{'severity'} : 0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
'system',
|
||||||
|
0,
|
||||||
|
$dbh
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
##########################################################################
|
||||||
|
# Process events in the XML.
|
||||||
|
##########################################################################
|
||||||
|
sub process_xml_matrix_network {
|
||||||
|
my ($pa_config, $data, $dbh) = @_;
|
||||||
|
|
||||||
|
my $utimestamp = $data->{'network_matrix'}->[0]->{'utimestamp'};
|
||||||
|
my $content = $data->{'network_matrix'}->[0]->{'content'};
|
||||||
|
return unless defined($utimestamp) && defined($content);
|
||||||
|
|
||||||
|
# Try to decode the base64 inside
|
||||||
|
my $matrix_info;
|
||||||
|
eval {
|
||||||
|
$matrix_info = decode_json(decode_base64($content));
|
||||||
|
};
|
||||||
|
|
||||||
|
if ($@) {
|
||||||
|
logger($pa_config, "Error processing base64 matrix data '$content'.", 5);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
foreach my $source (keys %$matrix_info) {
|
||||||
|
foreach my $destination (keys %{$matrix_info->{$source}}) {
|
||||||
|
my $matrix_single_data = $matrix_info->{$source}->{$destination};
|
||||||
|
$matrix_single_data->{'source'} = $source;
|
||||||
|
$matrix_single_data->{'destination'} = $destination;
|
||||||
|
$matrix_single_data->{'utimestamp'} = $utimestamp;
|
||||||
|
eval {
|
||||||
|
db_process_insert($dbh, 'id', 'tnetwork_matrix', $matrix_single_data);
|
||||||
|
};
|
||||||
|
if ($@) {
|
||||||
|
logger($pa_config, "Error inserted matrix data. Source: $source, destination: $destination, utimestamp: $utimestamp.", 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
Loading…
Reference in New Issue