117 lines
3.6 KiB
Perl
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;
|