2013-03-14

(Perl) Hitachi Storage 장애 체크 (Web)

히다찌 스토리지에서는 상태점검을 위해서 웹인터페이스를 제공하고 있다. 해당 웹페이지의 메뉴에서 Warning Information 에서 문제가 있으면 로그가 표시되는데, 여기에 아무것도 없으면 장애가 없는 것이고, 뭔가 하나라도 있으면 장애가 있다는 것이다.

해당 페이지의 첫번째 TEXTAREA 태그의 내용을 확인하며 되며, 이를 위해서 WWW::Mechanize 모듈을 사용하였다. 그리고, 장애 발견시 담당자에게 문자를 보내도록 하였다.

Strawberry Perl 5.16.2 에서 테스트하였으며, 사용하는 모듈은 모두 기본으로 내장되어 있어서 별도로 설치할 필요없다.

#!perl
# ------------------------------------------------------------------------------
# (1) 히다찌 스토리지의 웹관리화면의 경고창을 조회하여 Warning Information 항목에 
#     내용이 있으면 장애로 간주하고 담당자에게 문자메시지를 보낸다.
#
# (2) 하루에 2번 작동한다.
#
# Perl Version : 5.16.2
# ------------------------------------------------------------------------------
use 5.016;
use strict;
use warnings;
use diagnostics;
 
use DBI;
use WWW::Mechanize;
# ------------------------------------------------------------------------------
 
# ------------------------------------------------------------------------------
sub send_sms {
    my $msg = shift(@_);
 
    my $dsn = "DBI:ODBC:Driver={SQL Server};Server=서버주소;Database=데이터베이스이름";
 
    my $sql = "insert arreo_sms ( CMP_MSG_ID, 
               CMP_USR_ID, 
               WRT_DTTM, 
               RCV_PHN_ID, 
               CALLBACK, 
               SND_DTTM, 
               SND_MSG , 
               SND_PHN_ID, 
               RSRVD_ID ) 
               values ('011' + CONVERT(varchar, GETDATE(), 12) + REPLACE(CONVERT(varchar, GETDATE(), 14), ':', '') + SUBSTRING(CONVERT(VARCHAR, RAND(), 109), 3, 2), 
               '00000', 
               CONVERT(varchar, GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 8), ':', ''), 
               '받는사람전화번호',
               '보내는사람전화번호',
               CONVERT(varchar, GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 8), ':', ''), 
               '$msg', 
               'ADMIN', 
               'ADMIN' ) ";
 
    my $dbh = DBI->connect($dsn, '아이디', '비밀번호') || die $DBI::errstr;
    $dbh->do($sql);
    $dbh->disconnect;
}
# ------------------------------------------------------------------------------
 
 
# ------------------------------------------------------------------------------
# Start
# ------------------------------------------------------------------------------
my %devices = ( "HITACHI_STORAGE1", "http://172.16.0.21/cgiShowMsgInf/ShowMsgInf.cgi/CLK/inf_msg",
                "HITACHI_STORAGE2", "http://172.16.0.22/cgiShowMsgInf/ShowMsgInf.cgi/CLK/inf_msg" );
 
foreach my $device_key (keys %devices) {
    my $mech = WWW::Mechanize->new();
    $mech->get( $devices{$device_key} );
    my @customer_text_inputs = $mech->find_all_inputs( type => 'textarea' );
    my $msg = "";
    if ($customer_text_inputs[0]->value eq "\n") {
        $msg = "Hitachi Storage $device_key : Normal";
        # send_sms($msg);
    } else {
        $msg = "Hitachi Storage $device_key : Error";
        send_sms($msg);
    }
    say $msg;
}

댓글 없음:

댓글 쓰기