/
usr
/
lib
/
raider
/
Raider
/
Jobs
/
File Upload :
llllll
Current File: //usr/lib/raider/Raider/Jobs/3ware.pm
use strict; use warnings; package Raider::Jobs::3ware; use base qw( Raider::Jobs ); use Raider::Notification::API; use Raider::Notification::Email; =head1 NAME Raider::Jobs::3ware - 3ware specific tasks for checking raid health =head1 DESCRIPTION Checks raid health for 3ware cards. =head1 USAGE use Raider::Jobs::3ware; my jobs3ware = Raider::Jobs::3ware->new(); =head1 METHODS =head2 run_job Takes all needed actions for checking raid health. =head2 get_controller_list() Returns a list of controllers. =head2 get_array_list(\%args) Returns a list of arrays. =head2 array_is_ok(\%args) Returns true if array is healthy. =cut my $icmd = '/usr/local/bin/tw_cli'; sub run_job { my $self = shift; $self->icmd_in_path({ icmd => "$icmd" }); my $controller_list_ref = $self->get_controller_list(); my @controller_list = @$controller_list_ref; my $output; my $raid_bad = 0; for my $controller ( @controller_list ) { my $array_list_ref = $self->get_array_list({ c => "$controller" }); my @array_list = @$array_list_ref; for my $u ( @array_list ) { my $health_check = `$icmd info $controller $u`; unless ( $self->array_is_ok({ health_check => $health_check }) ) { $output .= "root ~ # $icmd info $controller $u\n"; $output .= "$health_check\n"; $output .= "root ~ #\n"; $raid_bad = 1; } }; }; my $notifEmail = Raider::Notification::Email->new(); my $notifAPI = Raider::Notification::API->new(); if ( $raid_bad ) { if ( $notifAPI->can_alert({ notify_type => '3ware' }) ) { $self->logger({ cat => 'w', msg => '3Ware Hardware RAID Alarm Detected' }); my $notify_msg = "3Ware Hardware RAID Alarm Detected on [$Raider::Base::base_conf{'hostname'}] at [$self->{uniq_id}]\nDetails:\n $output"; if ( $notifAPI->can_api() ) { $notifAPI->send_notification({ message => $notify_msg }); } else { $notifEmail->send_notification({ subject => "RAID Controller Alarm on $Raider::Base::base_conf{'hostname'}", message => $notify_msg }); } $notifAPI->place_alert({notify_type => '3ware'}); } else { $self->logger({ cat => 'w', msg => 'Notification for 3ware suppressed, alert file for today already exists.' }); } } else { # health is ok, clear alerts for device $notifAPI->clear_alerts_for_device('3ware'); } } sub get_controller_list { my $self = shift; my @controller_list; for my $line ( split /^/, `$icmd info` ) { if ( $line =~ /(^c\d+)/i ) { push(@controller_list, $1); } } return \@controller_list; } sub get_array_list { my $self = shift; my $opts = shift; my @array_list; for my $line ( split /^/, `$icmd info $opts->{c}` ) { if ( $line =~ /(^u\d+)/i ) { push(@array_list, $1); } } return \@array_list; } sub array_is_ok { my $self = shift; my $opts = shift; $self->logger({ cat => 'c', msg => "array_is_ok() missing an argument!" }) unless ( $opts->{health_check} ); # Check raid health. Ignore rebuilding array if set in config. my $conf_file = $self->read_conf_file(); if ( $conf_file->{'ignore_rebuilding_array'} ) { if ( $opts->{health_check} =~ /u\d+\s+RAID-\d+\s+OK/i || $opts->{health_check} =~ /u\d+\s+RAID-\d+\s+REBUILDING/i ) { return 1; } } elsif ( $opts->{health_check} =~ /u\d+\s+RAID-\d+\s+OK/i ) { return 1; } return 0; } 1;
Copyright ©2k19 -
Hexid
|
Tex7ure