| #!/usr/bin/python  | 
| # -*- coding: utf-8 -*-  | 
|   | 
| import CommFunc  | 
| import ConfigParser  | 
| import logging  | 
| import mylog  | 
| import json  | 
| import os  | 
| from unrar import rarfile  | 
|   | 
| cfg = ConfigParser.ConfigParser()  | 
| cfg.read("../../InterfaceConfig.php")  | 
| # 需要处理的流向名及顺序列表  | 
| DRNameList = ["LogInOut"]  | 
|   | 
| argvDict = {"spID": "hyyngame",  | 
|             "eventType": "ImportBakDailyActive",  | 
|             "queryCenterbak": 1,  | 
|             "allServer": 1,  | 
|             "startDate": "2024-05-01",  | 
|             }  | 
|   | 
|   | 
| def queryAccountLoginoutInfo(argvDict):  | 
|     logging.info("queryAccountLoginoutInfo %s" % str(argvDict))  | 
|   | 
|     startDate = argvDict.get("startDate", "")  | 
|     endDate = argvDict.get("endDate", "")  | 
|     spID = argvDict.get("spID", "")  | 
|     # 查询中心备份的  | 
|     # {"日期":{"AccID":[loginTime, logoutTime, IP], ...}, ...}  | 
|     loginoutDateAccIDInfo = {}  | 
|     if not CommFunc.loopCenterbakRarDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc, parseLineFunc,  | 
|                                        loginoutDateAccIDInfo, drNameList=DRNameList, logloop=1, printloop=1):  | 
|         return  | 
|   | 
|     logging.info("query all data OK")  | 
|     logging.info("%s" % loginoutDateAccIDInfo)  | 
|       | 
|     content = json.dumps(loginoutDateAccIDInfo, ensure_ascii=False, default=lambda obj: obj.__dict__)  | 
|     with open('BakDailyActive.json', 'w') as file:  | 
|         file.write(content)  # 将内容写入文件  | 
|     print "save ok"  | 
|     logging.info("save ok")  | 
|     return  | 
|   | 
|   | 
| def checkDrFileNeedParseFunc(drFileName, *parseArgs, **kv):  | 
|     ''' 检查流向是否需要处理  | 
|     @param drFileName: 流向文件名  xxx_日期.txt  | 
|     @param *parseArgs: 自定义参数  | 
|     @return: isNeed, checkNeedParseRetInfo  | 
|     '''  | 
|     return True, None  | 
|   | 
|   | 
| def parseLineFunc(drName, dateStr, checkNeedParseRetInfo, line, *parseArgs, **kv):  | 
|     ''' 解析流向行内容  | 
|     @param drName: 流向名  | 
|     @param dateStr: 对应日期字符串  | 
|     @param checkNeedParseRetInfo: checkDrFileNeedParseFunc 返回的内容  | 
|     @param line: 本行内容  | 
|     @param *parseArgs: 自定义参数  | 
|     '''  | 
|   | 
|     loginoutDateAccIDInfo = parseArgs[0]  | 
|     # 统计登录  | 
|     if drName == "LogInOut":  | 
|         if "127.0.0.1" in line:  | 
|             #loginfo("    脱机登录,不处理")  | 
|             return  | 
|   | 
|         drDict = eval(line)  | 
|         accID = drDict["AccID"]  | 
|   | 
|         if dateStr not in loginoutDateAccIDInfo:  | 
|             loginoutDateAccIDInfo[dateStr] = {}  | 
|         accIDDict = loginoutDateAccIDInfo[dateStr]  | 
|         if accID not in accIDDict:  | 
|             accIDDict[accID] = ["", "", ""]  | 
|         loginoutList = accIDDict[accID]  | 
|   | 
|         if drDict["Type"] == "login":  | 
|             loginoutList[0] = drDict["LoginTime"]  | 
|         else:  | 
|             loginoutList[1] = drDict["LogoutTime"]  | 
|         loginoutList[2] = drDict["IP"]  | 
|   | 
|     return  | 
|   | 
|   | 
| def main():  | 
|     CommFunc.setdefaultencoding()  | 
|     mylog.InitMyLog(argvDict.get("eventType", ""))  | 
|     queryAccountLoginoutInfo(argvDict)  | 
|     return  | 
|   | 
|   | 
| if __name__ == "__main__":  | 
|     try:  | 
|         main()  | 
|     except:  | 
|         CommFunc.printExceptionError()  | 
|     os.system('pause')  |