#!/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()