def CheckDisk(self,cache,i,email_data,warningUrl,ed): hd_data = self.Check_hd_use() for keys in hd_data: use = int(self.Check_hd_use()[keys]) c_use = int(i["disk_alarm_value"]) if use >= c_use: disk_data = ' %s 目录已经使用 %.2f%s ' % (keys, float(self.Check_hd_use()[keys]), "%") evenmd5 = "diskmsg" + public.Md5(disk_data) now = time.time() t = now - float(cache["diskmsg"][1]) push_time = int(i["push_time"]) * 60 print(use) if cache["diskmsg"][0] != evenmd5 and t >= push_time: cache["diskmsg"][0] = evenmd5 cache["diskmsg"][1] = now public.WriteLog('消息推送', "磁盘已经使用[ %s ]超过设定阈值" % disk_data) email_data["type"] = "disk_w" email_data["v1"] = disk_data if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "磁盘 告警邮件发送成功") self.disk_error_code += 1 ed[keys] = self.disk_error_code # 判断告警方式发送消息 else: try: if ed[keys] != 0: ed[keys] = 0 cache["diskmsg"][0] = "" email_data["type"] = "disk_s" if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "磁盘 恢复邮件发送成功") public.WriteLog('消息推送', "磁盘告警状态已经恢复正常") except: ed[keys] = 0
def CheckLocalSite(self,cache,i,email_data,warningUrl): self.ThreadingCheck(i) l = [] l.append(i["site"]["url_list"]) if i["site"]["adv"] == "1": while len(self.url_dict) !=len(l): time.sleep(0.5) else: while len(self.site_dict) != len(l): time.sleep(0.5) if self.site_dict: a = self.site_dict else: a = self.url_dict for s in a.keys(): if a[s] != 200 or not a[s]: even = "站点 [ %s ] 监控到访问异常" % s evenmd5 = "localsitemsg" + public.Md5(even) now = time.time() t = now - float(cache["memmsg"][1]) push_time = int(i["push_time"]) * 60 if cache["localsitemsg"][0] != evenmd5 and t >= push_time: cache["localsitemsg"][0] = evenmd5 cache["localsitemsg"][1] = now public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl) self.site_error_code += 1 else: if self.site_error_code != 0: self.site_error_code = 0 cache["localsitemsg"][0] = "" even = "站点告警状态已经恢复正常 [ %s ]" % s public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl)
def CheckUrl(self,cache,i,email_data,warningUrl): site_url = i["site_check_url"] self.check_site_health(i) for i in self.url_dict.keys(): if self.url_dict[i] == False: even = "URL[ %s ]监控异常" % site_url evenmd5 = "sitemsg" + public.Md5(even) now = time.time() t = now - float(cache["memmsg"][1]) push_time = int(i["push_time"]) * 60 if cache["sitemsg"][0] != evenmd5 and t >= push_time: cache["sitemsg"][0] = evenmd5 cache["sitemsg"][1] = now email_data["type"] = "site_w" email_data["v1"] = site_url public.WriteLog('消息推送', even) self.url_error_code += 1 # 判断告警方式发送消息 if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "URL 告警邮件发送成功") else: if self.url_error_code != 0: self.url_error_code = 0 cache["sitemsg"][0] = "" public.WriteLog('消息推送', "URL告警状态已经恢复正常 [ %s ]" % site_url) email_data["type"] = "site_s" if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "URL 恢复邮件发送成功")
def CheckMem(self,cache,i,email_data,warningUrl): starttime = time.time() - int(i["mem_check_time"]) * 60 mem_data = self.GetCpuIo(starttime) memsum = 0 for mem in mem_data: memsum += int(mem["mem"]) mem_avg = memsum / len(mem_data) if int(i["mem_alarm_value"]) <= mem_avg: evenmd5 = "memmsg" + public.Md5(str(mem_avg)) now = time.time() t = now - float(cache["memmsg"][1]) push_time = int(i["push_time"]) * 60 if cache["memmsg"][0] != evenmd5 and t >= push_time: mxp = self.ThreadingGetProcessMemPercent() even = "内存已经使用[ %d%s ]超过设定阈值,其中【%s】进程占用内存最高,占用率为 %sMB" % (mem_avg, "%", mxp[0],mxp[1]) cache["memmsg"][0] = evenmd5 cache["memmsg"][1] = now public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl) self.mem_error_code += 1 # 判断告警方式发送消息 else: if self.mem_error_code != 0: self.mem_error_code = 0 cache["memmsg"][0] = "" even = "内存告警状态已经恢复正常" self.__SendMail(email_data, even, warningUrl) public.WriteLog('消息推送', even)
def CheckDisk(self,cache,i,email_data,warningUrl): hd_data = self.Check_hd_use() inode_data = self.CheckInodeUse() for keys in hd_data: use = int(hd_data[keys]) inode_use = int(inode_data[keys]) c_use = int(i["disk_alarm_value"]) if use >= c_use or inode_use >= c_use: evenmd5 = "diskmsg" + public.Md5(str(use)) now = time.time() t = now - float(cache["diskmsg"][1]) push_time = int(i["push_time"]) * 60 if cache["diskmsg"][0] != evenmd5 and t >= push_time: disk_data = ' %s 目录已经使用 %s%s 空间,inode 已经使用 %s%s' % (keys, use, "%",inode_use,"%") cache["diskmsg"][0] = evenmd5 cache["diskmsg"][1] = now even = "磁盘已经使用[ %s ]超过设定阈值" % disk_data public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl) self.disk_error_code += 1 self.ed[keys] = self.disk_error_code # 判断告警方式发送消息 else: try: if self.ed[keys] != 0: self.ed[keys] = 0 cache["diskmsg"][0] = "" even = "磁盘告警状态已经恢复正常" self.__SendMail(email_data, even, warningUrl) public.WriteLog('消息推送', even) except: self.ed[keys] = 0
def CheckMem(self,cache,i,email_data,warningUrl): starttime = time.time() - int(i["mem_check_time"]) * 60 mem_data = self.GetCpuIo(starttime) memsum = 0 for mem in mem_data: memsum += int(mem["mem"]) mem_avg = memsum / len(mem_data) if int(i["mem_alarm_value"]) <= mem_avg: even = "内存已经使用[ %d%s ]超过设定阈值" % (mem_avg, "%") evenmd5 = "memmsg" + public.Md5(even) now = time.time() t = now - float(cache["memmsg"][1]) push_time = int(i["push_time"]) * 60 if cache["memmsg"][0] != evenmd5 and t >= push_time: cache["memmsg"][0] = evenmd5 cache["memmsg"][1] = now email_data["type"] = "mem_w" email_data["v1"] = str(mem_avg) + "%" public.WriteLog('消息推送', even) self.mem_error_code += 1 if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "内存 告警邮件发送成功") # 判断告警方式发送消息 else: if self.mem_error_code != 0: self.mem_error_code = 0 cache["memmsg"][0] = "" email_data["type"] = "mem_s" if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "内存 恢复邮件发送成功") public.WriteLog('消息推送', "内存告警状态已经恢复正常")
def CheckCPU(self,cache,i,email_data,warningUrl): # 检查cpu负载 starttime = time.time() - int(i["cpu_check_time"]) * 60 cpu_data = self.GetCpuIo(starttime) cpusum = 0 for cpuio in cpu_data: cpusum += int(cpuio["pro"]) cpu_avg = cpusum / len(cpu_data) if int(i["cpu_alarm_value"]) <= cpu_avg: even = "CPU已经使用[ %.2f ]超过设定阈值" % cpu_avg evenmd5 = "cpumsg" + public.Md5(even) now = time.time() t = now - float(cache["cpumsg"][1]) push_time = int(i["push_time"])*60 if cache["cpumsg"][0] != evenmd5 and t >= push_time: cache["cpumsg"][1] = now cache["cpumsg"][0] = evenmd5 public.WriteLog('消息推送', even) # 判断告警方式发送消息 email_data["type"] = "cpu_w" email_data["v1"] = " %.2f%s " % (cpu_avg, "%") self.cpu_error_code += 1 if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "cpu 告警邮件发送成功") else: if self.cpu_error_code != 0: self.cpu_error_code = 0 cache["cpumsg"][0] = "" email_data["type"] = "cpu_s" public.WriteLog('消息推送', "cpu 告警状态已经恢复正常") if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "cpu 恢复邮件发送成功")
def get_headers(self, url, parameter=''): APIREQUESTDATE = self.APIREQUESTDATE APIHMAC = public.Md5(self.key + url + parameter + APIREQUESTDATE + self.secret) headers = { "API-KEY": self.key, "API-REQUEST-DATE": APIREQUESTDATE, "API-HMAC": APIHMAC, "API-FORMAT": "json" } return headers
def SetToken(self, email_data): ufile = "/www/server/panel/data/userInfo.json" uconf = public.readFile(ufile) if uconf: uconf = json.loads(uconf) sk = uconf["secret_key"] else: return False token = public.Md5(sk + email_data) return token
def GetTmpFile(self,get): self.CleanOldTmpFile() save_path = '/www/server/panel/temp' if not os.path.exists(save_path): os.makedirs(save_path) src_path = get.path get.path = os.path.join(save_path,public.Md5(get.path) + '.tmp') if not os.path.exists(get.path): return public.returnMsg(False,'没有可用的草稿!') data = self.GetFileInfo(get.path) data['file'] = src_path if 'rebody' in get: data['body'] = public.readFile(get.path) return data
def CheckCPU(self, cache, i, email_data, warningUrl): # 检查cpu负载 starttime = time.time() - int(i["cpu_check_time"]) * 60 cpu_data = self.GetCpuIo(starttime) cpusum = 0 for cpuio in cpu_data: cpusum += int(cpuio["pro"]) cpu_avg = cpusum / len(cpu_data) if int(i["cpu_alarm_value"]) <= cpu_avg: evenmd5 = "cpumsg" + public.Md5(str(cpu_avg)) now = time.time() t = now - float(cache["cpumsg"][1]) push_time = int(i["push_time"]) * 60 if cache["cpumsg"][0] != evenmd5 and t >= push_time: mxp = self.ThreadingGetProcessCpuPercent() cache["cpumsg"][1] = now cache["cpumsg"][0] = evenmd5 even = "CPU已经使用[ %.2f%s ]超过设定阈值,其中【%s】进程占用cpu最高,占用率为 %.2f%s" % ( cpu_avg, "%", mxp[0], float(mxp[1]) / int(self.cpunum), "%") public.WriteLog('消息推送', even) # 判断告警方式发送消息 self.__SendMail(email_data, even, warningUrl) # email_data["title"] = even # email_data["body"] = even # email_data = base64.b64encode(json.dumps(email_data)) # data = {"access_key": self.GetAccessKey(), "data": email_data, "token": self.SetToken(email_data)} # res = self.__send_mail(warningUrl, data) # if res == "1": # public.WriteLog('消息推送', "cpu 告警邮件发送成功") self.cpu_error_code += 1 # if self.__send_mail(warningUrl, email_data) == "1": # public.WriteLog('消息推送', "cpu 告警邮件发送成功") else: if self.cpu_error_code != 0: self.cpu_error_code = 0 cache["cpumsg"][0] = "" even = "cpu 告警状态已经恢复正常" public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl)
def CheckUrl(self,cache,i,email_data,warningUrl): site_url = i["site_check_url"] self.check_site_health(i) for u in self.url_dict: if not self.url_dict[u]: even = "URL [ %s ] 监控到访问异常" % site_url evenmd5 = "sitemsg" + public.Md5(even) now = time.time() t = now - float(cache["memmsg"][1]) push_time = int(i["push_time"]) * 60 if cache["sitemsg"][0] != evenmd5 and t >= push_time: cache["sitemsg"][0] = evenmd5 cache["sitemsg"][1] = now public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl) self.url_error_code += 1 else: if self.url_error_code != 0: self.url_error_code = 0 cache["sitemsg"][0] = "" even = "URL告警状态已经恢复正常 [ %s ]" % site_url public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl)
app.config['SESSION_KEY_PREFIX'] = 'BT_:' app.config['SESSION_COOKIE_NAME'] = "BT_PANEL_6" app.config['PERMANENT_SESSION_LIFETIME'] = 86400 * 7 Session(app) if s_sqlite: sdb.create_all() from datetime import datetime import socket comm = common.panelAdmin() method_all = ['GET', 'POST'] method_get = ['GET'] method_post = ['POST'] json_header = {'Content-Type': 'application/json; charset=utf-8'} cache.set('p_token', 'bmac_' + public.Md5(public.get_mac_address())) admin_path_file = 'data/admin_path.pl' admin_path = '/' if os.path.exists(admin_path_file): admin_path = public.readFile(admin_path_file).strip() admin_path_checks = [ '/', '/close', '/task', '/login', '/config', '/site', '/sites', 'ftp', '/public', '/database', '/data', '/download_file', '/control', '/crontab', '/firewall', '/files', 'config', '/soft', '/ajax', '/system', '/panel_data', '/code', '/ssl', '/plugin', '/wxapp', '/hook', '/safe', '/yield', '/downloadApi', '/pluginApi', '/auth', '/download', '/cloud', '/webssh', '/connect_event', '/panel' ] if admin_path in admin_path_checks: admin_path = '/bt'
def SaveTmpFile(self, get): save_path = '/www/server/panel/temp' if not os.path.exists(save_path): os.makedirs(save_path) get.path = os.path.join(save_path, public.Md5(get.path) + '.tmp') public.writeFile(get.path, get.body) return public.returnMsg(True, '已保存')
def CheckNet(self, cache, i, email_data, warningUrl): import psutil ct = int(i["net_check_time"]) nb = int(i["net_bandwidth"]) nv = int(i["net_alarm_value"]) push_time = int(i["push_time"]) cache_t = float(cache["netmsg"][1]) if "netcard" not in i.keys(): i["netcard"] = "lo" # net_tmp = public.ExecShell("grep '%s' /proc/net/dev|awk '{print $2,$10}'" % i["netcard"]) net_tmp = psutil.net_io_counters(pernic=True) r_tmp = net_tmp[i["netcard"]].bytes_recv t_tmp = net_tmp[i["netcard"]].bytes_sent # r_list = [] # t_list = [] # r_tmp_list = [] # t_tmp_list = [] if len(self.r_tmp_list) < 2: self.r_tmp_list.append(r_tmp) else: self.r_tmp_list.pop(0) self.r_tmp_list.append(r_tmp) if len(self.t_tmp_list) < 2: self.t_tmp_list.append(t_tmp) else: self.t_tmp_list.pop(0) self.t_tmp_list.append(t_tmp) r = int(self.r_tmp_list[-1]) - int(self.r_tmp_list[-2]) t = int(self.t_tmp_list[-1]) - int(self.t_tmp_list[-2]) if len(self.r_list) > ct: self.r_list.pop(0) if len(self.t_list) > ct: self.t_list.pop(0) self.r_list.append(r) self.t_list.append(t) rsum = 0 tsum = 0 for i in self.r_list: rsum += i for i in self.t_list: tsum += i rsum = rsum/1024/ct tsum = tsum/1024/ct print(rsum,tsum) net_bandwidth = nb*1024*nv/ 100 if rsum >= net_bandwidth and tsum >= net_bandwidth: d = "上行带宽 %.2fKB 下行带宽 %.2fKB" % (tsum, rsum) even = "带宽已经使用[ %s ]超过设定阈值" % d evenmd5 = "netmsg" + public.Md5(even) now = time.time() print(push_time, cache_t) t = now - cache_t push_time = push_time*60 print(t,push_time,evenmd5) if cache["netmsg"][0] != evenmd5 and t >=push_time: cache["netmsg"][0] = evenmd5 cache["netmsg"][1] = now email_data["type"] = "network_w" email_data["v1"] = d public.WriteLog('消息推送', even) self.net_error_code += 1 if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "带宽告警邮件发送成功") # 判断告警方式发送消息 else: if self.net_error_code != 0: self.net_error_code = 0 cache["netmsg"][0] = "" email_data["type"] = "network_s" if self.__send_mail(warningUrl, email_data) == "1": public.WriteLog('消息推送', "带宽 恢复邮件发送成功") public.WriteLog('消息推送', "带宽告警状态已经恢复正常")
def reload_session(self): userInfo = public.M('users').where( "id=?", (1, )).field('username,password').find() token = public.Md5(userInfo['username'] + '/' + userInfo['password']) public.writeFile('/www/server/panel/data/login_token.pl', token) session['login_token'] = token
def CheckNet(self, cache, i, email_data, warningUrl): import psutil ct = int(i["net_check_time"]) nb = int(i["net_bandwidth"]) nv = int(i["net_alarm_value"]) push_time = int(i["push_time"]) cache_t = float(cache["netmsg"][1]) if "netcard" not in i.keys(): i["netcard"] = "lo" net_tmp = psutil.net_io_counters(pernic=True) r_tmp = net_tmp[i["netcard"]].bytes_recv t_tmp = net_tmp[i["netcard"]].bytes_sent if len(self.r_tmp_list) < 2: self.r_tmp_list.append(r_tmp) else: self.r_tmp_list.pop(0) self.r_tmp_list.append(r_tmp) if len(self.t_tmp_list) < 2: self.t_tmp_list.append(t_tmp) else: self.t_tmp_list.pop(0) self.t_tmp_list.append(t_tmp) r = int(self.r_tmp_list[-1]) - int(self.r_tmp_list[-2]) t = int(self.t_tmp_list[-1]) - int(self.t_tmp_list[-2]) if len(self.r_list) > ct: self.r_list.pop(0) if len(self.t_list) > ct: self.t_list.pop(0) self.r_list.append(r) self.t_list.append(t) rsum = 0 tsum = 0 for i in self.r_list: rsum += i for i in self.t_list: tsum += i rsum = rsum/1024/ct tsum = tsum/1024/ct net_bandwidth = nb*1024*nv/ 100 if rsum >= net_bandwidth and tsum >= net_bandwidth: d = "上行带宽 %.2fKB 下行带宽 %.2fKB" % (tsum, rsum) even = "带宽已经使用[ %s ]超过设定阈值" % d evenmd5 = "netmsg" + public.Md5(even) now = time.time() t = now - cache_t push_time = push_time*60 if cache["netmsg"][0] != evenmd5 and t >=push_time: cache["netmsg"][0] = evenmd5 cache["netmsg"][1] = now public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl) self.net_error_code += 1 else: if self.net_error_code != 0: self.net_error_code = 0 cache["netmsg"][0] = "" even = "带宽告警状态已经恢复正常" self.__SendMail(email_data, even, warningUrl) public.WriteLog('消息推送', "带宽告警状态已经恢复正常")
def CheckMysql(self,cache,email_data,warningUrl,i): import panelMysql as pm f = "%s/plugin/masterslave/data.json" % self.setpath conf = public.readFile(f) if os.path.exists(f) and conf != "": conf = json.loads(conf) try: now = time.time() t = now - float(cache["memmsg"][1]) push_time = int(i["push_time"]) * 60 if "master_ip" in conf.keys(): slavestatus = pm.panelMysql().query("show slave status")[0] Slave_IO_Running = slavestatus[10] Slave_SQL_Running = slavestatus[11] if Slave_IO_Running != "Yes" or Slave_SQL_Running != "Yes": even = "mysql主从异常" evenmd5 = "mysqlmsg" + public.Md5(even) if cache["mysqlmsg"][0] != evenmd5 and t >= push_time: cache["mysqlmsg"][0] = evenmd5 cache["mysqlmsg"][1] = now self.__SendMail(email_data, even, warningUrl) self.mysql_error_code += 1 public.WriteLog('消息推送', "Mysql主从异常") else: if self.mysql_error_code != 0: self.mysql_error_code = 0 cache["mysqlmsg"][0] = "" even = "Mysql主从异常恢复" public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl) else: if not self.CheckPort(conf["slave_ip"], conf["slave_port"]): even = '无法访问从服务器<br>请确认安全组是否已经放行<br>Mysql端口:%s' % conf["slave_ip"] evenmd5 = "mysqlmsg" + public.Md5(even) if cache["mysqlmsg"][0] != evenmd5 and t >= push_time: cache["mysqlmsg"][0] = evenmd5 cache["mysqlmsg"][1] = now self.mysql_error_code += 1 public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl) return slavestatus = public.ExecShell( "mysql -h%s -P%s --connect_timeout=3 -u%s -p%s -e 'show slave status\G'" % ( conf["slave_ip"], conf["slave_port"], "user" + conf["slave_user"], "pass" + conf["slave_pass"]))[0] Slave_IO_Running = "Slave_IO_Running:\s+(\w+)" Slave_SQL_Running = "Slave_SQL_Running:\s+(\w+)" Slave_IO_Running = re.search(Slave_IO_Running, slavestatus).group(1) Slave_SQL_Running = re.search(Slave_SQL_Running, slavestatus).group(1) if Slave_IO_Running != "Yes" or Slave_SQL_Running != "Yes": even = "mysql主从异常" evenmd5 = "mysqlmsg" + public.Md5(even) if cache["mysqlmsg"][0] != evenmd5 and t >= push_time: cache["mysqlmsg"][0] = evenmd5 cache["mysqlmsg"][1] = now self.__SendMail(email_data, even, warningUrl) public.WriteLog('消息推送', "Mysql主从异常!!") else: if self.mysql_error_code != 0: self.mysql_error_code = 0 cache["mysqlmsg"][0] = "" even = "Mysql主从异常恢复" public.WriteLog('消息推送', even) self.__SendMail(email_data, even, warningUrl) except: public.WriteLog('消息推送', "error: " + public.get_error_info()) else: if self.mysql_error_code < 1: self.mysql_error_code += 1 public.WriteLog('消息推送', "主从没有配置")
def reload_session(self): userInfo = public.M('users').where("username=?", (session['username'], )).find() token = public.Md5(userInfo['username'] + '/' + userInfo['password']) public.writeFile('data/login_token.pl', token) session['login_token'] = token