hxp
2024-10-31 402ed2e6a90a785d2fce3eca23cd324f350d54c5
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
#!/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()