Armadito-Agent
view release on metacpan or search on metacpan
lib/Armadito/Agent/Antivirus/Kaspersky/Task/State.pm view on Meta::CPAN
package Armadito::Agent::Antivirus::Kaspersky::Task::State;
use strict;
use warnings;
use base 'Armadito::Agent::Task::State';
use Armadito::Agent::Tools::File qw(readFile);
use XML::LibXML;
use Time::Local;
sub run {
my ( $self, %params ) = @_;
$self = $self->SUPER::run(%params);
$self->{data} = {
dbinfo => {},
avdetails => []
};
$self->_parseUpdateIndex();
$self->_parseProfilesFile();
$self->_sendToGLPI( $self->{data} );
}
sub _getUpdateIndexPath {
my ($self) = @_;
my $osclass = $self->{agent}->{antivirus}->getOSClass();
return $osclass->getDataPath() . "u1313g.xml";
}
sub _parseUpdateIndex {
my ($self) = @_;
my $update_index = $self->_getUpdateIndexPath();
my $filecontent = readFile( filepath => $update_index );
$filecontent =~ s/(.*);.*$/$1/ms;
my $parser = XML::LibXML->new();
my $doc = $parser->parse_string($filecontent);
$self->{data}->{dbinfo} = $self->_getDatabasesInfo($doc);
}
sub _getDatabasesInfo {
my ( $self, $doc ) = @_;
my ($node) = $doc->findnodes('/Update');
my $date = $node->getAttribute('Date');
my $dbinfo = {
global_update_timestamp => $self->_toTimestamp($date),
modules => $self->_getModulesInfo($node)
};
return $dbinfo;
}
sub _getModulesInfo {
my ( $self, $node ) = @_;
my @mod_simple = $self->_getModulesSimpleIndexes($node);
my @mod_multiple = $self->_getModulesMultipleIndexes($node);
my @modules_infos = ( @mod_simple, @mod_multiple );
return \@modules_infos;
}
sub _getModulesSimpleIndexes {
my ( $self, $node ) = @_;
my @modules = ();
foreach ( $node->findnodes('./Index') ) {
( run in 1.002 second using v1.01-cache-2.11-cpan-364913b4093 )