#!/usr/bin/python
|
# -*- coding: utf-8 -*-
|
# @todo: 在线人数统计
|
|
import CommFunc
|
import ConfigParser
|
import logging
|
import mylog
|
import json
|
|
cfg = ConfigParser.ConfigParser()
|
cfg.read("../../InterfaceConfig.php")
|
|
# 需要处理的流向名及顺序列表
|
DRNameList = ["OnLinePlayerCount"]
|
|
def queryOnlinePlayerInfo(argvDict):
|
logging.info("queryOnlinePlayerInfo %s" % str(argvDict))
|
startDate = argvDict.get("startDate", "")
|
endDate = argvDict.get("endDate", "")
|
|
# 查询中心备份的
|
if CommFunc.isQueryCenterbak(argvDict):
|
queryCenterBak_OnlinePlayerInfo(startDate, endDate, argvDict)
|
return
|
|
drInfo = {}
|
needQueryCenterbak = CommFunc.loopMainServerDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc_OnlinePlayerInfo,
|
parseLineFunc_OnlinePlayerInfo, drInfo, drNameList=DRNameList)
|
logging.info("needQueryCenterbak=%s" % needQueryCenterbak)
|
if needQueryCenterbak:
|
bakDataInfo = CommFunc.queryBackupCenterDR(cfg, argvDict)
|
if bakDataInfo != None:
|
# 合并数据
|
drInfo.update(bakDataInfo)
|
|
ret = {"OK":1, "DRData":drInfo}
|
|
#logging.info("ret:%s" % ret)
|
print json.dumps(ret, ensure_ascii=False, default=lambda obj: obj.__dict__)
|
return
|
|
def queryCenterBak_OnlinePlayerInfo(startDate, endDate, argvDict):
|
drInfo = {}
|
|
if not CommFunc.loopCenterbakRarDR(cfg, startDate, endDate, argvDict, checkDrFileNeedParseFunc_OnlinePlayerInfo,
|
parseLineFunc_OnlinePlayerInfo, drInfo, drNameList=DRNameList):
|
return
|
|
return CommFunc.queryBackupCenterOK(drInfo)
|
|
def checkDrFileNeedParseFunc_OnlinePlayerInfo(drFileName, *parseArgs, **kv):
|
''' 检查流向是否需要处理
|
@param drFileName: 流向文件名 xxx_日期.txt
|
@param *parseArgs: 自定义参数
|
@return: isNeed, checkNeedParseRetInfo
|
'''
|
isNeed = True # 指定了DRNameList,这里默认True即可
|
return isNeed, None
|
|
def parseLineFunc_OnlinePlayerInfo(drName, dateStr, checkNeedParseRetInfo, line, *parseArgs, **kv):
|
''' 解析流向行内容
|
@param drName: 流向名
|
@param dateStr: 对应日期字符串
|
@param checkNeedParseRetInfo: checkDrFileNeedParseFunc 返回的内容
|
@param line: 本行内容
|
@param *parseArgs: 自定义参数
|
'''
|
|
drInfo = parseArgs[0]
|
|
drDict = eval(line)
|
|
# 统计在线
|
if drName == "OnLinePlayerCount":
|
#{'OnLinePlayerCount': 2, 'tjgOnlineCnt': 28, 'platformOLDict': 'qkbtgame', 'time': '2021-01-01 00:00:46'} 按平台记录
|
# ...
|
#{'OnLinePlayerCount': 30, 'tjgOnlineCnt': 28, 'platformOLDict': {}, 'time': '2021-01-01 00:00:46'} 最后一条汇总
|
if drDict["platformOLDict"] != {}:
|
# 暂只处理汇总的信息
|
return
|
drTime = drDict["time"]
|
drOnlineCount = drDict["OnLinePlayerCount"]
|
drTjCount = drDict["tjgOnlineCnt"]
|
|
drTime = drTime[:-2] + "00" # 秒数默认设置为0,确保所有服务器记录的时间点统一,不然可能有秒数的时间误差
|
realOnlineCount = drOnlineCount - drTjCount # 实际在线
|
|
dateStr = drTime[:10]
|
if dateStr not in drInfo:
|
drInfo[dateStr] = {}
|
drInfo[dateStr][drTime[11:16]] = realOnlineCount
|
|
return
|
|
def main():
|
CommFunc.setdefaultencoding()
|
argvDict = CommFunc.parse_args()
|
mylog.InitMyLog(argvDict.get("eventType", ""))
|
queryOnlinePlayerInfo(argvDict)
|
return
|
|
if __name__ == "__main__":
|
try:
|
main()
|
except:
|
CommFunc.printExceptionError()
|