class TopologicalInventory::Providers::Common::Operations::Processor

Attributes

identity[RW]
message[RW]
method[RW]
metrics[RW]
model[RW]
params[RW]

Public Class Methods

new(message, metrics) click to toggle source
# File lib/topological_inventory/providers/common/operations/processor.rb, line 18
def initialize(message, metrics)
  self.message            = message
  self.metrics            = metrics
  self.model, self.method = message.message.split(".")

  self.params   = message.payload["params"]
  self.identity = message.payload["request_context"]
end
process!(message, metrics) click to toggle source
# File lib/topological_inventory/providers/common/operations/processor.rb, line 14
def self.process!(message, metrics)
  new(message, metrics).process
end

Public Instance Methods

process() click to toggle source
# File lib/topological_inventory/providers/common/operations/processor.rb, line 27
def process
  logger.info(status_log_msg)
  impl = operation_class&.new(params, identity, metrics)
  if impl&.respond_to?(method)
    with_time_measure do
      result = impl.send(method)

      logger.info(status_log_msg("Complete"))
      result
    end
  else
    logger.warn(status_log_msg("Not Implemented!"))
    complete_task("not implemented") if params["task_id"]
    operation_status[:not_implemented]
  end
rescue StandardError, NotImplementedError => e
  complete_task(e.message) if params["task_id"]
  raise
end

Private Instance Methods

complete_task(msg, status = "error") click to toggle source
# File lib/topological_inventory/providers/common/operations/processor.rb, line 63
def complete_task(msg, status = "error")
  update_task(params["task_id"],
              :state   => "completed",
              :status  => status,
              :context => {:error => "#{model}##{method} - #{msg}"})
end
operation_class() click to toggle source
# File lib/topological_inventory/providers/common/operations/processor.rb, line 51
def operation_class
  raise NotImplementedError, "#{__method__} must be implemented in a subclass"
end
status_log_msg(status = nil) click to toggle source
# File lib/topological_inventory/providers/common/operations/processor.rb, line 70
def status_log_msg(status = nil)
  "Processing #{model}##{method} [#{params}]...#{status}"
end
with_time_measure() { || ... } click to toggle source
# File lib/topological_inventory/providers/common/operations/processor.rb, line 55
def with_time_measure
  if metrics.present?
    metrics.record_operation_time(message.message) { yield }
  else
    yield
  end
end