通过宝塔面板开发微信报警插件

作者: print("") 分类: python 发布时间: 2018-07-28 18:26

通过宝塔面板开发微信报警插件

首先总结一波:

遇到的问题,对公司这个框架不是很熟,好多问题都是问了良哥,然后一步步摸索前进的。碰到好多玄学问题

比如说新建一个字典可以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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

说点什么

avatar
  Subscribe  
提醒