init III
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
# --
|
||||
# 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;
|
||||
Reference in New Issue
Block a user