Class: Igniter::Embed::Contractable::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/igniter/embed/contractable/runner.rb

Defined Under Namespace

Classes: ExecutionLike, OutputsLike

Constant Summary collapse

SEVERITY_MAP =
{
  observation: :info,
  primary_success: :info,
  candidate_success: :info,
  divergence: :warning,
  acceptance_failure: :warning,
  primary_error: :error,
  candidate_error: :error,
  store_error: :error
}.freeze
SUMMARY_MAP =
{
  observation: "observation recorded",
  primary_success: "primary succeeded",
  candidate_success: "candidate succeeded",
  divergence: "outputs diverged from primary",
  acceptance_failure: "acceptance policy failed",
  primary_error: "primary raised an error",
  candidate_error: "candidate raised an error",
  store_error: "store adapter raised an error"
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config:) ⇒ Runner

Returns a new instance of Runner.



40
41
42
43
# File 'lib/igniter/embed/contractable/runner.rb', line 40

def initialize(config:)
  @config = config
  @config.validate!
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



38
39
40
# File 'lib/igniter/embed/contractable/runner.rb', line 38

def config
  @config
end

Instance Method Details

#call(*args, **kwargs) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/igniter/embed/contractable/runner.rb', line 45

def call(*args, **kwargs)
  observation_id = generate_observation_id
  primary_result = primary_payload(args, kwargs, observation_id)
  started_at = config.now
  sampled = config.sampled?
  dispatch_event(:primary_success, observation_id: observation_id, observation: nil, error: nil, metadata: { inputs: redacted_inputs(args, kwargs) })

  if sampled
    handoff = build_async_handoff(observation_id, args, kwargs)
    work = -> { observe(observation_id: observation_id, started_at: started_at, primary_result: primary_result, args: args, kwargs: kwargs, sampled: true) }
    dispatch_async(name: config.name, inputs: redacted_inputs(args, kwargs), metadata: , handoff: handoff, &work)
  else
    record_observation(sampled_observation(observation_id: observation_id, started_at: started_at, primary_result: primary_result, args: args, kwargs: kwargs))
  end

  primary_result
end