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