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 )