-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
151 lines (132 loc) · 5.79 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# -*- encoding:utf-8 -*-
import logging
import os
import sys
from analyzer.staticInfo_predictor import StaticInfoPredictor
from analyzer import data_object
from analyzer import userinfo_manager
from config import token_config
from package_leancloud_utils.leancloud_utils import LeancloudUtils
import logentries
from analyzer.staticinfo_exceptions import MsgException
__author__ = 'Jayvee'
from flask import Flask, request, make_response
import json
project_path = os.path.dirname(__file__)
sys.path.append(project_path)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
lh = logentries.LogentriesHandler(token_config.LOGENTRIES_TOKEN)
fm = logging.Formatter('%(asctime)s : %(levelname)s, %(message)s',
'%a %b %d %H:%M:%S %Y')
lh.setFormatter(fm)
logger.addHandler(lh)
app = Flask(__name__)
# Import bugsnag
import bugsnag
from bugsnag.flask import handle_exceptions
# Configure Bugsnag
bugsnag.configure(
api_key=token_config.BUGSNAG_KEY,
project_root=project_path,
)
# Attach Bugsnag to Flask's exception handler
handle_exceptions(app)
# init static info predictor
android_predictor = StaticInfoPredictor(platform='Android')
android_predictor.staticinfo_predict_platform([], add_nonbinary=True)
ios_predictor = StaticInfoPredictor(platform='iOS')
ios_predictor.staticinfo_predict_platform([], add_nonbinary=True)
predictor_dict = {'Android': android_predictor, 'iOS': ios_predictor}
@app.before_first_request
def initService():
# print token_config.APP_ENV
logger.info('[%s]Service start' % token_config.LOG_TAG)
# pass
@app.route('/data', methods=['GET', 'POST'])
def handle_applist_data():
# get storage applist
if request.method == 'GET':
logger.info('[%s][handle_applist_data]receive get request from %s, param data=%s' % (
token_config.LOG_TAG, request.remote_addr, request.args.keys()))
# appdict = DataObject.AppDict()
try:
if 'limit' in request.args:
dd = request.args['limit']
limit_num = int(dd)
else:
limit_num = 100
if 'label' in request.args:
label = request.args['label']
else:
label = None
except KeyError:
logger.error('[%s][handle_applist_data]keyerror' % token_config.LOG_TAG)
limit_num = 100 # default:limit_num=100
label = None
result_list = LeancloudUtils.get_remote_data('app_dict', limit_num, label)
return json.dumps(result_list)
# push data to feedback
if request.method == 'POST':
logger.info('[%s][handle_applist_data]receive post request from %s' % (
token_config.LOG_TAG, request.remote_addr))
try:
jsonobj = json.loads(request.data)
data_object.push_data_to_feedback(jsonobj)
except ValueError, ve:
logger.error('[%s][handle_applist_data]request data value error, details=%s, request_data=%s' % (
token_config.LOG_TAG, ve, request.data))
resp = make_response('{"code": 103, "msg": "request data value error"}', 400)
return resp
except KeyError, ke:
logger.error('[%s][handle_applist_data]request data keyerror, details=%s, request_data=%s' % (
token_config.LOG_TAG, ke, request.data))
resp = make_response('{"code": 103, "msg": "request data keyerror"}', 400)
return resp
except MsgException, msg:
logger.error('[%s][handle_applist_data]request data error, details=%s, request_data=%s' % (
token_config.LOG_TAG, msg, request.data))
resp = make_response(json.dumps({"code": 1, "msg": "%s" % msg.message}), 400)
return resp
return json.dumps({"code": 0, "msg": "push data to feedback success, request_data= %s" % request.data})
return 'You Request Method is Not Correct!'
@app.route('/predict_platform', methods=['POST'])
def predict_static_info_platform():
try:
logger.info('[%s][predict_static_info_platform]receive post request from %s, param data=%s' % (
token_config.LOG_TAG, request.remote_addr, request.data))
req_data = json.loads(request.data)
apps = req_data['applist']
platform = req_data['platform']
predictor = predictor_dict[platform]
sim_dict = predictor. \
staticinfo_predict_platform(apps, add_nonbinary=True) # transform the prob
for key in sim_dict.keys():
if '-' in key:
levels = key.split('-')
first_level = levels[0]
second_level = levels[1]
if first_level in sim_dict.keys():
sim_dict[first_level][second_level] = sim_dict[key]
else:
sim_dict[first_level] = {second_level: sim_dict[key]}
del sim_dict[key]
logger.info('[%s][predict_static_info_platform]%s\'s request success, sim dic =%s' % (
token_config.LOG_TAG, request.remote_addr, json.dumps(sim_dict)))
return json.dumps(sim_dict)
except ValueError, err_msg:
logger.error('[%s][predict_static_info]%s' % (token_config.LOG_TAG, err_msg))
# logger.error('[ValueError] err_msg: %s, params=%s' % (err_msg, request.data))
resp = make_response(json.dumps({'code': 103, 'msg': str(err_msg)}), 400)
return resp
except KeyError, keyerr:
logger.error(
'[%s][predict_static_info_platform]post parameter error! params=%s' % (token_config.LOG_TAG, request.data))
resp = make_response(json.dumps({'code': 1, 'msg': 'key error:%s' % keyerr}), 400)
return resp
@app.route('/status', methods=['GET'])
def check_status():
return 'The staticinfo.degree is running'
if __name__ == "__main__":
app.debug = False
app.run(port=8080)