通过宝塔面板开发微信报警插件
通过宝塔面板开发微信报警插件
首先总结一波:
遇到的问题,对公司这个框架不是很熟,好多问题都是问了良哥,然后一步步摸索前进的。碰到好多玄学问题 比如说新建一个字典可以return 但是写入数据的时候返回就不行了,其实想自定义的那种感觉。但是需要造好多轮子,实在脑子转不过来 只能弄成这么固定的方式。 还有碰到一个写日志的方式,python 的自带的写日志的模块在python 编辑器的方式导入的时候就有用, 然后通过url访问的时候就GG 就是不知道问题出在哪里,最后没办法。只能自己low 逼的方式自己写日志,日志的方式是一个大列表的方式,这个地方需要改进一下 改成那种日期格式的方式,最后一个问题就是前段跟后端对接搞的头疼。最后还是抄袭SS的前段代码。没办法啊,谁叫我前端菜的抠脚呢。经过这一个星期的苦想中 终于完成了一个很垃圾的插件,虽然很low 但是至少完成了基本功能。下次有机会改成邮件的方式,让大家都能用上,这样也方便了很多了。毕竟微信的这个需要用 那个企业微信的方式才能发送消息。=。= 应该会在8月份出一个邮件的插件。前端还是需要修炼一番了。
这个需要有一个企业微信公众号才能使用的(稍后发到github中)
花了一个星期的时间写了一个垃圾的代码。emmmmm 具体的实现了如下:
1. 发送日志(已经完成) 2. 配置微信报警的接口 3. 服务停止关闭 4. 测试发送 5. 监控选项
手机接收的如下:
微信的接口如下:
Corpid 是微信企业号的名称ID 如下:
secret ID 是项目ID
实现了内存报警 、 网络过大报警、CPU 之类的基本信息
核心的代码如下:
#coding: utf-8
import sys,public,system,json,os,datetime
system_info=system.system()
class trigger_main:
# 配置文件的存放位置
__config = '/etc/weixincfg.json'
__syteminfo='/etc/system.json'
__loginfo='/www/server/panel/plugin/trigger/weixin.log'
system_type=["network","system"]
state=[0,1]
time_info = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
retList = []
def __init__(self):
'''
数据初始化, 将 weixin.log里面的数据加载到retList,如果没有数据 将写入一个空List
'''
try:
log = self.__read_file(self.__loginfo)
self.retList = json.loads(log)
except ValueError as e:
with open(self.__loginfo, 'w') as f:
f.write("[]")
#Read a string in a file
def __read_file(self,filename):
# 如果文件不存在就返回Flase
if not os.path.exists(filename): return False;
# 打开这个文件
f = open(filename,'r')
#读取这个文件
fbody = f.read()
f.close()
#返回这个文件的所有东西
return fbody
#Write a string to a file
#写这个文件
def __write_file(self,filename,fbody):
f = open(filename,'w')
f.write(fbody)
f.close()
def __write_log(self, filename, fbody):
f = open(filename, 'w')
f.write(fbody)
f.close()
#Write the configuration file
def __set_config(self,sconfig):
#序列化到配置文件中
self.__write_file(self.__config, json.dumps(sconfig))
return True;
def __set_system(self,sconfig):
self.__write_file(self.__syteminfo,json.dumps(sconfig))
return True
def __set_log(self, config):
self.__write_log(self.__loginfo, json.dumps(config))
return True
def __log_write(self,type,status,info):
ret = {}
ret['time'] = self.time_info
ret['type'] = type
ret['status'] = status
ret['info'] = info
self.retList.append(ret)
self.__set_log(self.retList)
# 硬盘检测
def disk_check(self,input):
disk=system_info.GetDiskInfo()
if int(disk[0]['size'][-1].strip("%"))>70:
result = public.ExecShell('/www/server/panel/plugin/trigger/weixin 1 disk_is_to_50')
self.__log_write(type="system",status="OK",info="disk_is_to_50")
if result[0] =='ok\n' and len(result[0])==3:return True
return False
else:
return False
# 内存检测
def mem_check(self,input):
mem_info=system_info.GetMemInfo()
mem=int(float(mem_info['memRealUsed'])/float(mem_info['memTotal'])*100)
if mem>80:
result = public.ExecShell('/www/server/panel/plugin/trigger/weixin 1 mem_is_to_50')
self.__log_write(type="system",status="OK",info="mem_is_to_50")
if result[0] =='ok\n' and len(result[0])==3:return True
return False
else:
return False
# get_cpu_load_network
def get_cpu_load_network(self,input):
liang=system_info.GetAllInfo(input)
if int(liang['cpu'][0])>60:
result = public.ExecShell('/www/server/panel/plugin/trigger/weixin 1 CPU_is_to_60')
self.__log_write(type="system",status="OK",info="CPU_is_to_60")
if result[0] =='ok\n' and len(result[0])==3:return True
if int(liang["network"]["down"])>100:
result = public.ExecShell('/www/server/panel/plugin/trigger/weixin 1 netowkr_is_to_100')
self.__log_write(type="system",status="OK",info="netowkr_is_to_100")
if result[0] =='ok\n' and len(result[0])==3:return True
return False
# CPU
def cpu(self,input):
liang=system_info.GetAllInfo(input)
if int(liang['cpu'][0])>60:
result = public.ExecShell('/www/server/panel/plugin/trigger/weixin 1 CPU_is_to_60')
self.__log_write(type="system",status="OK",info="CPU_is_to_60")
if result[0] =='ok\n' and len(result[0])==3:return liang['cpu'][0]
return liang['cpu'][0]
#网络
def network(self,input):
liang=system_info.GetAllInfo(input)
if int(liang["network"]["up"])>100:
result = public.ExecShell('/www/server/panel/plugin/trigger/weixin 1 netowkr_is_to_100')
self.__log_write(type="network",status="OK",info="netowkr_is_to_100")
if result[0] =='ok\n' and len(result[0])==3:return liang["network"]["down"],liang["network"]["up"]
return liang["network"]["down"],liang["network"]["up"]
#负载
def load(self,input):
liang=system_info.GetAllInfo(input)
if int(liang["load_average"]["one"])>=1:
result = public.ExecShell('/www/server/panel/plugin/trigger/weixin 1 CPU_is_to_60')
self.__log_write(type="system",status="OK",info="CPU_is_to_60")
if result[0] =='ok\n' and len(result[0])==3:return liang["load_average"]["one"],liang["load_average"]["five"],liang["load_average"]["fifteen"]
return liang["load_average"]["one"],liang["load_average"]["five"],liang["load_average"]["fifteen"]
def get_system_info(self,input):
name=['Memory','Hard_disk','load_load','network_up','network_down','CPU']
mem_info=system_info.GetMemInfo()
disk=system_info.GetDiskInfo()
mem=int(float(mem_info['memRealUsed'])/float(mem_info['memTotal'])*100)
dist_info=int(disk[0]['size'][-1].strip("%"))
cpu=self.cpu(input)
network=self.network(input)
load=self.load(input)
sconfig = self.get_system(None)
load_load={'number':load[0],'name':name[2],'system_type':self.system_type[1],'state':self.state[0]}
network_up={'number':network[-1],'name':name[3],'system_type':self.system_type[1],'state':self.state[0]}
network_down={'number':network[0],'name':name[4],'system_type':self.system_type[1],'state':self.state[0]}
CPU={'number':cpu,'name':name[5],'system_type':self.system_type[1],'state':self.state[0]}
Memory={'number':mem,'name':name[0],'system_type':self.system_type[1],'state':self.state[0]}
Hard_disk={'number':dist_info,'name':name[1],'system_type':self.system_type[1],'state':self.state[0]}
sconfig['mem']=mem
sconfig['dist_info']=dist_info
sconfig['cpu']=cpu
sconfig['network']=network
sconfig['load']=load
self.__set_system(sconfig)
return Memory,Hard_disk,CPU,network_up,network_down,load_load
def create_user(self,input):
#获取一下配置文件
sconfig = self.get_config(None)
#添加一个端口 和密码
sconfig['corp']['corpid'] = input.corpid
sconfig['corp']['secret'] = input.secret
sconfig['corp']['agentid'] = input.agentid
self.__set_config(sconfig)
return True
#Read the configuration file
def get_config(self,input):
fbody = self.__read_file(self.__config)
#通过反序列化转为内存对象
return json.loads(fbody)
def get_system(self,input):
body=self.__read_file(self.__syteminfo)
return json.loads(body)
#列出所有用户端口信息
def get_users(self,input):
# {u'corp': {u'corpid': u'wxxxxxx', u'secret': u'Vnxxxxx', u'agentid': 1}}
sconfig = self.get_config(None);
users = []
for port in sconfig['corp']:
u_tmp = {}
u_tmp['agentid'] = agentid
# 返回的应该是一个 [ {u'agentid': 1} ]
users.append(u_tmp)
#返回的值应该是
return users
#获取配置选项
def get_options(self,input):
#获取配置文件
sconfig = self.get_config(None)
config=sconfig['corp']
#返回的是一个json {u'corp': {u'corpid': u'wxxxxxx', u'secret': u'Vnxxxxx', u'agentid': 1}}
return config
def get_system_options(self,input):
get_system_info_opstion=self.get_system(None)
return get_system_info_opstion
#修改微信的SDK 文件
def create_user(self,input):
#获取一下配置文件
sconfig = self.get_config(None)
#添加一个端口 和密码
sconfig['corp']['corpid'] = input.corpid
sconfig['corp']['secret'] = input.secret
sconfig['corp']['agentid'] = input.agentid
self.__set_config(sconfig)
return True
#发送测试
def get_check(self,input):
# 看不懂这个ExecShell 方法
result = public.ExecShell('/www/server/panel/plugin/trigger/weixin 1 test')
if result[0] =='ok\n' and len(result[0])==3:return True
return False
def get_check_info(self,input):
liang=self.get_cpu_load_network(input)
return liang
def weixin(self,input):
liang=self.get_check_info(input)
if liang:return True
check_disk=self.disk_check(None)
check_mem=self.mem_check(None)
if check_disk:return True
if check_mem:return True
if check_mem and check_disk:return True
return False
def get_log(self,input):
ret= self.__read_file(self.__loginfo)
return json.loads(ret)
def get_status(self,input):
return True









