forked from p15670423/monkey
WIP - adding the environment collector as a plugin, still some work to do
This commit is contained in:
parent
718291d573
commit
723b5b47a5
|
@ -0,0 +1,3 @@
|
|||
ON_PREMISE = "On Premise"
|
||||
AZURE = "Azure"
|
||||
AWS = "AWS"
|
|
@ -0,0 +1,21 @@
|
|||
from common.cloud.aws_instance import AwsInstance
|
||||
from common.cloud.azure.azure_instance import AzureInstance
|
||||
from common.cloud.environment_names import ON_PREMISE, AZURE, AWS
|
||||
from infection_monkey.system_info.system_info_collector import SystemInfoCollector
|
||||
|
||||
|
||||
class EnvironmentCollector(SystemInfoCollector):
|
||||
def __init__(self):
|
||||
super(EnvironmentCollector, self).__init__(name="EnvironmentCollector")
|
||||
|
||||
def collect(self) -> dict:
|
||||
# Check if on any cloud env. Default is on prem.
|
||||
if AwsInstance().is_aws_instance():
|
||||
env = AWS
|
||||
elif AzureInstance().is_azure_instance():
|
||||
env = AZURE
|
||||
# TODO: elif GcpInstance().is_gcp_instance():
|
||||
else:
|
||||
env = ON_PREMISE
|
||||
|
||||
return {"environment": env}
|
|
@ -0,0 +1,30 @@
|
|||
from config import WormConfiguration
|
||||
from infection_monkey.utils.plugins.plugin import Plugin
|
||||
|
||||
|
||||
import infection_monkey.system_info.collectors
|
||||
|
||||
|
||||
class SystemInfoCollector(Plugin):
|
||||
def __init__(self, name="unknown"):
|
||||
self.name = name
|
||||
|
||||
@staticmethod
|
||||
def should_run(class_name) -> bool:
|
||||
return class_name in WormConfiguration.system_info_collectors
|
||||
|
||||
@staticmethod
|
||||
def base_package_file():
|
||||
return infection_monkey.system_info.collectors.__file__
|
||||
|
||||
@staticmethod
|
||||
def base_package_name():
|
||||
return infection_monkey.system_info.collectors.__package__
|
||||
|
||||
def collect(self) -> dict:
|
||||
"""
|
||||
Collect the relevant information and return it in a dictionary.
|
||||
To be implemented by each collector.
|
||||
TODO should this be an abstractmethod, or will that ruin the plugin system somehow? if can be abstract should add UT
|
||||
"""
|
||||
raise NotImplementedError()
|
|
@ -0,0 +1,34 @@
|
|||
import logging
|
||||
from typing import Sequence
|
||||
|
||||
from infection_monkey.system_info.system_info_collector import SystemInfoCollector
|
||||
from telemetry.system_info_telem import SystemInfoTelem
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
PATH_TO_COLLECTORS = "infection_monkey.system_info.collectors."
|
||||
|
||||
|
||||
# TODO Add new collectors to config and config schema
|
||||
class SystemInfo(object):
|
||||
def __init__(self):
|
||||
self.collectors_list = self.config_to_collectors_list()
|
||||
|
||||
def execute_all_configured(self):
|
||||
successful_collections = 0
|
||||
system_info_telemetry = {}
|
||||
for collector in self.collectors_list:
|
||||
try:
|
||||
LOG.debug("Executing system info collector: '{}'".format(collector.name))
|
||||
collected_info = collector.collect()
|
||||
system_info_telemetry[collector.name] = collected_info
|
||||
successful_collections += 1
|
||||
except Exception as e:
|
||||
LOG.error("Collector {} failed. Error info: {}".format(collector.name, e))
|
||||
LOG.info("All system info collectors executed. Total {} executed, out of which {} collected successfully.".
|
||||
format(len(self.collectors_list), successful_collections))
|
||||
# TODO Send SystemInfoTelem()
|
||||
|
||||
@staticmethod
|
||||
def config_to_collectors_list() -> Sequence[SystemInfoCollector]:
|
||||
return SystemInfoCollector.get_instances()
|
Loading…
Reference in New Issue