140 lines
4.1 KiB
Perl
140 lines
4.1 KiB
Perl
# --
|
|
# Copyright (C) 2001-2019 OTRS AG, https://otrs.com/
|
|
# --
|
|
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
|
|
# the enclosed file COPYING for license information (GPL). If you
|
|
# did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt.
|
|
# --
|
|
|
|
package Kernel::System::SupportDataCollector::Plugin::OTRS::CommunicationLogAccountStatus;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use parent qw(Kernel::System::SupportDataCollector::PluginBase);
|
|
|
|
use Kernel::System::VariableCheck qw(:all);
|
|
use Kernel::Language qw(Translatable);
|
|
|
|
our @ObjectDependencies = (
|
|
'Kernel::Config',
|
|
'Kernel::System::CommunicationLog::DB',
|
|
'Kernel::System::DateTime',
|
|
'Kernel::System::MailAccount',
|
|
);
|
|
|
|
sub GetDisplayPath {
|
|
return Translatable('OTRS') . '/' . Translatable('Communication Log Account Status (last 24 hours)');
|
|
}
|
|
|
|
sub Run {
|
|
my $Self = shift;
|
|
|
|
my $CommunicationLogDBObj = $Kernel::OM->Get('Kernel::System::CommunicationLog::DB');
|
|
my $DateTime = $Kernel::OM->Create('Kernel::System::DateTime');
|
|
$DateTime->Subtract( Days => 1 );
|
|
|
|
my $Connections = $CommunicationLogDBObj->GetConnectionsObjectsAndCommunications(
|
|
ObjectLogStartDate => $DateTime->ToString(),
|
|
);
|
|
|
|
if ( !$Connections || !@{$Connections} ) {
|
|
$Self->AddResultInformation(
|
|
Identifier => 'NoConnections',
|
|
Label => Translatable('No connections found.'),
|
|
);
|
|
return $Self->GetResults();
|
|
}
|
|
|
|
my %Account;
|
|
|
|
CONNECTION:
|
|
for my $Connection ( @{$Connections} ) {
|
|
next CONNECTION if !$Connection->{AccountType};
|
|
|
|
my $AccountKey = $Connection->{AccountType};
|
|
if ( $Connection->{AccountID} ) {
|
|
$AccountKey .= "::$Connection->{AccountID}";
|
|
}
|
|
|
|
if ( !$Account{$AccountKey} ) {
|
|
$Account{$AccountKey} = {
|
|
AccountID => $Connection->{AccountID},
|
|
AccountType => $Connection->{AccountType},
|
|
};
|
|
}
|
|
|
|
$Account{$AccountKey}->{ $Connection->{ObjectLogStatus} } ||= [];
|
|
|
|
push @{ $Account{$AccountKey}->{ $Connection->{ObjectLogStatus} } }, $Connection->{CommunicationID};
|
|
}
|
|
|
|
my @AllMailAccounts = $Kernel::OM->Get('Kernel::System::MailAccount')->MailAccountGetAll();
|
|
|
|
my %MailAccounts = map { $_->{ID} ? ( "$_->{Type}::$_->{ID}" => $_ ) : ( $_->{Type} => $_ ) } @AllMailAccounts;
|
|
|
|
for my $AccountKey ( sort keys %Account ) {
|
|
|
|
my $HealthStatus = $Self->_CheckHealth( $Account{$AccountKey} );
|
|
|
|
my $AccountLabel = $Account{$AccountKey}->{AccountType};
|
|
if ( $Account{$AccountKey}->{AccountID} && $MailAccounts{$AccountKey} ) {
|
|
|
|
my $MailAccount = $MailAccounts{$AccountKey};
|
|
|
|
$AccountLabel = "$MailAccount->{Host} / $MailAccount->{Login} ($Account{$AccountKey}->{AccountType})";
|
|
}
|
|
elsif ( $Account{$AccountKey}->{AccountID} ) {
|
|
$AccountLabel = $AccountKey;
|
|
}
|
|
|
|
if ( $HealthStatus eq 'Success' ) {
|
|
$Self->AddResultOk(
|
|
Identifier => $AccountKey,
|
|
Label => $AccountLabel,
|
|
Value => Translatable('ok'),
|
|
);
|
|
}
|
|
elsif ( $HealthStatus eq 'Failed' ) {
|
|
$Self->AddResultProblem(
|
|
Identifier => $AccountKey,
|
|
Label => $AccountLabel,
|
|
Value => Translatable('permanent connection errors'),
|
|
);
|
|
}
|
|
elsif ( $HealthStatus eq 'Warning' ) {
|
|
$Self->AddResultWarning(
|
|
Identifier => $AccountKey,
|
|
Label => $AccountLabel,
|
|
Value => Translatable('intermittent connection errors'),
|
|
);
|
|
|
|
}
|
|
}
|
|
|
|
return $Self->GetResults();
|
|
|
|
}
|
|
|
|
sub _CheckHealth {
|
|
my ( $Self, $Connections ) = @_;
|
|
|
|
# Success if all is Successful;
|
|
# Failed if all is Failed;
|
|
# Warning if has both Successful and Failed Connections;
|
|
|
|
my $Health = 'Success';
|
|
|
|
if ( IsArrayRefWithData( $Connections->{Failed} ) ) {
|
|
$Health = 'Failed';
|
|
if ( IsArrayRefWithData( $Connections->{Successful} ) ) {
|
|
$Health = 'Warning';
|
|
}
|
|
}
|
|
|
|
return $Health;
|
|
|
|
}
|
|
|
|
1;
|