使用Python脚本发送信号给MoiaControl
# -*- coding: utf-8 -*-
import os
import sys
import datetime
import time
import pymysql
# 发送事件日期
runDate = sys.argv[1]
# 定义词典 存储信号发送清单及结果 N-未发送 S-发送成功 F-发送失败
evtResList={'EVT_001': 'N', 'EVT_002': 'N', 'EVT_003': 'N', 'EVT_004': 'N'}
# 先检查确认所有要发送的事件在moia中均已存在 若不存在初始化发送结果为 N-失败
# 连接数据库
try:
conn_moia = pymysql.connect(host='199.188.166.110', port=3306, user='moia5', password='moia5', db='moia5', charset="utf8")
# 创建游标对象
# cursor当前的程序到数据之间连接管道
cursor_moia = conn_moia.cursor()
except Exception as e:
print('数据库链接错误', e)
exit(1)
for key, value in evtResList.items():
try:
# 组装sql语句 查询未发送清单中的作业是否已经成功
sql_evt_judge = '''select count(*)
from t04_evt_glob_info
where evt_name='%s'
''' % key
# 执行sql语句
cursor_moia.execute(sql_evt_judge)
# sql提交
conn_moia.commit()
except Exception as e:
print('数据库操作失败', e)
exit(2)
# 处理结果集
# 获取所有数据
res_sql_evt_judge = cursor_moia.fetchall()
for item in res_sql_evt_judge:
if item[0] != 1:
print("事件在moia中不存在, 默认失败:",key)
sys.stdout.flush()
evtResList[key]='F'
try:
# 关闭所有的连接
# 关闭游标
cursor_moia.close()
# 关闭数据库
conn_moia.close()
except Exception as e:
print('数据库关闭失败:', e)
exit(3)
# 未发送事件清单 初始值和待发送清单一致
evtNo=[]
for key, value in evtResList.items():
if value == 'N':
evtNo.append(key)
# 开始循环判断发送事件至moia
while 1==1:
# 转换未发送事件清单为字符串
noList = "','".join(evtNo)
# 连接数据库
try:
conn_send_list = pymysql.connect(host='199.188.166.110', port=3306, user='moia5', password='moia5', db='zhaoty', charset="utf8")
# 创建游标对象
# cursor当前的程序到数据之间连接管道
cursor_send_list = conn_send_list.cursor()
except Exception as e:
print('数据库链接错误', e)
exit(1)
try:
# 组装sql语句 查询未发送清单中的作业是否已经成功
sql_send_list = '''select name,date
from zhaoty_test
where state='1' and date='%s' and name in ('%s')
''' % (runDate,noList)
# 执行sql语句
cursor_send_list.execute(sql_send_list)
# sql提交
conn_send_list.commit()
except Exception as e:
print('数据库操作失败', e)
exit(2)
try:
# 关闭所有的连接
# 关闭游标
cursor_send_list.close()
# 关闭数据库
conn_send_list.close()
except Exception as e:
print('数据库关闭失败:', e)
exit(3)
# 连接数据库
try:
conn_moia = pymysql.connect(host='199.188.166.110', port=3306, user='moia5', password='moia5', db='moia5', charset="utf8")
# 创建游标对象
# cursor当前的程序到数据之间连接管道
cursor_moia = conn_moia.cursor()
except Exception as e:
print('数据库链接错误', e)
exit(1)
# 处理结果集
# 获取所有数据
res_send_list = cursor_send_list.fetchall()
print("本次循环有 %s 个事件满足发送条件, 需要发送至MOIA" % len(res_send_list))
for each in res_send_list:
evt_name=each[0]
evt_date=each[1]
print("事件名称:",each[0],"事件日期:",each[1])
# print("发送事件命令......")
val = os.system('echo "22229061|{evt_name}|{evt_date}|00000|1"|ncat 199.188.166.110 57501'.format(evt_name=evt_name,evt_date=evt_date))
sys.stdout.flush()
# 组装sql语句
sql_evt_stat = '''select count(*)
-- evt_info.evt_name,evt_stat.evt_date
from t04_evt_src_stat evt_stat,t04_evt_glob_info evt_info
where evt_stat.evt_id=evt_info.evt_id and evt_stat.evt_stat='8001' and evt_stat.evt_date=%s and evt_info.evt_name=%s
'''
# 执行sql语句
cursor_moia.execute(sql_evt_stat,[evt_date,evt_name])
# sql提交
conn_moia.commit()
# 处理结果集
# 获取所有数据
res_evt_stat = cursor_moia.fetchall()
for each in res_evt_stat:
evt_res = each[0]
if evt_res == 0:
print("发送失败","事件名称:",evt_name,"事件日期:",evt_date)
sys.stdout.flush()
evtResList[evt_name]='F'
else :
print("发送成功", "事件名称:", evt_name, "事件日期:", evt_date)
sys.stdout.flush()
evtResList[evt_name] = 'S'
try:
# 关闭所有的连接
# 关闭游标
cursor_moia.close()
# 关闭数据库
conn_moia.close()
except Exception as e:
print('数据库关闭失败:', e)
exit(3)
# 遍历发送结果词典 确认信号是否全部发送完成以及发送结果
# 初始化未发送事件清单重新记录
evtNo = []
# 发送成功清单
evtSucc = []
# 发送失败清单
evtFail = []
for key, value in evtResList.items():
if value == 'N':
evtNo.append(key)
if value == 'S':
evtSucc.append(key)
if value == 'F':
evtFail.append(key)
print("信号暂未发送个数:", len(evtNo), "信号发送成功个数:", len(evtSucc), "信号发送失败个数:", len(evtFail))
sys.stdout.flush()
# 循环结束判断条件 所有信号均已发送一遍
if len(evtNo)==0:
break
else:
stime=5
print(datetime.datetime.now(),"本次循环结束 休眠%s秒" % stime)
sys.stdout.flush()
time.sleep(stime)
# 最终执行结果判断
if len(evtFail)!=0:
print("全部信号发送完成, 其中发送成功个数:%s, 发送失败个数:%s, 请检查!" % (len(evtSucc), len(evtFail)))
print("发送失败事件清单如下:")
for item in evtFail:
print(item)
exit(9)
else:
print("全部信号发送完成, 发送成功个数:%s !" % len(evtSucc))