Skip to content

Commit

Permalink
Use the new Config and Workers in Engine#initialize (closes #124).
Browse files Browse the repository at this point in the history
  • Loading branch information
postmodern committed May 26, 2024
1 parent b559fbb commit 7a2cb32
Showing 1 changed file with 56 additions and 21 deletions.
77 changes: 56 additions & 21 deletions lib/ronin/recon/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
# along with ronin-recon. If not, see <https://www.gnu.org/licenses/>.
#

require 'ronin/recon/config'
require 'ronin/recon/workers'
require 'ronin/recon/worker_tasks'
require 'ronin/recon/value_status'
require 'ronin/recon/graph'
Expand All @@ -29,7 +31,6 @@
require 'ronin/recon/message/job_failed'
require 'ronin/recon/message/value'
require 'ronin/recon/message/shutdown'
require 'ronin/recon/worker_set'

require 'set'
require 'console/logger'
Expand All @@ -43,6 +44,16 @@ module Recon
#
class Engine

# The configuration for the engine.
#
# @return [Config]
attr_reader :config

# The workers to use.
#
# @return [Workers]
attr_reader :workers

# The scope to constrain recon to.
#
# @return [Scope]
Expand Down Expand Up @@ -70,6 +81,20 @@ class Engine
#
# Initializes the recon engine.
#
# @param [Array<Value>] values
# The initial values to start the recon engine with.
#
# @param [String, nil] config_file
# The path to the configuration file.
#
# @param [Config, nil] config
# The configuration for the engine. If specified, it will override
# `config_file:`.
#
# @param [Workers, nil] workers
# The worker classes to use. If specified, it will override the workers
# specified in `config.worker_set`.
#
# @yield [self]
# If a block is given it will be passed the newly created engine.
#
Expand All @@ -81,34 +106,41 @@ class Engine
#
# @api public
#
def initialize(values, workers: WorkerSet.default,
max_depth: nil,
logger: Console.logger,
ignore: [])
@scope = Scope.new(values, ignore: ignore)

@worker_classes = {}
@worker_tasks = {}
@worker_task_count = 0

@value_status = ValueStatus.new
@graph = Graph.new
@max_depth = max_depth
@output_queue = Async::Queue.new
def initialize(values, ignore: [],
max_depth: nil,
config: nil,
config_file: nil,
workers: nil,
logger: Console.logger)
@config = if config then config
elsif config_file then Config.load_file(config_file)
else Config.default
end
@workers = workers || Workers.load(@config.worker_set)
@logger = logger

@scope = Scope.new(values, ignore: ignore)
@max_depth = max_depth

@value_callbacks = []
@connection_callbacks = []
@job_started_callbacks = []
@job_completed_callbacks = []
@job_failed_callbacks = []

@logger = logger
@value_status = ValueStatus.new
@graph = Graph.new
@output_queue = Async::Queue.new

yield self if block_given?

workers.each do |worker_class|
@worker_classes = {}
@worker_tasks = {}
@worker_task_count = 0

@workers.each do |worker_class|
add_worker(worker_class)
end

yield self if block_given?
end

#
Expand Down Expand Up @@ -159,8 +191,11 @@ def self.run(values,**kwargs,&block)
#
# @api private
#
def add_worker(worker_class, concurrency: worker_class.concurrency,
params: nil)
def add_worker(worker_class, concurrency: nil, params: nil)
concurrency ||= @config.workers[worker_class.id].concurrency ||
worker_class.concurrency
params ||= @config.workers[worker_class.id].params

worker = worker_class.new(params: params)
worker_tasks = WorkerTasks.new(worker, concurrency: concurrency,
output_queue: @output_queue,
Expand Down

0 comments on commit 7a2cb32

Please sign in to comment.