Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32223
  • 博文数量: 21
  • 博客积分: 707
  • 博客等级: 上士
  • 技术积分: 237
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-15 12:48
文章分类

全部博文(21)

文章存档

2011年(21)

分类: Python/Ruby

2011-01-20 18:02:45

此脚本是从mysql 中,取出host,并且ping,不通的记录写入到文件中,并发送mail。

#!/usr/bin/env python

#from threading import Thread
from processing import Process, Queue, Pool
import time
import subprocess
#from Queue import Queue
import re
import MySQLdb
import smtplib #mail module
import sys # os module
from snmp import Snmp
#Import the email modules we'll need
from email.mime.text import MIMEText

#num_arp_threads=10
num_workers=10
#in_queue=Queue()
q=Queue()  #in queue
#out_queue=Queue()
oq=Queue() #out queue
sum=0
result=[]
#ips=["iquadcore-01","amd64","aaaaa","xue"]

# function truncate file

def truncate_file():

        try:
                fp=open('status_online.txt','w')
                fp.close()
        except:
                print "Could not open status_online.txt file"

        try:
                fp=open('status_offline.txt','w')
                fp.close()
        except:
                print "Could not open status_offline.txt file"

def Sql(result,count):
        try:
                connection=MySQLdb.connect(host="172.20.33.19",user="root",passwd="reqiq                                                                             iu",db="hostlist")
        except:
                print "Could not connect to MySQL server."

        try:
                cursor= connection.cursor()
                cursor.execute("select hostname from servers where area='beijing'")
                print "Rows selected:  ",  cursor.rowcount

                for row in cursor.fetchall():
                                result.append(row[0])
                cursor.close()
        except:
                print "Could not selete to MySQL server."

#mail function


class HostRecord(object):

        def __init__(self,ip=None,mac=None, snmp_response=None):
                self.ip=ip
                self.mac=man
                self.snmp_response=snmp_response

        def __repr__(self):
                return "[Host Record('%s','%s','%s')]" %(self.ip,self.mac,self.snmp_response)

def f(i,q,oq):
        while True:
                time.sleep(.1)
                if q.empty():
                        sys.exit()
                        print "Process Number %s Exit" %i
                ip=q.get()
                print "Process Number: %s" %i
                ret=subprocess.call("ping -c 1 %s" %ip,
                                shell=True,
                                stdout=open('/dev/null','w'),
                                stderr=subprocess.STDOUT)

                if ret==0:
                        print "%s: is alive " %ip

                        try:
                                f=open('status_online.txt','a')
                                f.write("%s OnLine\n" %(ip))
                                f.close()
                        except:
                                print "Could not open file."

                        oq.put(ip)
                else:
                        try:
                                f=open('status_offline.txt','a')
                                f.write("%s OffLine\n" %(ip))
                                f.close()
                        except:
                                print "Could not open file."

                print "Process Number:%s didn't find a response for %s" %(i,ip)
                pass
def snmp_query(i,out):
        while True:
                time.sleep(.1)
                if out.empty():
                        sys.exit()
                        print "Process Number:%s" %i
                ipaddr=out.get()
                s=Snmp()
                h=HostRedord()
                h.ip=ipaddr
                h.snmp_response=s.query()
                print h
                return h


def Mail():
        mail_server= 'mail server address'
        mail_server_port=25

        from_addr='XXX@XXX'
        to_addr='XXX@XXX'

        fp=open('status_offline.txt','r')
        msg=MIMEText(fp.read())
        fp.close()

        msg['Subject']='hosts status'
        msg['From']=from_addr
        msg['To']=to_addr

        s=smtplib.SMTP(mail_server,mail_server_port)
        s.sendmail(from_addr,to_addr,msg.as_string())
        s.quit()
#truncate file
truncate_file=truncate_file()

#defin result
sql_queue=Sql(result,sum)

#threading
try:
        q.putmany(result)

finally:
        for i in range(num_workers):
                p=Process(target=f,args=[i,q,oq])
                p.start()
        for i in range(num_workers):
                pp=Process(target=snmp_query,args=[i,oq])
                pp.start()
print "main process joins on queue"
p.join()
Mail_queue=Mail()
print "Main Program finished"


               
阅读(542) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:ZFS Management

给主人留下些什么吧!~~