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

scanHandler.py (5188B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\probescanning\scanHandler.py
      2 from __future__ import absolute_import
      3 import logging
      4 from collections import namedtuple
      5 from carbon.client.script.environment.AudioUtil import PlaySound, SetSoundParameter
      6 from probescanning.const import probeResultPerfect, probeStateIdle, probeScanGroupAnomalies, COMBAT_TARGETS
      7 from .results import ResultsHistory
      8 CurrentScan = namedtuple('CurrentScan', ['startTime', 'duration', 'probeIDs'])
      9 
     10 class ScanHandler(object):
     11 
     12     def __init__(self, scanSvc, resultFilter):
     13         self.logger = logging.getLogger('probescanning-scanHandler')
     14         self.currentScan = None
     15         self.resultsIgnored = set()
     16         self.resultsHistory = ResultsHistory()
     17         self.resultFilter = resultFilter
     18         self.scanningProbes = None
     19         self.scanSvc = scanSvc
     20         self.ScatterEvent = sm.ScatterEvent
     21 
     22     def OnSystemScanStarted(self, startTime, durationMs, probes):
     23         self.logger.debug('OnSystemScanStarted. startTime = %s, durationMs = %s', startTime, durationMs)
     24         self.currentScan = CurrentScan(startTime=startTime, duration=durationMs, probeIDs=self.scanSvc.SetProbesAsScanning(probes))
     25 
     26     def PlayResultSound(self, results):
     27         if results:
     28             certainty = max((result.certainty for result in results))
     29         else:
     30             certainty = 0.0
     31         SetSoundParameter('msg_newscan_probe_scan_results_rtpc', certainty)
     32         PlaySound('msg_newscan_probe_scan_results_play')
     33 
     34     def HasPerfectResults(self, results):
     35         return results and any((result.certainty >= probeResultPerfect for result in results))
     36 
     37     def OnSystemScanStopped(self, probes, results, absentTargets):
     38         self.logger.debug('OnSystemScanStopped probes = %s, results = %s', probes, results)
     39         for pID in probes:
     40             self.scanSvc.UpdateProbeState(pID, probeStateIdle, 'OnSystemScanStopped', notify=False)
     41 
     42         self.StopScanning()
     43         self.resultsHistory.RegisterResults(results)
     44         self.PlayResultSound(results)
     45         if self.HasPerfectResults(results):
     46             self.ScatterEvent('OnClientEvent_PerfectScanResultReached', results)
     47         if absentTargets:
     48             self.ClearResults(*absentTargets)
     49 
     50     def InjectResults(self, results, force = False):
     51         self.resultsHistory.RegisterResults(results, incrementScanNumber=False, force=force)
     52         self.ScatterEvent('OnRefreshScanResults')
     53 
     54     def GetCurrentScan(self):
     55         return self.currentScan
     56 
     57     def ClearResults(self, *targets):
     58         for targetID in targets:
     59             if targetID in self.resultsIgnored:
     60                 self.resultsIgnored.remove(targetID)
     61 
     62         self.resultsHistory.ClearResults(*targets)
     63         self.ScatterEvent('OnRefreshScanResults')
     64 
     65     def IgnoreOtherResults(self, *targets):
     66         for result in self.resultsHistory.LastResultIterator():
     67             if result['id'] not in targets:
     68                 self.resultsIgnored.add(result['id'])
     69 
     70         self.ScatterEvent('OnRefreshScanResults')
     71 
     72     def ShowIgnoredResult(self, targetID):
     73         if targetID in self.resultsIgnored:
     74             self.resultsIgnored.remove(targetID)
     75             self.ScatterEvent('OnRefreshScanResults')
     76 
     77     def ClearIgnoredResults(self):
     78         self.resultsIgnored = set()
     79         self.ScatterEvent('OnRefreshScanResults')
     80 
     81     def IgnoreResult(self, *targets):
     82         for targetID in targets:
     83             self.resultsIgnored.add(targetID)
     84 
     85         self.ScatterEvent('OnRefreshScanResults')
     86 
     87     def GetScanResults(self):
     88         return self.resultsHistory.GetLastResults()
     89 
     90     def SetProbesAsScanning(self, probeIDs):
     91         self.scanningProbes = probeIDs
     92 
     93     def StopScanning(self):
     94         self.currentScan = None
     95         self.scanningProbes = None
     96 
     97     def GetScanningProbes(self):
     98         return self.scanningProbes
     99 
    100     def IsScanning(self):
    101         return bool(self.scanningProbes)
    102 
    103     def GetIgnoredResults(self):
    104         return self.resultsIgnored
    105 
    106     def GetResultsHistory(self):
    107         return self.resultsHistory
    108 
    109     def ClearCombatTargets(self):
    110         combat_targets = []
    111         for result in self.resultsHistory.LastResultIterator():
    112             if result['scanGroupID'] in COMBAT_TARGETS:
    113                 combat_targets.append(result['id'])
    114 
    115         self.ClearResults(*combat_targets)
    116 
    117     def GetResults(self, applyFiltering = True):
    118         ignored = 0
    119         filtered = 0
    120         anomaliesFiltered = 0
    121         results = []
    122         for result in self.resultsHistory.LastResultIterator():
    123             if applyFiltering:
    124                 if result['id'] in self.resultsIgnored:
    125                     ignored += 1
    126                     continue
    127                 if result['scanGroupID'] == probeScanGroupAnomalies:
    128                     if not self.resultFilter.IsShowingAnomalies():
    129                         anomaliesFiltered += 1
    130                         continue
    131                 elif self.resultFilter.IsFilteredOut(result):
    132                     filtered += 1
    133                     continue
    134             results.append(result)
    135 
    136         return (results,
    137          ignored,
    138          filtered,
    139          anomaliesFiltered)