博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python raid monitor (megacli)
阅读量:6122 次
发布时间:2019-06-21

本文共 2120 字,大约阅读时间需要 7 分钟。

#!/usr/bin/env python

#-*-coding:utf8-*-

"""

   FUN: Monitor Raid Stat

"""

import os ,time ,sys, traceback,commands,subprocess

def oper_log(log_name,item,info):

   path  = '/tmp/'

   stime = time.strftime('%Y-%m-%d %H:%M:%S')

   formats= '[%s] %s:: %s \n' % (stime,item,info)

   if not os.path.exists(path):

       os.mkdir(path)

   try:

       if log_name.split('.')[1] == 'log':

           fp = open(path + log_name,'a')

       elif log_name.split('.')[1] == 'info':

           fp = open(path + log_name,'w')

       else:

           fp = open(path + log_name,'a')

       fp.write(formats)

       fp.close()

   except Exception,e:

       pass

def _exec(cmds):

   try:

       sps = subprocess.Popen(cmds, stdin = subprocess.PIPE,

                                   stdout = subprocess.PIPE,

                                   stderr = subprocess.PIPE,

                                   shell = True)

       sps.wait()

       return sps.stdout.read().strip()

   except:

       oper_log('raid_monitor.log','_exec',traceback.format_exc())

       return ''

def disk_online():

   ''' Getting raid online stat '''

   try:

       cmds = 'megacli  -PDList -aALL | grep Online | wc -l'

       return  _exec(cmds)

   except:

       oper_log('raid_monitor.log','disk_online',traceback.format_exc())

       return ''

def disk_failed():

   try:

       cmds = "megacli -AdpAllInfo -a0 |grep 'Failed Disks'|awk '{print $4}'"

       res = _exec(cmds)

       return res

   except:

       print traceback.format_exc()

       #oper_log('raid_monitor.log','disk_failed',traceback.format_exc())

       return ''

def disk_badSectors():

   turl_num = []

   fail_num = []

   try:

       cmds = "megacli  -PDList -aALL|grep Other|awk '{print $4}'"

       res =  _exec(cmds).split('\n')

       for  i in res:

           i = int(i)

           if i != 0:

               fail_num.append(i)

           else:

               turl_num.append(i)

       return len(fail_num)

   except:

       oper_log('raid_monitor.log','disk_badSectors',traceback.format_exc())

       return ''

def work():

   try:

       if sys.argv[1] == 'disk_online':

           print disk_online()

       elif sys.argv[1] == 'disk_failed':

           print disk_failed()

       elif sys.argv[1] == 'disk_badSectors':

           print disk_badSectors()

       elif sys.argv[1] == 'all':

           print disk_online(),disk_failed(),disk_badSectors()

       else:

           print "Please enter the correct parameters, thank you!"

   except IndexError,e:

       print "Please enter the correct parameters, thank you: --- --- --- "

if __name__ == "__main__":

   st = work()

本文转自 swq499809608 51CTO博客,原文链接:http://blog.51cto.com/swq499809608/1258956

转载地址:http://hewua.baihongyu.com/

你可能感兴趣的文章
Vscode 常用快键键速记--mac版
查看>>
pycharm中某些方法被标黄的原因及解决办法
查看>>
DelayQueue的使用
查看>>
陶哲轩实分析习题9.8.5 : 在有理点间断,无理点连续的严格单调函数
查看>>
Elementary Methods in Number Theory Exercise 1.2.4
查看>>
Code Signal_练习题_shapeArea
查看>>
Java系统程序员修炼之道
查看>>
C#中的值类型和引用类型,深拷贝,浅拷贝
查看>>
38.spiderkeeper的配置
查看>>
SQL时间格式化
查看>>
C# Code First 配置
查看>>
Python_selenium之获取当前页面的href属性,id属性,图片信息和截全屏
查看>>
选夫婿1 结构体
查看>>
SQLite - C/C++接口 API(一)
查看>>
秋季学期总结
查看>>
数据库怎么分库分表,垂直?水平?
查看>>
Block 的使用时机
查看>>
centos关机、重启、图形界面与命令行界面切换命令
查看>>
ubuntu下使用迅雷下载工具
查看>>
linux .bash_profile和.bashrc的什么区别
查看>>