def data_collect(agent,ip,key,port): ''' @数据采集入口 @逻辑:判断ip服务器是否存活,存活:{修改osa_ipinfo中的状态,snmp采集数据入库osa_data_collect},不存活:{修改osa_ipinfo中的状态,同时写入osa_monitor_alarm表} ''' try: ipinfo=get_ipinfo(ip) if not ipinfo or ipinfo==False or ipinfo == None: log_error('ipinfo error:'+str(ip)) return isAlarm,reason,result,level = server_snmp_analyze(agent,ip,key,port) if isAlarm == "1": if ipinfo[2] == '0':#ipinfo[2] == '0' 表示上次服务器不可达 #判断是否需要发送邮件 userlist = get_mailto_users('ALL') #last reason lastreason = server_get_lastreason(ipinfo[0]) #mail content log_error('ipid:'+str(ipinfo[0])) log_error("lastReason:"+str(lastreason)) mailcontent,subject = server_alarm_content(ipinfo[1],ipinfo[1],lastreason,level) #或立即发送,转下次发送信息 isNoticeNow,isNoticeNext,noticeNextUsers,noticeNextTime = mail_status_alarm(ipinfo,userlist,mailcontent,10,level,subject) #恢复通知 状态变化,更新osa_ipinfo记录 update_ipinfo_remind(isNoticeNow,isNoticeNext,ipinfo) #恢复通知 状态变化,更新osa_collect_alarm记录 insert_collectalarm_remind(isNoticeNow,isNoticeNext,noticeNextUsers,noticeNextTime,ipinfo) #插入osa_collect_data记录 insert_collectdata_remind(ipinfo[0],result) else:#(上次正常不正常都要判断发送邮件) alarminfo = {'text':reason,'level':level,'type':'server'} #判断是否需要发送邮件 userlist = get_mailto_users('ALL') #mail content mailcontent ,subject= server_alarm_content(ipinfo[1],ipinfo[1],reason,level) #或立即发送,转下次发送信息 isNoticeNow,isNoticeNext,noticeNextUsers,noticeNextTime = mail_status_alarm(ipinfo,userlist,mailcontent,10,level,subject) #不可达通知 ,更新osa_ipinfo记录 update_ipinfo_exception(isNoticeNow,isNoticeNext,ipinfo,level) #不可达通知 ,插入osa_collect_alarm记录 insert_collectalarm_exception(isNoticeNow,isNoticeNext,noticeNextUsers,noticeNextTime,ipinfo,alarminfo) #插入osa_collect_data记录 insert_collectdata_exception(ipinfo[0],result) except Exception as e: log_error("data_collect():"+str(e))
def mailto_users_server(users,level,ipid): ''' @根据报警类型和用户列表发送邮件 ''' rs = server_get_ipinfo(ipid) if rs == False: return False devname = rs[1] ipstr = rs[2] reason = '' content,subject = server_alarm_content(devname,ipstr,reason,level) userlist = get_mailto_users(users) for user in userlist: mailto = get_email_byname(user) sendMail(subject,content,mailto)
def mailto_users_item(users,type,level,itemid): ''' @根据报警类型和用户列表发送邮件 @项目报警类型跟内容暂时还没确定,暂时不能使用 ''' #content = choose_template(type) rs = monitor_get_iteminfo(itemid) if rs == False: return False itemname = rs[1] itemobject = rs[2] content,subject = monitor_alarm_content(type,itemname,itemobject,level) userlist = get_mailto_users(users) for user in userlist: mailto = get_email_byname(user) sendMail(subject,content,mailto)