# -*- 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)