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)