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.



381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
# File 'lib/legion/extensions/llm/inventory/records.rb', line 381

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



377
378
379
# File 'lib/legion/extensions/llm/inventory/records.rb', line 377

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



377
378
379
# File 'lib/legion/extensions/llm/inventory/records.rb', line 377

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



377
378
379
# File 'lib/legion/extensions/llm/inventory/records.rb', line 377

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



377
378
379
# File 'lib/legion/extensions/llm/inventory/records.rb', line 377

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



377
378
379
# File 'lib/legion/extensions/llm/inventory/records.rb', line 377

def observed_at
  @observed_at
end

#reasonObject (readonly)

Returns the value of attribute reason

Returns:

  • (Object)

    the current value of reason



377
378
379
# File 'lib/legion/extensions/llm/inventory/records.rb', line 377

def reason
  @reason
end

#sourceObject (readonly)

Returns the value of attribute source

Returns:

  • (Object)

    the current value of source



377
378
379
# File 'lib/legion/extensions/llm/inventory/records.rb', line 377

def source
  @source
end

#stateObject (readonly)

Returns the value of attribute state

Returns:

  • (Object)

    the current value of state



377
378
379
# File 'lib/legion/extensions/llm/inventory/records.rb', line 377

def state
  @state
end

#unavailable_revisionObject (readonly)

Returns the value of attribute unavailable_revision

Returns:

  • (Object)

    the current value of unavailable_revision



377
378
379
# File 'lib/legion/extensions/llm/inventory/records.rb', line 377

def unavailable_revision
  @unavailable_revision
end

Instance Method Details

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



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

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



412
413
414
415
416
417
418
# File 'lib/legion/extensions/llm/inventory/records.rb', line 412

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