def setUp(self): self._logger = MagicMock() self._cookie_jar = MagicMock() self._composite_methods = dict() # type: Dict[str, MagicMock] for method_name in CookieJar.__abstractmethods__: method = getattr(self._cookie_jar, method_name) self._composite_methods[method_name] = method add_cookie_jar_logging(self._cookie_jar, self._logger)
def run(config_location): # Load config config = load_config(os.path.join(config_location, "setup.conf")) # Setup measurement logging logging_buffer_latency = timedelta(seconds=config.influxdb.buffer_latency) influxdb_config = InfluxDBConnectionConfig(config.influxdb.host, config.influxdb.port, config.influxdb.username, config.influxdb.password, config.influxdb.database) logger = InfluxDBLogger(influxdb_config, buffer_latency=logging_buffer_latency) # Set HTTP(S) connection pool size (for CouchDB) # NOTE This is taken from an environment variable, as it's not # something that would probably need tweaking that much: pool_size = int(os.environ.get('COOKIEMONSTER_POOL_SIZE', 16)) patch_connection_pools(maxsize=pool_size) # Setup cookie jar cookie_jar = RateLimitedBiscuitTin(config.cookie_jar.max_requests_per_second, config.cookie_jar.url, config.cookie_jar.database, config.cookie_jar.buffer_capacity, config.cookie_jar.buffer_latency, verify=config.cookie_jar.cacert) add_cookie_jar_logging(cookie_jar, logger) add_couchdb_logging(cookie_jar, logger) # Setup data retrieval manager update_mapper = BatonUpdateMapper(config.baton.binaries_location, zone=config.baton.zone) retrieval_manager = PeriodicRetrievalManager(config.retrieval.period, update_mapper, logger) # # Setup basic Slack client # slack = BasicSlackClient(config.slack.token, config.slack.default_channel, config.slack.default_username) slack = None # Setup rule output log file writer rule_log_writer = RuleOutputWriter(config.output.log_file) # # Setup basic message queue (e.g. RabbitMQ) client # message_queue = BasicMessageQueue(config.message_queue.host, config.message_queue.port, # config.message_queue.username, config.message_queue.password) message_queue = None # Define the context that rules and enrichment loaders has access to context = HgiContext(cookie_jar, config, rule_log_writer, slack, message_queue) # Setup rules source rules_source = RuleSource(config.processing.rules_location, context) rules_source.start() # Setup enrichment loader source enrichment_loader_source = EnrichmentLoaderSource(config.processing.enrichment_loaders_location, context) enrichment_loader_source.start() # Setup the data processor manager processor_manager = BasicProcessorManager(cookie_jar, rules_source, enrichment_loader_source, config.processing.max_threads, logger) # Connect components to the cookie jar _connect_retrieval_manager_to_cookie_jar(retrieval_manager, cookie_jar, config.cookie_jar.max_requests_per_second, logger) _connect_retrieval_manager_to_since_file(retrieval_manager, config_location) _connect_processor_manager_to_cookie_jar(processor_manager, cookie_jar) # Setup the HTTP API api = HTTP_API() api.inject(APIDependency.CookieJar, cookie_jar) api.inject(APIDependency.System, None) api.listen(config.api.port) # Start the retrieval manager from the last known successful # retrieval time (or invocation time, otherwise) try: with open(os.path.join(config_location, "since"), "r") as f: since_time = datetime.fromtimestamp(int(f.read())) except: since_time = datetime.now() retrieval_manager.start(since_time) # Start processing of any unprocessed cookies processor_manager.process_any_cookies() # Setup monitors ThreadsMonitor(logger, logging_buffer_latency).start() CookieJarMonitor(logger, logging_buffer_latency, cookie_jar).start()
def run(config_location): # Load config config = load_config(config_location) # Setup measurement logging logging_buffer_latency = timedelta(seconds=config.influxdb.buffer_latency) influxdb_config = InfluxDBConnectionConfig(config.influxdb.host, config.influxdb.port, config.influxdb.username, config.influxdb.password, config.influxdb.database) logger = InfluxDBLogger(influxdb_config, buffer_latency=logging_buffer_latency) # Set HTTP connection pool size (for CouchDB) # NOTE This is taken from an environment variable, as it's not # something that would probably need tweaking that much: pool_size = int(environ.get('COOKIEMONSTER_HTTP_POOL_SIZE', 16)) patch_http_connection_pool(maxsize=pool_size) # Setup cookie jar cookie_jar = RateLimitedBiscuitTin(config.cookie_jar.max_requests_per_second, config.cookie_jar.url, config.cookie_jar.database) add_cookie_jar_logging(cookie_jar, logger) # Setup data retrieval manager update_mapper = BatonUpdateMapper(config.baton.binaries_location, zone=config.baton.zone) retrieval_manager = PeriodicRetrievalManager(config.retrieval.period, update_mapper, logger) # # Setup basic Slack client # slack = BasicSlackClient(config.slack.token, config.slack.default_channel, config.slack.default_username) # # # Setup basic message queue (e.g. RabbitMQ) client # message_queue = BasicMessageQueue(config.message_queue.host, config.message_queue.port, # config.message_queue.username, config.message_queue.password) slack = message_queue = None # Define the context that rules and enrichment loaders has access to context = HgiContext(cookie_jar, config, slack, message_queue) # Setup rules source rules_source = RuleSource(config.processing.rules_location, context) rules_source.start() # Setup enrichment loader source enrichment_loader_source = EnrichmentLoaderSource(config.processing.enrichment_loaders_location, context) enrichment_loader_source.start() # Setup the data processor manager processor_manager = BasicProcessorManager(cookie_jar, rules_source, enrichment_loader_source, config.processing.max_threads, logger) # Connect components to the cookie jar _connect_retrieval_manager_to_cookie_jar(retrieval_manager, cookie_jar, config.cookie_jar.max_requests_per_second, logger) _connect_processor_manager_to_cookie_jar(processor_manager, cookie_jar) # Setup the HTTP API api = HTTP_API() api.inject(APIDependency.CookieJar, cookie_jar) api.listen(config.api.port) # Start the retrieval manager retrieval_manager.start(config.retrieval.since) # Start processing of any unprocessed cookies processor_manager.process_any_cookies() # Setup monitors ThreadsMonitor(logger, logging_buffer_latency).start() CookieJarMonitor(logger, logging_buffer_latency, cookie_jar).start()