#!/usr/bin/python
|
# -*- coding: utf-8 -*-
|
# @todo: 历史榜单
|
|
import CommFunc
|
import ConfigParser
|
import logging
|
import mylog
|
import json
|
import os
|
|
cfg = ConfigParser.ConfigParser()
|
cfg.read("../../InterfaceConfig.php")
|
ServerPath = cfg.get("ServerInfo", "ServerPath")
|
|
def queryBillboardHisInfo(argvDict):
|
logging.info("queryBillboardHisInfo %s" % argvDict)
|
startDate = endDate = argvDict.get("billboardDate", "")
|
argvDict["startDate"] = startDate
|
argvDict["endDate"] = endDate # 历史榜单只查一天
|
|
billboardType = int(argvDict.get("billboardType", "1")) - 1 # 由于值0的参数传不进来,所有进行了加1传递,实际要减1
|
viewDRFileName = argvDict.get("viewDRFileName", "") # 指定查看的流向文件名
|
|
logging.info("billboardType=%s,startDate=%s,endDate=%s" % (billboardType, startDate, endDate))
|
logging.info("viewDRFileName=%s" % (viewDRFileName))
|
|
# 查询中心备份的
|
if CommFunc.isQueryCenterbak(argvDict):
|
queryCenterBak(startDate, endDate, argvDict, billboardType, viewDRFileName)
|
return
|
|
drFileList, drList = [], []
|
needQueryCenterbak = CommFunc.loopMainServerDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc,
|
parseLineFunc, billboardType, viewDRFileName, drFileList, drList)
|
logging.info("needQueryCenterbak:%s" % needQueryCenterbak)
|
if needQueryCenterbak:
|
bakDataInfo = CommFunc.queryBackupCenterDR(cfg, argvDict)
|
if bakDataInfo == None:
|
return
|
drFileListBak, drListBak = bakDataInfo
|
|
drFileList = drFileListBak + drFileList
|
drList = drListBak + drList
|
|
ret = {"OK":1, "DRData":drList, "DRFileList":drFileList}
|
|
#logging.info("ret:%s" % ret)
|
print json.dumps(ret, ensure_ascii=False, default=lambda obj: obj.__dict__)
|
return
|
|
def queryCenterBak(startDate, endDate, argvDict, billboardType, viewDRFileName):
|
drFileListBak, drListBak = [], []
|
|
if not CommFunc.loopCenterbakRarDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc,
|
parseLineFunc, billboardType, viewDRFileName, drFileListBak, drListBak):
|
return
|
|
return CommFunc.queryBackupCenterOK([drFileListBak, drListBak])
|
|
def checkDrFileNeedParseFunc(drFileName, *parseArgs, **kv):
|
''' 检查流向是否需要处理
|
@param drFileName: 流向文件名 xxx_日期.txt
|
@param *parseArgs: 自定义参数
|
@return: isNeed, checkNeedParseRetInfo
|
'''
|
billboardType = parseArgs[0]
|
isNeed = drFileName.startswith("Billboard_%s" % billboardType)
|
return isNeed, None
|
|
def parseLineFunc(drName, dateStr, checkNeedParseRetInfo, line, *parseArgs, **kv):
|
''' 解析流向行内容
|
@param drName: 流向名
|
@param dateStr: 对应日期字符串
|
@param checkNeedParseRetInfo: checkDrFileNeedParseFunc 返回的内容
|
@param line: 本行内容
|
@param *parseArgs: 自定义参数
|
'''
|
|
billboardType, viewDRFileName, drFileList, drList = parseArgs
|
|
if "DataCount" in line:
|
drDict = eval(line)
|
if drDict["BillboardType"] != billboardType:
|
return
|
drFileList.append([drName, drDict["DataCount"], drDict["addDataDict"]])
|
elif "Rank" in line:
|
# 只添加指定查看流向文件的数据 或 第一份流向
|
if viewDRFileName:
|
if drName != viewDRFileName:
|
return
|
elif len(drFileList) != 1:
|
return
|
|
drDict = eval(line)
|
drList.append(drDict)
|
return
|
|
def main():
|
CommFunc.setdefaultencoding()
|
argvDict = CommFunc.parse_args()
|
mylog.InitMyLog(argvDict.get("eventType", ""))
|
|
errorInfo = "";
|
dbIni = ConfigParser.ConfigParser()
|
dbIni.read(os.path.join(ServerPath, "db\PyMongoDataServer\PyMongoDataServer.ini"))
|
isCrossServer = dbIni.has_option("Merge", "IsMergeServer") and dbIni.getint("Merge", "IsMergeServer") == 1
|
if isCrossServer:
|
if not argvDict.get("isCrossServer"):
|
errorInfo = "请在子服服务器查询";
|
else:
|
if argvDict.get("isCrossServer"):
|
errorInfo = "请在跨服服务器查询";
|
|
if errorInfo != "":
|
ret = {"OK":1, "ErrorInfo":errorInfo}
|
print json.dumps(ret, ensure_ascii=False, default=lambda obj: obj.__dict__)
|
return
|
|
queryBillboardHisInfo(argvDict)
|
return
|
|
if __name__ == "__main__":
|
try:
|
main()
|
except:
|
CommFunc.printExceptionError()
|