2013-03-13

Python : SAN 스위치 장애 체크 (Telnet)

이번에는 Python 에서 SAN 스위치 장애를 체크하는 스크립트를 만들어보았다. Perl 의 경우와 거의 같다.

Python 2.7.3 에서 테스트하였으며, pymssql 를 별도로 설치해야 한다.

# -*- coding: cp949 -*-
# ------------------------------------------------------------------------------
# (1) SAN 스위치의 Telnet에 연결하여, switchstatusshow 명령의 결과에 따라서
#     HEALTHY 가 아니면 장애로 간주하고 담당자에게 문자메시지를 보낸다.
#
# (2) 하루에 1번 작동한다.
#
# Python Version : 2.7.3
# 
# [필요한 패키지]
# easy_install pymssql
#
# Normal Status ----------------------------------------------------------------
# SwitchState:    HEALTHY
# ------------------------------------------------------------------------------
import telnetlib
import pymssql

# ------------------------------------------------------------------------------
def send_sms(msg):
    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), ':', ''), 
        '%s',
        '01055555555',
        CONVERT(varchar, GETDATE(), 112) + REPLACE(CONVERT(varchar, GETDATE(), 8), ':', ''), 
        '%s', 
        'ADMIN', 
        'ADMIN' ) """ % ("메시지받을사람의전화번호", msg)
    conn = pymssql.connect(host='서버주소', user='아이디', password='비밀번호', database='DB이름')
    cur = conn.cursor()
    cur.execute(sql)
    conn.commit()
    conn.close()

# ------------------------------------------------------------------------------

devices = { "SAN_SW1" : "172.16.0.21",
            "SAN_SW2" : "172.16.0.22",
            "SAN_SW3" : "172.16.0.23",
            "SAN_SW4" : "172.16.0.24" }

for device_key in devices.keys() :
    tn = telnetlib.Telnet(devices[device_key])
    tn.read_until("login: ")
    tn.write("아이디\n")
    tn.read_until("Password: ")
    tn.write("비밀번호\n")
    tn.write("\n")
    tn.write("switchstatusshow\n")
    tn.write("exit\n")
    result = tn.read_all()
    for line in result.splitlines() :
        if "SwitchState:" in line :
            if "HEALTHY" in line :
                msg = device_key + " : Normal"
                print(msg)
                send_sms(msg)
            else :
                msg = device_key + " : Error"
                print(msg)
                send_sms(msg)

댓글 없음:

댓글 쓰기