移动设备监控-发送钉钉通知
目的
每次测试要连接N台设备同时自动化,由于可能会出现中断情况,手动找起来太麻烦,尤其是假期的时候,出现特殊情况无法预知,特此增加了设备运行监控
说明
脚本主要是Python编写,移动设备50台,主控设备MacOS一台,设备管理使用Mysql
代码思路
使用mysql管理设备,主表存放设备的devicesID、设备编号、code
通过集线器将所有设备连接到主控机MacOS
批量执行设备运行自动化进程
通过运行的进程,找到进程的别名,例如:com.***sql这样
经实验运行完成和设备发生断电、以及程序异常的时候需要监控的进程会停止
导出设备的最近时间段的日志(太多了会很慢,导出一部分就好),截取需要的时间
使用正则进行拼接,例如:时间、设备ID、进程PID等
对时间进行差值计算,大于一定时间段,说明设备发生了异常,或者运行完成
把异常或完成的设备在数据库中进行标记,发生监控通知对应人员监控脚本如下
'''提取日志时间和pid'''
Url = '这里是钉钉的token'
HEADERS = {"Content-Type": "application/json ;charset=utf-8 "}
log_path = "数据源地址"
for logs in read_path(log_path):
with open(logs,'r',encoding='utf-8') as file:
file_content = file.readlines()
if len(file_content)!=0:
file_line_last = file_content[-1]
target = file_line_last[:60]
log_data = re.findall('\d{2}-\d{2} \d{1,2}:\d{1,2}:\d{1,2}',target) #正则提取日期
pid = re.findall('\s\s\d{1,4}\s\s',target) # 正则提取pid
log_datas = ['2022-'+(i) for i in log_data]
log_times = "".join(log_datas)
pids = [str(j)for j in pid]
pid_id = "".join(pids)
d1=datetime.datetime.strptime(log_times,'%Y-%m-%d %H:%M:%S')#日志时间
times = strftime("%Y-%m-%d %H:%M:%S", localtime())#当前时间
d2 = datetime.datetime.strptime(times, '%Y-%m-%d %H:%M:%S')
devices = re.findall('.*report/(.*?)-',logs)
time.sleep(0.5)
diff=(d2-d1).seconds
print(diff)
time.sleep(0.3)
if diff > 300:
for devid in devices:
sql = 'UPDATE dev_table SET code = 2 WHERE devices="%s"'%devid
db.updateDb(sql)
print(sql)
msg='