(1)首先須要在項目的根路徑下,建立utils包,用於存放項目的其餘數據接口;html
(2)而後在utils包下,建立一個wechat_send.py
模塊, 用於給用戶封裝企業微信的接口,提供給外界調用;python
import requests import json class Wechat_Info: def __init__(self): self.partyID = '1' self.corpID = 'ww5cfabaf35ce8cd7b' self.secret = 'uiwvmNj8f1IVy3QYrZ62WePGFKA_BsIPmHigq3TRydM' self.agentID = '1000002' self.token = None def __get_token(self, corpid, secret): Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken" Data = { "corpid": corpid, "corpsecret": secret } r = requests.get(url=Url, params=Data) token = r.json()['access_token'] return token def send_message(self, message): url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format( self.__get_token(self.corpID, self.secret)) data = { "toparty": self.partyID, "msgtype": "text", "agentid": self.agentID, "text": { "content": message }, "safe": "0" } result = requests.post(url=url, data=json.dumps(data)) return result.text if __name__ == '__main__': wechat_info = Wechat_Info() result = wechat_info.send_message('微信測試') print(result)
partyID
、corpID
、secret
、agentID
都是配置信息,須要引入一個讀取配置文件的庫configparser
;安裝: pip install configparser
xkd.conf
文件;[Wechat] party_id = 1 corp_id = ww5cfabaf35ce8cd7b secret = uiwvmNj8f1IVy3QYrZ62WePGFKA_BsIPmHigq3TRydM agent_id = 1000002
const_file.py
文件,依賴做爲項目中全局常量的引用;import os PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) CONFIG_DIR = os.path.join(PROJECT_DIR, 'cfg') # 指定配置文件的路徑 CONFIG_FILE = os.path.join(CONFIG_DIR, 'xkd.conf')
wechat_send.py
模塊接口(配置中的信息都是明文的,在項目開發中,最好將重要的配置信息進行加密,能夠使用base64進行加密和解密);import requests import json from configparser import ConfigParser from utils.const_file import CONFIG_FILE class Wechat_Info: def __init__(self): self.wechat_info = self.__get_config_info() def __get_config_info(self): parser = ConfigParser() parser.read(CONFIG_FILE) wechat_info = {} wechat_info['party_id'] = parser.get('Wechat', 'party_id') wechat_info['corp_id'] = parser.get('Wechat', 'corp_id') wechat_info['secret'] = parser.get('Wechat', 'secret') wechat_info['agent_id'] = parser.get('Wechat', 'agent_id') return wechat_info def __get_token(self, corpid, secret): Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken" Data = { "corpid": corpid, "corpsecret": secret } r = requests.get(url=Url, params=Data) token = r.json()['access_token'] return token def send_message(self, message): url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={}".format( self.__get_token(self.wechat_info.get('corp_id'), self.wechat_info.get('secret'))) data = { "toparty": self.wechat_info.get('party_id'), "msgtype": "text", "agentid": self.wechat_info.get('agent_id'), "text": { "content": message }, "safe": "0" } result = requests.post(url=url, data=json.dumps(data)) return result.text if __name__ == '__main__': wechat_info = Wechat_Info() result = wechat_info.send_message('微信測試') print(result)
(7)在utils包下,建立aliyun_monitor.py
文件,封裝阿里雲的雲監控數據的接口;django
(8)而後編輯xkd.conf配置文件,添加阿里雲RAM access key
和 access key secret
、region id
;json
[Wechat] party_id = 1 corp_id = wwabdfbc8feeee095a secret = NY2nQE1cavlug_IuyMoRlIZDIOdsDS4KMpo_81XWslo agent_id = 1000002 [ALIYUN] access_key = LTAIxdvbuz2MD74Z access_key_secret = I2b7O1UJmkjfgHVC4i7Atb8gGXwAbU region_id = cn-shenzhen
aliyun_monitor.py
文件;from aliyunsdkcore import client from aliyunsdkcms.request.v20180308 import QueryMetricListRequest from datetime import datetime, timedelta import json from configparser import ConfigParser from utils.const_file import CONFIG_FILE class CloudMonitor: def __init__(self): self.ram_info = self.__get_ram_info() self.clt = client.AcsClient(self.ram_info.get('access_key'), self.ram_info.get('access_key_secret'), self.ram_info.get('region_id')) self.request = QueryMetricListRequest.QueryMetricListRequest() self.last_average = None def __get_ram_info(self): parser = ConfigParser() parser.read(CONFIG_FILE) ram_info = {} ram_info['access_key'] = parser.get('ALIYUN', 'access_key') ram_info['access_key_secret'] = parser.get('ALIYUN', 'access_key_secret') ram_info['region_id'] = parser.get('ALIYUN', 'region_id') return ram_info def __get_start_timestamp(self): start_datetime = datetime.now() - timedelta(minutes=3) start_timestamp = int(start_datetime.timestamp() * 1000) return start_timestamp def get_last_metric(self,instance_id, monitor_key): ''' :param instance_id: ECS是實例ID :param monitor_key: 須要監控的指標 :return: ''' self.request.set_accept_format('json') self.request.set_Project('acs_ecs_dashboard') self.request.set_Metric('{}'.format(monitor_key)) start_time = self.__get_start_timestamp() self.request.set_StartTime(start_time) self.request.set_EndTime(int(datetime.now().timestamp() * 1000)) self.request.set_Dimensions("{'instanceId': '%s'}" % (instance_id)) result = self.clt.do_action_with_exception(self.request) result = json.loads(result) data_str = result.get('Datapoints') data_list = json.loads(data_str) return data_list[-1]['Average'] if __name__ == '__main__': monitor = CloudMonitor() result = monitor.get_last_metric('i-wz98bynewgl7gu3jqqb3', 'CPUUtilization') print(result)
pip install django-crontab
django-crontab
到INSTALLED_APPS;INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users', 'courses', 'teachers', 'schools', 'rest_framework', 'django_crontab', ]
import CloudMonitor
和Wechat_Info
;from utils.aliyun_monitor import CloudMonitor from utils.wechat_send import Wechat_Info def send_aliyun_metric_to_wechat(): monitor = CloudMonitor() wechat_info = Wechat_Info() result = monitor.get_last_metric('i-wz98bynewgl7gu3jqqb3', 'CPUUtilization') wechat_info.send_message('當前服務器CPU使用率是:{}'.format(result))
CRONJOBS = [ ('* * * * *', 'users.cron.send_aliyun_metric_to_wechat') ]
python manage.py crontab add
;安裝命令行:pip install configparser
;windows
ConfigParser是用來讀取配置文件的模塊,配置文件的格式跟windows下的ini配置文件類似,能夠包含一個或多個section,每一個section都有本身的option;api
section 用 [sect_name] 表示,每一個option是一個鍵值對,使用分隔符=
或:
隔開;服務器
在 option 中分隔符兩端的空格會被忽略掉;微信
配置文件使用能夠使用#
進行註釋;session
安裝命令: pip install django-crontab
django-crontab使用前須要添加到settings文件中的INSTALLED_APPS中;post
添加定時任務:python manage.py crontab add
,注意若是修改了任務,也須要再次運行此命令;
清除定時任務:python manage.py crontab remove
;
顯示定時任務:python manage.py crontab show
;
注意django-crontab
必須在Linux的crontab開啓的狀況下方可以使用,否則會出現不執行的狀況;