forked from p15670423/monkey
determine if new report needs to be generated pending on latest update time of monkey
This commit is contained in:
parent
04e7ca13e7
commit
12eeea68a4
|
@ -2,6 +2,7 @@ import logging
|
||||||
from monkey_island.cc.services.attack.technique_reports import T1210, T1197, T1110
|
from monkey_island.cc.services.attack.technique_reports import T1210, T1197, T1110
|
||||||
from monkey_island.cc.services.attack.attack_config import AttackConfig
|
from monkey_island.cc.services.attack.attack_config import AttackConfig
|
||||||
from monkey_island.cc.database import mongo
|
from monkey_island.cc.database import mongo
|
||||||
|
from monkey_island.cc.services.node import NodeService
|
||||||
|
|
||||||
__author__ = "VakarisZ"
|
__author__ = "VakarisZ"
|
||||||
|
|
||||||
|
@ -25,7 +26,13 @@ class AttackReportService:
|
||||||
Generates new report based on telemetries, replaces old report in db with new one.
|
Generates new report based on telemetries, replaces old report in db with new one.
|
||||||
:return: Report object
|
:return: Report object
|
||||||
"""
|
"""
|
||||||
report = {'techniques': {}, 'latest_telem_time': AttackReportService.get_latest_attack_telem_time(), 'name': REPORT_NAME}
|
report =\
|
||||||
|
{
|
||||||
|
'techniques': {},
|
||||||
|
'meta': {'latest_monkey_modifytime': NodeService.get_latest_modified_monkey()[0]['modifytime']},
|
||||||
|
'name': REPORT_NAME
|
||||||
|
}
|
||||||
|
|
||||||
for tech_id, value in AttackConfig.get_technique_values().items():
|
for tech_id, value in AttackConfig.get_technique_values().items():
|
||||||
if value:
|
if value:
|
||||||
try:
|
try:
|
||||||
|
@ -36,14 +43,6 @@ class AttackReportService:
|
||||||
mongo.db.attack_report.replace_one({'name': REPORT_NAME}, report, upsert=True)
|
mongo.db.attack_report.replace_one({'name': REPORT_NAME}, report, upsert=True)
|
||||||
return report
|
return report
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_latest_attack_telem_time():
|
|
||||||
"""
|
|
||||||
Gets timestamp of latest attack telem
|
|
||||||
:return: timestamp of latest attack telem
|
|
||||||
"""
|
|
||||||
return [x['timestamp'] for x in mongo.db.telemetry.find({'telem_catagory': 'attack'}).sort('timestamp', -1).limit(1)][0]
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_latest_report():
|
def get_latest_report():
|
||||||
"""
|
"""
|
||||||
|
@ -51,9 +50,10 @@ class AttackReportService:
|
||||||
:return: report dict.
|
:return: report dict.
|
||||||
"""
|
"""
|
||||||
if AttackReportService.is_report_generated():
|
if AttackReportService.is_report_generated():
|
||||||
telem_time = AttackReportService.get_latest_attack_telem_time()
|
monkey_modifytime = NodeService.get_latest_modified_monkey()[0]['modifytime']
|
||||||
latest_report = mongo.db.attack_report.find_one({'name': REPORT_NAME})
|
latest_report = mongo.db.attack_report.find_one({'name': REPORT_NAME})
|
||||||
if telem_time and latest_report['latest_telem_time'] and telem_time == latest_report['latest_telem_time']:
|
report_modifytime = latest_report['meta']['latest_monkey_modifytime']
|
||||||
|
if monkey_modifytime and report_modifytime and monkey_modifytime == report_modifytime:
|
||||||
return latest_report
|
return latest_report
|
||||||
return AttackReportService.generate_new_report()
|
return AttackReportService.generate_new_report()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue