~ 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_64
SERVER IP : 10.0.187.65 -________- CLIENT IP : 216.73.216.254
PATH :/usr/share/perl5/vendor_perl/HI/Hardware/
UP FILE :
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