Class: Legion::Extensions::Llm::Inventory::AvailabilityFact

Inherits:
Data
  • Object
show all
Defined in:
lib/legion/extensions/llm/inventory/records.rb

Overview

The availability state of an exact instance. Carries no cooldown, half-open, latency, success-count, or clock-expiry field. See 10.4.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(**kwargs) ⇒ AvailabilityFact

Returns a new instance of AvailabilityFact.



390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
# File 'lib/legion/extensions/llm/inventory/records.rb', line 390

def initialize(**kwargs)
  kwargs = {
    last_probe_started_at: nil, last_probe_completed_at: nil, last_probe_outcome: nil, unavailable_revision: nil
  }.merge(kwargs)
  RecordSupport.check_unknown_kwargs!(kwargs: kwargs, members: self.class.members)

  state = kwargs[:state]
  availability_revision = kwargs[:availability_revision]
  unavailable_revision = kwargs[:unavailable_revision]
  raise Errors::ValidationError, 'state must be a Taxonomies::AVAILABILITY_STATES value' unless Taxonomies::AVAILABILITY_STATES.include?(state)
  raise Errors::ValidationError, 'source must be a Taxonomies::AVAILABILITY_SOURCES value' unless Taxonomies::AVAILABILITY_SOURCES.include?(kwargs[:source])

  RecordSupport.nonnegative_integer(value: availability_revision, field: :availability_revision)
  validate_unavailable_revision!(state, availability_revision, unavailable_revision)
  resolved_outcome = validate_probe_telemetry!(
    kwargs[:last_probe_started_at], kwargs[:last_probe_completed_at], kwargs[:last_probe_outcome]
  )

  super(
    state: state,
    availability_revision: availability_revision,
    source: kwargs[:source],
    reason: RecordSupport.sanitized_reason(value: kwargs[:reason], field: :reason),
    observed_at: RecordSupport.optional_time(value: kwargs[:observed_at], field: :observed_at),
    last_probe_started_at: RecordSupport.optional_time(value: kwargs[:last_probe_started_at], field: :last_probe_started_at),
    last_probe_completed_at: RecordSupport.optional_time(value: kwargs[:last_probe_completed_at], field: :last_probe_completed_at),
    last_probe_outcome: resolved_outcome,
    unavailable_revision: unavailable_revision
  )
end

Instance Attribute Details

#availability_revisionObject (readonly)

Returns the value of attribute availability_revision

Returns:

  • (Object)

    the current value of availability_revision



386
387
388
# File 'lib/legion/extensions/llm/inventory/records.rb', line 386

def availability_revision
  @availability_revision
end

#last_probe_completed_atObject (readonly)

Returns the value of attribute last_probe_completed_at

Returns:

  • (Object)

    the current value of last_probe_completed_at



386
387
388
# File 'lib/legion/extensions/llm/inventory/records.rb', line 386

def last_probe_completed_at
  @last_probe_completed_at
end

#last_probe_outcomeObject (readonly)

Returns the value of attribute last_probe_outcome

Returns:

  • (Object)

    the current value of last_probe_outcome



386
387
388
# File 'lib/legion/extensions/llm/inventory/records.rb', line 386

def last_probe_outcome
  @last_probe_outcome
end

#last_probe_started_atObject (readonly)

Returns the value of attribute last_probe_started_at

Returns:

  • (Object)

    the current value of last_probe_started_at



386
387
388
# File 'lib/legion/extensions/llm/inventory/records.rb', line 386

def last_probe_started_at
  @last_probe_started_at
end

#observed_atObject (readonly)

Returns the value of attribute observed_at

Returns:

  • (Object)

    the current value of observed_at



386
387
388
# File 'lib/legion/extensions/llm/inventory/records.rb', line 386

def observed_at
  @observed_at
end

#reasonObject (readonly)

Returns the value of attribute reason

Returns:

  • (Object)

    the current value of reason



386
387
388
# File 'lib/legion/extensions/llm/inventory/records.rb', line 386

def reason
  @reason
end

#sourceObject (readonly)

Returns the value of attribute source

Returns:

  • (Object)

    the current value of source



386
387
388
# File 'lib/legion/extensions/llm/inventory/records.rb', line 386

def source
  @source
end

#stateObject (readonly)

Returns the value of attribute state

Returns:

  • (Object)

    the current value of state



386
387
388
# File 'lib/legion/extensions/llm/inventory/records.rb', line 386

def state
  @state
end

#unavailable_revisionObject (readonly)

Returns the value of attribute unavailable_revision

Returns:

  • (Object)

    the current value of unavailable_revision



386
387
388
# File 'lib/legion/extensions/llm/inventory/records.rb', line 386

def unavailable_revision
  @unavailable_revision
end

Instance Method Details

#validate_probe_telemetry!(started_at, completed_at, outcome) ⇒ Object



429
430
431
432
433
434
435
436
# File 'lib/legion/extensions/llm/inventory/records.rb', line 429

def validate_probe_telemetry!(started_at, completed_at, outcome)
  return nil if outcome.nil?
  raise Errors::ValidationError, 'last_probe_outcome must be nil, :success, or :failure' unless Taxonomies::PROBE_OUTCOMES.include?(outcome)
  raise Errors::ValidationError, 'a non-nil last_probe_outcome requires both probe timestamps' unless started_at.is_a?(::Time) && completed_at.is_a?(::Time)
  raise Errors::ValidationError, 'probe completion cannot precede start' if completed_at < started_at

  outcome
end

#validate_unavailable_revision!(state, availability_revision, unavailable_revision) ⇒ Object



421
422
423
424
425
426
427
# File 'lib/legion/extensions/llm/inventory/records.rb', line 421

def validate_unavailable_revision!(state, availability_revision, unavailable_revision)
  if state == :unavailable
    raise Errors::ValidationError, 'unavailable state requires unavailable_revision == availability_revision' unless unavailable_revision == availability_revision
  elsif !unavailable_revision.nil?
    raise Errors::ValidationError, 'non-unavailable state requires unavailable_revision: nil'
  end
end