hxp
2025-06-04 f4a514d5ac952110da846636ecbb9de951eaf3d2
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
#!/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')