112 lines
3.0 KiB
Perl
112 lines
3.0 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::DiskSpacePartitions;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use parent qw(Kernel::System::SupportDataCollector::PluginBase);
|
|
|
|
use Kernel::Language qw(Translatable);
|
|
|
|
our @ObjectDependencies = ();
|
|
|
|
sub GetDisplayPath {
|
|
return Translatable('Operating System') . '/' . Translatable('Disk Partitions Usage');
|
|
}
|
|
|
|
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 $Commandline = "df -lHx tmpfs -x iso9660 -x udf -x squashfs";
|
|
|
|
# current MacOS and FreeBSD does not support the -x flag for df
|
|
if ( $^O =~ /(darwin|freebsd)/i ) {
|
|
$Commandline = "df -lH";
|
|
}
|
|
|
|
# run the command an store the result on an array
|
|
my @Lines;
|
|
if ( open( my $In, "-|", "$Commandline" ) ) {
|
|
@Lines = <$In>;
|
|
close($In);
|
|
}
|
|
|
|
# clean results, in some systems when partition is too long it splits the line in two, it is
|
|
# needed to have all partition information in just one line for example
|
|
# From:
|
|
# /dev/mapper/system-tmp
|
|
# 2064208 85644 1873708 5% /tmp
|
|
# To:
|
|
# /dev/mapper/system-tmp 2064208 85644 1873708 5% /tmp
|
|
my @CleanLines;
|
|
my $PreviousLine;
|
|
|
|
LINE:
|
|
for my $Line (@Lines) {
|
|
|
|
chomp $Line;
|
|
|
|
# if line does not have percent number (then it should only contain the partition)
|
|
if ( $Line !~ m{\d+%} ) {
|
|
|
|
# remember the line
|
|
$PreviousLine = $Line;
|
|
next LINE;
|
|
}
|
|
|
|
# if line starts with just spaces and have a percent number
|
|
elsif ( $Line =~ m{\A \s+ (?: \d+ | \s+)+ \d+ % .+? \z}msx ) {
|
|
|
|
# concatenate previous line and store it
|
|
push @CleanLines, $PreviousLine . $Line;
|
|
$PreviousLine = '';
|
|
next LINE;
|
|
}
|
|
|
|
# otherwise store the line as it is
|
|
push @CleanLines, $Line;
|
|
$PreviousLine = '';
|
|
}
|
|
|
|
my %SeenPartitions;
|
|
LINE:
|
|
for my $Line (@CleanLines) {
|
|
|
|
# remove leading white spaces in line
|
|
$Line =~ s{\A\s+}{};
|
|
|
|
if ( $Line =~ m{\A .+? \s .* \s \d+ % .+? \z}msx ) {
|
|
my ( $Partition, $Size, $UsedPercent, $MountPoint )
|
|
= $Line =~ m{\A (.+?) \s+ ([\d\.KGMT]*) \s+ .*? \s+ (\d+)%.+? (\/.*) \z}msx;
|
|
|
|
$MountPoint //= '';
|
|
|
|
$Partition = "$MountPoint ($Partition)";
|
|
|
|
next LINE if $SeenPartitions{$Partition}++;
|
|
|
|
$Self->AddResultInformation(
|
|
Identifier => $Partition,
|
|
Label => $Partition,
|
|
Value => $Size . ' (Used: ' . $UsedPercent . '%)',
|
|
);
|
|
}
|
|
}
|
|
|
|
return $Self->GetResults();
|
|
}
|
|
|
|
1;
|