datacollect/report_interface.py
2019-08-12 12:01:20 +08:00

108 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
# pip install apscheduler
# python report_interface.py --port=5021
# 广告数据接口
# 请求方式为 http://154.8.214.202:5020/webapp/index.php?c=Ops&a=gamereport1004&body={"times":"2019-07-22","is_new":0}
import tornado.ioloop
import tornado.httpserver
import tornado.web
from ops.plog import define_logger
from ops.mtga import FromTga, GetTgaConfig
import logging
from tornado import gen
import tornado.options
import json
from config.config import *
#from apscheduler.schedulers.tornado import TornadoScheduler
from tasks import run_tasks
from urllib.parse import unquote
from config import *
#sched = TornadoScheduler()
define_logger("/data/logs/report_interface.log")
log = logging.getLogger(__name__)
tornado.options.define("port", default=5021, type=int, help="run server on the given port.")
class DispatchHandler(tornado.web.RequestHandler):
@gen.coroutine
def get(self):
if self.get_query_argument('c') == 'Ops' and self.get_query_argument('a') == 'selfChecking':
self._selfCheckingHandler()
elif self.get_query_argument('c') == 'Ops' and self.get_query_argument('a') == 'getreport':
yield self._selfGetReport()
elif self.get_query_argument('c') == 'Ops' and self.get_query_argument('a') == 'getmethods':
yield self._selfgetmethods()
else:
self.write("pls check args!")
def _selfgetmethods(self):
methods = []
for line in event_list:
_, _, method = line
methods.append(method)
self.write({'errcode': 0, "errmsg": "", "result": json.dumps(methods, ensure_ascii=False)})
def _selfCheckingHandler(self):
self.write(json.dumps({'errcode': 0, 'errmsg': '', 'healthy': 1, 'max_rundelay': 10}, separators=(',', ':')))
def _selfGetReport(self):
self.suffix = 23
self.api_key = 'OgOWG9CMq12HcE6d8nIisKELDQMWe0XJobj9evyA5NbcmHClQYV4oIorR2NdaiMk'
gc = GetTgaConfig()
self.url = gc.url
self.tga = FromTga(url=self.url, token=self.api_key)
gameid = self.get_arguments('gameid')[0]
print(f"gameid was {gameid}")
times = self.get_arguments('times')[0]
try:
channel=self.get_arguments('channel')[0]
except:
channel = 6001
methods = self.get_arguments('methods')[0]
if not (gameid and times and channel and methods):
result = {'errcode': 2, "errmsg": f"get args failed`"}
log.error(result, exc_info=True)
self.write(result)
try:
all = self._get_tap_data(gameid, times, channel, methods)
return self.write({'errcode': 0, "errmsg": "", "result": json.dumps(all, ensure_ascii=False)})
except Exception:
log.error(f"run self._get_tap_data(**kwargs) failed", exc_info=True)
return self.write({'errcode': 2, "errmsg": "get data failed`"})
def _get_tap_data(self, gameid, times, channel, methods):
sql = f"""SELECT result FROM v_event_{self.suffix} where "$part_event"='rep_{methods}'and date='{times}'
and "gameid"={gameid} and channelid={channel} """
data = self.tga.get_data(sql)
print(f"sql={sql}")
all = []
if data:
try:
for line in data:
if line:
all.append(line[0])
except Exception:
log.error("split data from tga failed !", exc_info=True)
return all
def make_app():
return tornado.web.Application([(r"/webapp/index[\.]php", DispatchHandler)])
if __name__ == "__main__":
print('start!')
tornado.options.parse_command_line()
app = make_app()
app.listen(tornado.options.options.port)
#sched.add_job(run_tasks, 'cron', hour=Cron_hour, minute=Cron_minute)
tornado.ioloop.IOLoop.current().start()