NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

infoGatheringSvc.py (5279B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\client\script\sys\infoGatheringSvc.py
      2 import copy
      3 import sys
      4 from functools import partial
      5 import blue
      6 import log
      7 import uthread
      8 from carbon.common.lib.const import INFOSERVICE_OFFLINE, INFOTYPE_OFFLINE
      9 from carbon.common.script.sys.service import Service
     10 from carbon.common.script.sys.serviceConst import SERVICE_RUNNING
     11 from carbon.common.script.util import igsUtil
     12 
     13 class InformationGatheringSvc(Service):
     14     __guid__ = 'svc.infoGatheringSvc'
     15     serviceName = 'svc.infoGatheringSvc'
     16     __exportedcalls__ = {'LogInfoEvent': [],
     17      'GetEventIGSHandle': []}
     18     __dependencies__ = ['machoNet']
     19 
     20     def __init__(self):
     21         Service.__init__(self)
     22         self.isEnabled = None
     23         self.serverEvents = set()
     24         self.serverOncePerRunEvents = set()
     25         self.infoTypeParameters = set()
     26         self.logTypeAggregates = {}
     27         self.isEnabled = 0
     28         self.loggedEvents = {}
     29         self.loggedEventsEmpty = {}
     30         self.aggregateDict = {}
     31         self.clientWorkerInterval = 0
     32 
     33     def Run(self, memStream = None):
     34         stateAndConfig = sm.RemoteSvc('infoGatheringMgr').GetStateAndConfig()
     35         self.isEnabled = stateAndConfig.isEnabled
     36         self.serverEvents = stateAndConfig.infoTypes
     37         self.clientWorkerInterval = stateAndConfig.clientWorkerInterval
     38         self.serverOncePerRunEvents = stateAndConfig.infoTypesOncePerRun
     39         self.logTypeAggregates = stateAndConfig.infoTypeAggregates
     40         self.infoTypeParameters = stateAndConfig.infoTypeParameters
     41         self.loggedEvents = {}
     42         if self.isEnabled and self.clientWorkerInterval > 0:
     43             self.SendInfoWorkerThread = uthread.new(self.SendInfoWorker)
     44         self.state = SERVICE_RUNNING
     45 
     46     def GetEventIGSHandle(self, eventTypeID, **keywords):
     47         return partial(self.LogInfoEvent, eventTypeID=eventTypeID, **keywords)
     48 
     49     def LogInfoEvent(self, eventTypeID, itemID = None, itemID2 = None, int_1 = None, int_2 = None, int_3 = None, char_1 = None, char_2 = None, char_3 = None, float_1 = None, float_2 = None, float_3 = None):
     50         try:
     51             if eventTypeID in self.serverEvents:
     52                 if eventTypeID in self.serverOncePerRunEvents:
     53                     self.serverOncePerRunEvents.remove(eventTypeID)
     54                     self.serverEvents.remove(eventTypeID)
     55                 if eventTypeID not in self.loggedEvents:
     56                     if eventTypeID in self.logTypeAggregates:
     57                         self.aggregateDict[eventTypeID] = {}
     58                     self.loggedEvents[eventTypeID] = []
     59                 if eventTypeID in self.logTypeAggregates:
     60                     if itemID2 is not None:
     61                         itemID2 = long(itemID2)
     62                     ln = [blue.os.GetWallclockTime(),
     63                      long(itemID),
     64                      itemID2,
     65                      int_1,
     66                      int_2,
     67                      int_3,
     68                      char_1,
     69                      char_2,
     70                      char_3,
     71                      float_1,
     72                      float_2,
     73                      float_3]
     74                     valueIx = self.infoTypeParameters[eventTypeID].difference(self.logTypeAggregates[eventTypeID])
     75                     igsUtil.AggregateEvent(eventTypeID, ln, self.loggedEvents, self.aggregateDict[eventTypeID], self.logTypeAggregates[eventTypeID], valueIx)
     76                 else:
     77                     self.loggedEvents[eventTypeID].append([blue.os.GetWallclockTime(),
     78                      itemID,
     79                      itemID2,
     80                      int_1,
     81                      int_2,
     82                      int_3,
     83                      char_1,
     84                      char_2,
     85                      char_3,
     86                      float_1,
     87                      float_2,
     88                      float_3])
     89         except Exception:
     90             log.LogException('Error logging IGS information')
     91             sys.exc_clear()
     92 
     93     def SendInfoWorker(self):
     94         while self.isEnabled:
     95             try:
     96                 self.SendInfo()
     97             except Exception:
     98                 log.LogException('Error while shipping data to server...')
     99                 sys.exc_clear()
    100 
    101             blue.pyos.synchro.SleepWallclock(self.clientWorkerInterval)
    102 
    103     def SendInfo(self):
    104         eventsToSend = copy.deepcopy(self.loggedEvents)
    105         self.loggedEvents = {}
    106         if len(eventsToSend):
    107             self.LogInfo('Information Gatherer is shipping collected data over the wire... Interval = %d milliseconds.' % self.clientWorkerInterval)
    108             ret = sm.RemoteSvc('infoGatheringMgr').LogInfoEventsFromClient(eventsToSend)
    109             for eventTypeID, status in ret.iteritems():
    110                 if status == INFOSERVICE_OFFLINE:
    111                     self.isEnabled = 0
    112                     break
    113                 elif status == INFOTYPE_OFFLINE:
    114                     self.serverEvents.remove(eventTypeID)
    115                     self.infoTypeParameters.remove(eventTypeID)
    116                     if eventTypeID in self.serverOncePerRunEvents:
    117                         self.serverOncePerRunEvents.remove(eventTypeID)
    118                     if eventTypeID in self.logTypeAggregates:
    119                         self.logTypeAggregates.remove(eventTypeID)