~ K A L I ~
UNAME : Linux web65.extendcp.co.uk 4.18.0-553.56.1.el8_10.x86_64 #1 SMP Tue Jun 10 05:00:59 EDT 2025 x86_64SERVER IP : 10.0.187.65 -________-
CLIENT IP : 216.73.216.254 MINI SHELL D ZAB '
Current File : //usr/share/perl5/vendor_perl/HI/Hardware/HP.pm |
package HI::Hardware::HP;
use strict;
use warnings;
sub new {
my $class = shift;
my $self = {
summary => ''
};
bless $self, $class;
$self->{summary} = $self->get_hp_report( "ctrl all show detail" );
$| = 1;
return $self;
}
sub pds {
my $self = shift;
my @ssacli = $self->get_hp_report( "ctrl slot=3 pd all show detail" );
my @pdisks;
my @disks = split ( /physicaldrive \dI:\d:\d/, join("\n", @ssacli));
shift @disks;
for (@disks) {
my %info;
my @lines = split(/\n/, $_);
shift @lines;
for (@lines) {
s/^\s+//;
s/\s+/ /mg;
s/\s+$//;
next unless /:/;
my ($key, $val) = split /: /, $_;
$info{'size_mb'} = &convert_mb($val) if $key eq 'Size';
$info{'serial'} = $val if $key eq 'Serial Number';
$info{'model'} = $val if $key eq 'Model';
}
push @pdisks, \%info;
}
return @pdisks;
}
sub vds {
my $self = shift;
my @ssacli = $self->get_hp_report( "ctrl slot=3 ld all show detail" );
my @vdisks;
my @disks = split ( /Array \w/, join("\n", @ssacli));
shift @disks;
shift @disks;
for (@disks) {
my %info;
my @lines = split(/\n/, $_);
shift @lines;
for (@lines) {
s/^\s+//;
s/\s+$//;
next unless /:/;
my ($key, $val) = split /: /, $_;
$info{'size_mb'} = &convert_mb($val) if $key eq 'Size';
$info{'level'} = $val if $key eq 'Fault Tolerance';
$info{'level'} =~ s/\D//;
$info{'partition'} = $val if $key eq 'Disk Name';
$info{'partition'} =~ s/\/dev\///;
}
push @vdisks, \%info;
}
return @vdisks;
}
sub controllers {
my $self = shift;
my @ssacli = $self->get_hp_report( "ctrl all show status" );
my @controllers;
my @controller = split (/\n/, join("\n", @ssacli));
for (@controller) {
my @lines = split(/\n/, $_);
for (@lines) {
my $raw_string = $_ if /^\w+/;
my @parts = split ( /\sin/, $raw_string );
for (@parts) {
push (@controllers, $_) if /^\w+/;
}
}
}
return @controllers;
}
sub convert_mb {
my $self = shift;
my @lines = split(/\n/, $_);
for (@lines) {
my @TB = split(/\s/, $_) if /TB/;
for (@TB) {
my $raw_size = $_ *= 1024 * 1024 if /\d+/;
return int($raw_size) if $raw_size;
}
my @GB = split(/\s/, $_) if /GB/;
for (@GB) {
my $raw_size = $_ *= 1024 if /\d+/;
return int($raw_size) if $raw_size;
}
}
}
sub get_hp_report {
my $self = shift;
my $sub_system = shift;
my @hp_data;
open my $SSACLI, '-|', "/usr/sbin/ssacli $sub_system" or die $!;
while ( my $span = <$SSACLI> ) {
my @lines = split( /\n/, $span );
for (@lines) {
push @hp_data, $_;
}
}
close $SSACLI;
return @hp_data;
}
1
Coded by KALI :v Greetz to DR HARD ../ kali.zbi@hotmail.com