from Ding import DingToken from MySSH import MySSH import os,sys,time,datetime,json
def switch_ping(): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) system = ptr.get("system") success,error = [],[] try: for system_list in system: for k,v in system_list.items(): for item in v: now = datetime.datetime.now() print("[+] 监控范围: Ping测试 --> 监测组: {} --> 检测日期: {} --> 检测地址: {}".format(k,datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S'),item[0])) ssh = MySSH(item[0],item[1],item[2],ptr.get("default-port")) ssh.Init() ref = ssh.GetPing() if ref == True: success.append(item[0]) else: error.append(item[0]) ding = DingToken(False, ptr.get("telephone")) ding.send_ping(ptr.get("platform"),datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S'),len(success),len(error),error) except Exception: pass
def InspectDisk(telephone,address,username,password,port,platform,person,group,disk_limit): ding = DingToken(False, telephone) ssh = MySSH(address, username, password, port) ssh.Init() ret = ssh.GetAllDiskSpace() ssh.CloseSSH() if ret != False: for k,v in ret.items(): try: space = eval(v.split("%")[0]) if space >= int(disk_limit): now = datetime.datetime.now() strnow = datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S') ding.send_warning(platform, person, group, address, strnow, "磁盘过载", "[ 分区: {} \t | \t 负载率: {} ]\n".format(k,v)) except Exception: pass
def switch_inspect_disk(): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) system = ptr.get("system") for system_list in system: for k,v in system_list.items(): for item in v: now = datetime.datetime.now() print("[+] 监控范围: 磁盘检测 --> 监测组: {} --> 检测日期: {} --> 检测地址: {}".format(k,datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S'),item[0])) InspectDisk(ptr.get("telephone"),item[0],item[1],item[2],ptr.get("default-port"),ptr.get("platform"),ptr.get("person"),k,ptr.get("disk_limit"))
def InspectMemory(telephone,address,username,password,port,platform,person,group,memory_limit): ding = DingToken(False, telephone) ssh = MySSH(address, username, password, port) ssh.Init() ret = ssh.GetAllMemSpace() ssh.CloseSSH() if ret != False: try: space = eval(ret.split("%")[0]) if space >= int(memory_limit): now = datetime.datetime.now() strnow = datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S') ding.send_warning(platform, person, group, address, strnow, "内存过载", "[ 负载率: \t | \t {} ]\n".format(ret)) except Exception: pass
def switch_inspect_memory(): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) system = ptr.get("system") for system_list in system: for k,v in system_list.items(): for item in v: now = datetime.datetime.now() print("[+] 监控范围: 内存检测 --> 监测组: {} --> 检测日期: {} --> 检测地址: {}".format(k,datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S'),item[0])) InspectMemory(ptr.get("telephone"),item[0],item[1],item[2],ptr.get("default-port"),ptr.get("platform"),ptr.get("person"),k,ptr.get("memory_limit"))
def InspectCPU(telephone,address,username,password,port,platform,person,group,cpu_limit): ding = DingToken(False, telephone) ssh = MySSH(address, username, password, port) ssh.Init() ret = ssh.GetCPUPercentage() ssh.CloseSSH() if ret != False: try: space = int(100 - int(ret.get("idea"))) us = ret.get("us") + "%" sys = ret.get("sys") + "%" if space >= int(cpu_limit): print("CPU 总利用率: {}".format(space)) now = datetime.datetime.now() strnow = datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S') ding.send_warning(platform, person, group, address, strnow, "CPU 利用率过载","[ 用户态: \t | \t {} ]\n[ 内核态: \t | \t {} ]\n[ 总利用率: \t | \t {}% ]\n".format(us,sys,space)) except Exception: pass
def switch_inspect_cpu(): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) system = ptr.get("system") for system_list in system: for k,v in system_list.items(): for item in v: now = datetime.datetime.now() print("[+] 监控范围: CPU检测 --> 监测组: {} --> 检测日期: {} --> 检测地址: {}".format(k,datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S'),item[0])) InspectCPU(ptr.get("telephone"),item[0],item[1],item[2],ptr.get("default-port"),ptr.get("platform"),ptr.get("person"),k,ptr.get("cpu_limit"))
def InspectLoadAvg(telephone,address,username,password,port,platform,person,group,load_avg_limit): ding = DingToken(False, telephone) ssh = MySSH(address, username, password, port) ssh.Init() ret = ssh.GetLoadAVG() ssh.CloseSSH() if ret != False: try: if float(ret.get("1avg")) >= float(load_avg_limit[0]) or float(ret.get("5avg")) >= float(load_avg_limit[1]) or float(ret.get("15avg")) >= float(load_avg_limit[2]): now = datetime.datetime.now() strnow = datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S') ding.send_warning(platform, person, group, address, strnow, "LoadAvg 过载","[ 一分钟负载: \t | \t {} ]\n[ 五分钟负载: \t | \t {} ]\n[ 十五分钟负载: \t | \t {} ]\n". format(ret.get("1avg"), ret.get("5avg"),ret.get("15avg"))) except Exception: pass
def switch_inspect_avg(): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) system = ptr.get("system") for system_list in system: for k,v in system_list.items(): for item in v: now = datetime.datetime.now() print("[+] 监控范围: 系统负载检测 --> 监测组: {} --> 检测日期: {} --> 检测地址: {}".format(k,datetime.datetime.strftime(now, '%Y-%m-%d %H:%M:%S'),item[0])) InspectLoadAvg(ptr.get("telephone"),item[0],item[1],item[2],ptr.get("default-port"),ptr.get("platform"),ptr.get("person"),k,list(ptr.get("load_avg_limit")))
def GetAddressAsPasswd(address): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) for each_list in ptr.get("system"): for k,v in each_list.items(): for ser in v: if ser[0] == address: return ser return False
def append_string(src_str,append_str): for x in range(len(append_str)): src_str += append_str[x] return src_str
def InspectPort(telephone,platform,person): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) port = ptr.get("port") default_port = ptr.get("default-port") for each_list in port: for k,v in each_list.items(): for item in v: this_user_passwd = GetAddressAsPasswd(item[0]) if this_user_passwd != False: try: now = datetime.datetime.now() print("[+] 监控范围: 端口状态检测 --> 监测组: {} --> 检测日期: {} --> 检测地址: {}".format(k, datetime.datetime.strftime( now, '%Y-%m-%d %H:%M:%S'), item[0])) ssh = MySSH(this_user_passwd[0], this_user_passwd[1], this_user_passwd[2], default_port) ssh.Init()
close_port_list = [] for check_port in range(1,len(item)): ref = ssh.CheckPortStatus(item[check_port]) print("端口ID: {} \t 状态位: {} 存活端口: {}".format(check_port, ref, item[check_port])) if ref == False or ref == "None": close_port_list.append(item[check_port]) print("端口ID: {} \t 状态位: {} 关闭端口: {}".format(check_port, ref, item[check_port]))
ding = DingToken(False,telephone) send = "" for i in close_port_list: im = "[ 端口: {0} \t\t | \t 状态: 已关闭 ]\n".format(i) send = append_string(send,im)
if(send != ""): ding.send_warning(platform,person,k,this_user_passwd[0],datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S'),"端口关闭",send) ssh.CloseSSH() except Exception: pass
def switch_inspect_port(): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) telephone = ptr.get("telephone") platform = ptr.get("platform") person = ptr.get("person") InspectPort(telephone, platform, person)
def InspectProcess(telephone,platform,person): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) process = ptr.get("process") default_port = ptr.get("default-port") for each_list in process: for k,v in each_list.items(): for item in v: this_user_passwd = GetAddressAsPasswd(item[0]) if this_user_passwd != False: try: now = datetime.datetime.now() print("[+] 监控范围: 进程状态检测 --> 监测组: {} --> 检测日期: {} --> 检测地址: {}".format(k, datetime.datetime.strftime( now, '%Y-%m-%d %H:%M:%S'), item[0])) ssh = MySSH(this_user_passwd[0], this_user_passwd[1], this_user_passwd[2], default_port) ssh.Init()
close_process_list = [] for check_process in range(1,len(item)): ref = ssh.CheckProcessStatus(item[check_process]) print("进程ID: {} \t 状态位: {} 存活进程: {}".format(check_process, ref, item[check_process])) if ref == False or ref == "None": close_process_list.append(item[check_process]) print("进程ID: {} \t 状态位: {} 关闭进程: {}".format(check_process, ref, item[check_process]))
ding = DingToken(False,telephone) send = "" for i in close_process_list: im = "[ 进程: {0} \t\t | \t 状态: 已关闭 ]\n".format(i) send = append_string(send,im)
if(send != ""): ding.send_warning(platform,person,k,this_user_passwd[0],datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S'),"进程退出",send) ssh.CloseSSH() except Exception: pass
def switch_inspect_process(): with open("./config.json", "r", encoding="utf-8") as read_config_ptr: ptr = json.loads(read_config_ptr.read()) telephone = ptr.get("telephone") platform = ptr.get("platform") person = ptr.get("person") InspectProcess(telephone, platform, person)
|