kefu/tools/kefu_robot.py
2019-01-25 14:13:26 +08:00

77 lines
2.5 KiB
Python

#coding utf8
#!/usr/bin/python
import os
import json
import time
import hashlib
import urllib.request
import tornado.ioloop
import tornado.web
def md5Sign(params, secret, timestamp, connstr = '&', secret_connstr = ':'):
print('md5in')
print(params)
params_str = ''
for key in sorted(params.keys()):
params_str = params_str + key + '=' + str(params[key]) + connstr
print(params_str)
if params_str != '' and connstr != '':
params_str = params_str[0:-1]
m5 = hashlib.md5()
str1 = params_str + secret_connstr + str(timestamp) + secret
m5.update(str1)
return m5.hexdigest()
def getDaySeconds(time_val, incdays):
time_zone = 8
return int((time_val + time_zone * 3600)/3600/24 + incdays) * 3600 * 24 - 3600 * time_zone;
def sendNotify(conf, sendtime):
try:
print('sendNotify')
params = {'key' : 'kingsome'}
secret = 'fc38349c5d084e920925e614c420be9f'
timestamp = time.time()
md5signstr = md5Sign(params, secret, timestamp)
print(md5signstr)
url = conf['notify_url'] + '&timestamp=' + timestamp + '&sign=' + md5signstr
print(url)
req = urllib.request.Request(url)
data = urllib.request.urlopen(req).readall()
except:
pass
#进入下一次循环
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + sendtime,
lambda : sendNotify(conf, sendtime))
class SelfCheckingHandler(tornado.web.RequestHandler):
def get(self):
self.write(json.dumps({
'errcode': 0,
'errmsg': '',
'healthy': 1,
'max_rundelay': 10
}))
def make_app():
return tornado.web.Application([
(r"/webapp/index[\.]php", SelfCheckingHandler),
])
if __name__ == "__main__":
conf = json.loads(open('../config/kefu_robot.json', 'r').read())
app = make_app()
app.listen(conf['listen_port'])
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + conf['sendtime1'],
lambda : sendNotify(conf, conf['sendtime1']))
tornado.ioloop.IOLoop.current().call_at(getDaySeconds(time.time(), 1) + conf['sendtime2'],
lambda : sendNotify(conf, conf['sendtime2']))
tornado.ioloop.IOLoop.current().call_at(time.time() + 3,
lambda : sendNotify(conf, 30))
tornado.ioloop.IOLoop.current().start()