This commit is contained in:
2024-10-14 00:08:40 +02:00
parent dbfba56f66
commit 1462d52e13
4572 changed files with 2658864 additions and 0 deletions

View File

@@ -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;