102 lines
2.6 KiB
Python
102 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
#!/usr/bin/python
|
|
|
|
import pymysql
|
|
import hashlib
|
|
import json
|
|
import urllib.request
|
|
import base64
|
|
import tornado.ioloop
|
|
import tornado.web
|
|
import time
|
|
import datetime
|
|
import redis
|
|
import os
|
|
import functools
|
|
import delrank_cmd
|
|
import sys
|
|
|
|
CONFIG_DIR = ''
|
|
|
|
def IsOnlineEnv():
|
|
return os.getenv("SERVER_ENV");
|
|
|
|
if (IsOnlineEnv()):
|
|
CONFIG_DIR = '/var/data/conf_test/game2003api_rankserver/config'
|
|
else:
|
|
CONFIG_DIR = '../config'
|
|
|
|
def info(msg):
|
|
print(str(datetime.datetime.now()) + '[INFO] ' + msg)
|
|
|
|
def getRedis():
|
|
redis_conf = json.loadsmysql_conf = json.loads(open(CONFIG_DIR + '/rankserver.redis.cluster.json', 'r').read())
|
|
for conf in redis_conf:
|
|
r = redis.Redis(host = conf['host'],
|
|
port = conf['port'],
|
|
password = conf['passwd'],
|
|
charset = 'utf8'
|
|
)
|
|
return r;
|
|
|
|
#字符串排序
|
|
def customCmp(a, b):
|
|
if len(a[4]) < len(b[4]):
|
|
return -1
|
|
elif len(a[4]) > len(b[4]):
|
|
return 1
|
|
#endif
|
|
if a[4] < b[4]:
|
|
return -1
|
|
elif a[4] > b[4]:
|
|
return 1
|
|
else:
|
|
return
|
|
|
|
#删除排行榜数据
|
|
def delMysqlData():
|
|
pass_list = []
|
|
coin_list = []
|
|
r = getRedis()
|
|
updateRank(r, pass_list, coin_list)
|
|
|
|
#更新排行榜
|
|
def updateRank(r, pass_list, coin_list):
|
|
pass_list.sort(key=take_pass, reverse=True)
|
|
pass_rank = []
|
|
for pass_index in range(min(50, len(pass_list))):
|
|
pass_rank.append(pass_list[pass_index])
|
|
r.set("game2003api:pass_rank", json.dumps(pass_rank))
|
|
|
|
coin = sorted(coin_list, key=functools.cmp_to_key(customCmp), reverse = True)
|
|
coin_rank = []
|
|
for coin_index in range(min(50, len(coin))):
|
|
coin_rank.append(coin[coin_index])
|
|
r.set("game2003api:coin_rank", json.dumps(coin_rank))
|
|
|
|
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_DIR + '/rankserver.json', 'r').read())
|
|
redis_cluster = json.loads(open(CONFIG_DIR + '/rankserver.redis.cluster.json', 'r').read())
|
|
mysql_cluster = json.loads(open(CONFIG_DIR + '/rankserver.mysql.cluster.json', 'r').read())
|
|
if len(sys.argv) <= 1:
|
|
app = make_app()
|
|
app.listen(conf['listen_port'])
|
|
delMysqlData()
|
|
else:
|
|
delrank_cmd.processCmdLine(sys.argv[1], redis_cluster, mysql_cluster)
|