Files
2024-10-14 00:08:40 +02:00

117 lines
3.6 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::OS::Swap;
use strict;
use warnings;
use parent qw(Kernel::System::SupportDataCollector::PluginBase);
use Kernel::Language qw(Translatable);
our @ObjectDependencies = ();
sub GetDisplayPath {
return Translatable('Operating System');
}
sub Run {
my $Self = shift;
# Check if used OS is a linux system
if ( $^O !~ /(linux|unix|netbsd|freebsd|darwin)/i ) {
return $Self->GetResults();
}
my $MemInfoFile;
my ( $MemTotal, $MemFree, $SwapTotal, $SwapFree );
# If used OS is a linux system
if ( -e "/proc/meminfo" && open( $MemInfoFile, '<', "/proc/meminfo" ) ) { ## no critic
while (<$MemInfoFile>) {
my $TmpLine = $_;
if ( $TmpLine =~ /MemTotal/ ) {
$TmpLine =~ s/^.*?(\d+).*$/$1/;
$MemTotal = int($TmpLine);
}
elsif ( $TmpLine =~ /MemFree/ ) {
$TmpLine =~ s/^.*?(\d+).*$/$1/;
$MemFree = int($TmpLine);
}
elsif ( $TmpLine =~ /SwapTotal/ ) {
$TmpLine =~ s/^.*?(\d+).*$/$1/;
$SwapTotal = int($TmpLine);
}
elsif ( $TmpLine =~ /SwapFree/ ) {
$TmpLine =~ s/^.*?(\d+).*$/$1/;
$SwapFree = int($TmpLine);
}
}
close($MemInfoFile);
}
if ($MemTotal) {
if ( !$SwapTotal ) {
$Self->AddResultProblem(
Identifier => 'SwapFree',
Label => Translatable('Free Swap Space (%)'),
Value => 0,
Message => Translatable('No swap enabled.'),
);
$Self->AddResultProblem(
Identifier => 'SwapUsed',
Label => Translatable('Used Swap Space (MB)'),
Value => 0,
Message => Translatable('No swap enabled.'),
);
}
else {
my $SwapFreeRelative = int( $SwapFree / $SwapTotal * 100 );
if ( $SwapFreeRelative < 60 ) {
$Self->AddResultProblem(
Identifier => 'SwapFree',
Label => Translatable('Free Swap Space (%)'),
Value => $SwapFreeRelative,
Message => Translatable('There should be more than 60% free swap space.'),
);
}
else {
$Self->AddResultOk(
Identifier => 'SwapFree',
Label => Translatable('Free Swap Space (%)'),
Value => $SwapFreeRelative,
);
}
my $SwapUsed = ( $SwapTotal - $SwapFree ) / 1024;
if ( $SwapUsed > 200 ) {
$Self->AddResultProblem(
Identifier => 'SwapUsed',
Label => Translatable('Used Swap Space (MB)'),
Value => $SwapUsed,
Message => Translatable('There should be no more than 200 MB swap space used.'),
);
}
else {
$Self->AddResultOk(
Identifier => 'SwapUsed',
Label => Translatable('Used Swap Space (MB)'),
Value => $SwapUsed,
);
}
}
}
return $Self->GetResults();
}
1;