#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- # ##@package EventReport # # @todo:ʼþ»ã±¨ # @author hxp # @date 2015-1-14 # @version 1.9 # @Note£º EventReport_EventReportÓ÷¨ µÚÒ»¸ö²ÎÊý´«postÄÚÈÝurlencode£¬µÚ2,3,4²»Ó㻵ÚÎå¸ö²ÎÊý0´ú±íget£¬1Ϊpost£»µÚÁù¸ö²ÎÊýΪurl # # @change: "2015-01-28 22:30" hxp ¹Ø±Õʼþ»ã±¨ # @change: "2015-02-06 20:40" Alee ʼþ»ã±¨·¢ËÍÖÁºÏ·þÖ÷·þ # @change: "2015-06-08 20:30" hxp Ôö¼ÓchannelCode # @change: "2015-07-13 14:00" hxp Ôö¼ÓpidÐÅÏ¢ # @change: "2016-07-18 19:00" hxp 9377¶À´úʼþ»ã±¨°æ # @change: "2016-07-27 20:00" Alee Ð޸Ĵò¿ªÎļþ³¬Ê±¹Ø±Õ # @change: "2016-08-30 23:00" hxp ×Ô¶¨ÒåÔÚÏßÈËÊý; ÁÄÌì¼à¿Ø # @change: "2016-09-10 11:00" hxp ÁÄÌìÄÚÈÝÌæ»»»»ÐÐ # @change: "2017-07-01 15:30" hxp ƽ̨ÐÅÏ¢¸ÄΪ´ÓÍæ¼ÒÕ˺ÅÖÐÈ¡£¬Ö§³Ö»ì·þģʽ # @change: "2017-07-04 15:00" hxp Ôö¼Ó»ì·þģʽÏ¿ÉÇø·Ö¸÷ƽ̨×ÔÉíÇø·þºÏ·þºóµÄƽ̨Ö÷·þID # ÏêϸÃèÊö: ʼþ»ã±¨ # #--------------------------------------------------------------------- #"""Version = 2017-07-04 15:00""" #--------------------------------------------------------------------- import ReadChConfig import ShareDefine import GameWorld import datetime import random import time import md5 import os import re EventFilepath = "D:\\EventServer\\PythonScribe\\EventLog\\" g_wFileName = "" g_writeHandle = None # ²»¿ÉÖ±½Óµ÷Óà g_whStartTime = 0 # ´´½¨Îļþʱ¼ä Def_WriteTime = 2 # Îļþ³ÖÐøÐ´Èëʱ¼ä£º·ÖÖÓ def OnTimeCloseScribeTxt(): global g_whStartTime global g_writeHandle global g_wFileName try: if g_whStartTime == 0: return #Îļþ´´½¨³¬¹ý if time.time() - g_whStartTime < 60*(Def_WriteTime + 1): return if g_writeHandle == None: return g_writeHandle.close() g_wFileName = "" g_whStartTime = 0 except: GameWorld.ErrLog("OnTimeCloseScribeTxt ³ö´í") ## ³õʼ»¯Ê¼þ # @param None # @return ÎÞ·µ»ØÖµ def InitDllAppID(): appID = "mobile" key = "mobile" GameWorld.GetGameWorld().EventReport_SetEventReportParam(appID, key) GameWorld.Log("³õʼ»¯Ê¼þ±¨¸æ: appID=%s,key=%s OK!" % (appID, key)) return ## ʼþ±¨¸æ¼Ç¼ # @param eventActionID ʼþid # @param eventParam ʼþ²ÎÊý # @param curPlayer # @return None def EventReport(eventActionID, eventParam, curPlayer=None, OperatorID=""): # ×é³ÉÀý×Ó eventParam µÄ¸ñʽ±ØÐëÊÇ xx=yy&zz=cc # "http://192.168.0.249:12000/event_receiver?EventID=3099&OperatorID=test&PlayerCount=102&Time=2018-02-08 18:30:30&ProductID=snxxz&RegionName=s1" if not curPlayer and not OperatorID: return ProductID = ReadChConfig.GetPyMongoConfig("EventReport", "ProductID") ReportUrl = ReadChConfig.GetPyMongoConfig("EventReport", "ReportUrl") playerInfo = "" if curPlayer: playerInfo = "&AccountID=%s&IP=%s"%(GameWorld.GetPlatformAccID(curPlayer.GetAccID()), curPlayer.GetIP()) #======================================================================= # #UTF8 ÐèҪת³Éurl±àÂë²Å¿ÉÓà # playerInfo = urllib.urlencode({"RoleID": curPlayer.GetName(), # "AccountID": GameWorld.GetPlatformAccID(curPlayer.GetAccID()), # "IP": curPlayer.GetIP(), # "Level": curPlayer.GetLV()}) #======================================================================= OperatorID = GameWorld.GetPlayerPlatform(curPlayer) RegionName = GameWorld.GetPlayerServerSID(curPlayer) else: # ºÏ·þÇé¿ö£¬Íæ¼ÒÈ¡×Ô¼º·þ·¢ËÍ£¬·ÇÍæ¼ÒÊý¾Ý°´Ö¸¶¨Æ½Ì¨ÅäÖ÷¢ sid = GameWorld.GetPlayerMainServerID(OperatorID) if not sid: GameWorld.ErrLog("GetPlayerMainServerID: %s-%s"%(OperatorID, sid)) return RegionName = 's%s'%sid getUrl = "%s?ProductID=%s&OperatorID=%s&RegionName=%s&EventID=%s%s&Time=%s&%s"%(\ ReportUrl, ProductID, OperatorID, RegionName, eventActionID, playerInfo, str(datetime.datetime.today()).split('.')[0], eventParam) GameWorld.DebugLog("EventReport: %s"%getUrl) # µÚÎå¸ö²ÎÊý0´ú±íget·¢ËÍ 1´ú±ípost GameWorld.GetGameWorld().EventReport_EventReport("", "", "", "", 0, getUrl) return ## дʼþ±¨¸æÎļþ # @param eventClass # @return None def WriteEvent(eventClass): if GameWorld.IsCrossServer(): return if eventClass.GetScribeEventName() not in ReadChConfig.GetEvalChConfig("EventReportID"): return try: if not os.path.isdir(EventFilepath): os.makedirs(EventFilepath) #³¢ÊÔдµ½Í¬Ò»¸öÎļþµ«ÊÇwindow »áÓÐbug£¬Ö»Äܸ÷×Ô³ÌÐò·Ö¿ªÐ´Èë fp_w = GetWriteIO() fp_w.write("%s\t%s\n"%(eventClass.GetScribeEventName(), eventClass.GetCurEventStr())) fp_w.flush() except: GameWorld.ErrLog("scribeʼþдÈë³ö´í¡£") return # ·ÖÖÓ×¼µãУ׼ def FixTime(): curTime = datetime.datetime.today() curTime = curTime + datetime.timedelta(minutes=Def_WriteTime-curTime.minute%Def_WriteTime) tmp = str(curTime).split(".")[0][:-3].replace(':', '-') return tmp.replace(" ", "_") def GetLogFileName(fileStr): sessionid = md5.md5(str(random.random()) + str(time.time())).hexdigest() return EventFilepath + sessionid + fileStr + '.log' def GetWriteIO(): global g_wFileName global g_writeHandle global g_whStartTime fileTime = FixTime() if g_wFileName and fileTime in g_wFileName: #µ±Ç°ÎļþÖ±½Ó·µ»Ø return g_writeHandle curFileName = GetLogFileName(fileTime) if g_writeHandle != None: #¹Ø±Õ¾ÉÎļþ g_writeHandle.close() g_wFileName = curFileName g_writeHandle = open(g_wFileName, 'a+') g_whStartTime = time.time() return g_writeHandle # ÿ¸ö×ֶζ¼Ó¦¸ÃתΪ×Ö·û´®£¬²»È»join»á±¨´í class ScribeEvent(object): def __init__(self): #±ØÐë×Ö¶Î self.product_slug = 'yhlz' # ÓÎÏ·±êÖ¾ self.agent_name = ReadChConfig.GetPyMongoConfig("platform", "PlatformName") # ƽ̨±êÖ¾ self.gameserver_no = ReadChConfig.GetPyMongoConfig("platform", "ServerID")[1:] # Çø·þ self.time = "" #GameWorld.GetCurrentDataTimeStr() def SetEventAgentInfo(self, accIDPlatform): # ÉèÖôúÀíÔËÓªÉÌÐÅÏ¢ # @param accIDPlatform: ÕâÀïÈ¡Õ˺ÅËùÊôƽ̨£¬Ö§³Ö»ì·þ, Èç¹ûÈ¡²»µ½£¬ÔòÓÃĬÈÏÅäÖõÄÔËÓªÉÌÐÅÏ¢ if not accIDPlatform: return self.agent_name = accIDPlatform self.gameserver_no = str(GameWorld.GetPlayerMainServerID(self.agent_name)) return #¼´Ê¹ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"' #±ÜÃâÐ޸ĸñʽµÄÇé¿ö£¬ÕâÀïͳһÐ޸ļ´¿É def GetEventStr(self, tmpList): return '\"%s\"'%'","'.join(tmpList) # ÔÚÏßÈËÊý class concurrency(ScribeEvent): def __init__(self): #±ØÐë×Ö¶Î super(concurrency, self).__init__() self.concurrency = 0 # ÔÚÏßÈËÊý #·Ç±ØÐë×Ö¶Î #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"' def GetCurEventStr(self): if not self.time: self.time = GameWorld.GetCurrentDataTimeStr() tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.time, str(self.concurrency)] return super(concurrency, self).GetEventStr(tmpList) def GetScribeEventName(self): return ShareDefine.Def_UserAction_KeepOnline # 3.3.15. custom©\concurrency£¨Õû5·ÖÖÓ·Ö·þÇø×Ô¶¨ÒåÔÚÏßÍæ¼ÒÈËÊý£© # ÓÃÓÚ×Ô¶¨ÒåÍæ¼ÒÔÚÏßÈËÊýÏà¹ØÍ³¼Æ£¬ÊÕ¼¯ÐèÒªµ¥¶Àͳ¼ÆµÄ×Ô¶¨ÒåÀàÐ͵ÄÔÚÏßÊý¾Ý¡£ class custom_concurrency(ScribeEvent): def __init__(self): #±ØÐë×Ö¶Î super(custom_concurrency, self).__init__() self.concurrency = 0 # ÔÚÏßÈËÊý self.type_name = "" # ×Ô¶¨ÒåÀàÐÍ #·Ç±ØÐë×Ö¶Î #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"' return def GetCurEventStr(self): if not self.time: self.time = GameWorld.GetCurrentDataTimeStr() tmpList = [self.product_slug, self.agent_name, self.gameserver_no, self.time, str(self.concurrency), self.type_name] return super(custom_concurrency, self).GetEventStr(tmpList) def GetScribeEventName(self): return ShareDefine.Def_UserAction_CustomConcurrency # 3.3.9. custom-events£¨×Ô¶¨Òåʼþ£© # ÓÃÓÚͳ¼ÆÈÎºÎÆÚÍûÈ¥¸ú×ÙµÄÊý¾Ý class custom_events(ScribeEvent): def __init__(self): #±ØÐë×Ö¶Î super(custom_events, self).__init__() self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä self.event_name = "" # ʼþÃû³Æ self.session_id = "" # »á»°ID #·Ç±ØÐë×Ö¶Î self.ip = "" # IP µØÖ· self.account_name = "" # Õ˺ŵǼÃû self.account_type = 0 # Õ˺ÅÀàÐÍ self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶ self.comments = "" # ±¸×¢»ò¸½¼ÓÐÅÏ¢ char(255) #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"' return def GetCurEventStr(self): if not self.time: self.time = GameWorld.GetCurrentDataTimeStr() tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name, str(self.account_type), self.time, self.chr_name, str(self.chr_level), self.event_name, self.comments, self.session_id] return super(custom_events, self).GetEventStr(tmpList) def GetScribeEventName(self): return ShareDefine.Def_UserAction_CustomEvents # 3.3.13. chat-log £¨ÁÄÌìÏûÏ¢£© # ÓÃÓÚ¼à¿ØÍæ¼ÒÁÄÌì class chat_log(ScribeEvent): def __init__(self): #±ØÐë×Ö¶Î super(chat_log, self).__init__() self.account_id = "" # Õ˺ŠID£¬Æ½Ì¨ÏÂΨһ£¬ÇÒÖÕÉú²»±ä self.chr_name = "" # Íæ¼Ò½ÇÉ«Ãû self.content = "" # ÁÄÌìÄÚÈÝ self.cmc_name = "" # ÁÄÌìÆµµÀ±êʶ #·Ç±ØÐë×Ö¶Î self.ip = "" # IP µØÖ· self.account_name = "" # Õ˺ŵǼÃû self.account_type = 0 # Õ˺ÅÀàÐÍ self.chr_level = 0 # Íæ¼Ò½ÇÉ«µÈ¼¶ self.object = "" # ˽ÁĶÔÏó self.addinfo = "" # ¶îÍâÐÅÏ¢ #¼´Ê±ÊǷDZØÐë×Ö¶ÎÒ²Ó¦¸Ã´«ËÍ£¬¸÷×Ö¶ÎÓÃ,·Ö¸ô£¬²¢ÇÒÓÃË«ÒýºÅ°üº¬£¬²Î¿¼¸ñʽ'"1","","","12314"' return def GetCurEventStr(self): if not self.time: self.time = GameWorld.GetCurrentDataTimeStr() tmpList = [self.product_slug, self.agent_name, self.ip, self.gameserver_no, self.account_id, self.account_name, str(self.account_type), self.time, self.chr_name, str(self.chr_level), self.object, self.content, self.addinfo, self.cmc_name] return super(chat_log, self).GetEventStr(tmpList) def GetScribeEventName(self): return ShareDefine.Def_UserAction_ChatLog ## ================================================================================================= ## ÔÚÏß def WriteEvent_concurrency(activePlayerCount, tjgOnlineCnt, OperatorID): # Ö»´«ÕæÊµÍæ¼Ò£¬Èúǫ́ÏÔÊ¾ÕæÊµÔÚÏßÍæ¼Ò realPlayer = activePlayerCount-tjgOnlineCnt EventReport(ShareDefine.Def_UserAction_KeepOnline, "PlayerCount=%s&TotalPlayerCount=%s"%(realPlayer, realPlayer), None, OperatorID) return ## ×Ô¶¨ÒåÔÚÏß def WriteEvent_custom_concurrency(platform, concurrency, type_name): customConcurrency = custom_concurrency() customConcurrency.SetEventAgentInfo(platform) customConcurrency.concurrency = concurrency customConcurrency.type_name = type_name WriteEvent(customConcurrency) return def WriteEvent_chat_log(curPlayer, content, cmc_name, tagName="", addinfo=""): return #=========================================================================== # ''' # @todo: дÁÄÌì¼à¿Ø¼Ç¼ # @param content: ÁÄÌìÄÚÈÝ # @param cmc_name: ÁÄÌìÆµµÀ±êʶ # @param tagName: ˽ÁĶÔÏó # @param addinfo: ¶îÍâÐÅÏ¢ # ''' # # chatlogEvent = chat_log() # chatlogEvent.SetEventAgentInfo(GameWorld.GetPlayerPlatform(curPlayer)) # chatlogEvent.account_id = GameWorld.GetPlatformAccID(curPlayer.GetAccID()) # chatlogEvent.chr_name = curPlayer.GetName() # chatlogEvent.content = __GetEventChatContent(content) # chatlogEvent.cmc_name = cmc_name # chatlogEvent.ip = curPlayer.GetIP() # chatlogEvent.account_name = chatlogEvent.account_id # chatlogEvent.account_type = 0 # chatlogEvent.chr_level = 0 # chatlogEvent.object = tagName # chatlogEvent.addinfo = addinfo # WriteEvent(chatlogEvent) # return #=========================================================================== def __GetEventChatContent(content): ''' [µØÍ¼:ĺ¹âÖ®³Ç(74,60)] [ÉñÊ¥µÄ°ÁÊÀÖ®¹­ +40] ''' tempMatch = re.search(".*?", content) if tempMatch: tempStr = tempMatch.group() markIndex = tempStr.index(">") + 1 repStr = tempStr[markIndex:tempStr.index("<", markIndex)] content = content.replace(tempStr, repStr) tempMatch = re.search(".*?", content) if tempMatch: tempStr = tempMatch.group() markIndex = tempStr.index(">") + 1 repStr = tempStr[markIndex:tempStr.index("<", markIndex)] content = content.replace(tempStr, repStr) # Ìæ»»»»ÐÐ content = content.replace("\r", "") content = content.replace("\n", "") return content