Class: AgentHarness::DependencyUpdater
- Inherits:
-
Object
- Object
- AgentHarness::DependencyUpdater
- Defined in:
- lib/agent_harness/dependency_updater.rb
Constant Summary collapse
- DEFAULT_COOLDOWN_SECONDS =
3 * 24 * 60 * 60
Instance Attribute Summary collapse
-
#cooldown_period ⇒ Object
Returns the value of attribute cooldown_period.
-
#release_registry ⇒ Object
readonly
Returns the value of attribute release_registry.
Instance Method Summary collapse
- #clear_cooldown(provider_name) ⇒ Object
- #cooldown_for(provider_name) ⇒ Object
- #eligible?(provider_name, version, bypass_cooldown: false, now: Time.now) ⇒ Boolean
-
#initialize(cooldown_period: DEFAULT_COOLDOWN_SECONDS, release_registry: nil) ⇒ DependencyUpdater
constructor
A new instance of DependencyUpdater.
- #register_release(provider_name, version, released_at: Time.now) ⇒ Object
- #resolve_all_latest(bypass_cooldown: false, now: Time.now) ⇒ Object
- #resolve_latest_installation_contract(provider_name, bypass_cooldown: false, now: Time.now) ⇒ Object
- #resolve_latest_version(provider_name, bypass_cooldown: false, now: Time.now) ⇒ Object
- #set_cooldown(provider_name, period) ⇒ Object
Constructor Details
#initialize(cooldown_period: DEFAULT_COOLDOWN_SECONDS, release_registry: nil) ⇒ DependencyUpdater
Returns a new instance of DependencyUpdater.
9 10 11 12 13 |
# File 'lib/agent_harness/dependency_updater.rb', line 9 def initialize(cooldown_period: DEFAULT_COOLDOWN_SECONDS, release_registry: nil) @cooldown_period = validate_cooldown(cooldown_period) @per_provider_cooldown = {} @release_registry = release_registry || ReleaseRegistry.new end |
Instance Attribute Details
#cooldown_period ⇒ Object
Returns the value of attribute cooldown_period.
7 8 9 |
# File 'lib/agent_harness/dependency_updater.rb', line 7 def cooldown_period @cooldown_period end |
#release_registry ⇒ Object (readonly)
Returns the value of attribute release_registry.
7 8 9 |
# File 'lib/agent_harness/dependency_updater.rb', line 7 def release_registry @release_registry end |
Instance Method Details
#clear_cooldown(provider_name) ⇒ Object
24 25 26 |
# File 'lib/agent_harness/dependency_updater.rb', line 24 def clear_cooldown(provider_name) @per_provider_cooldown.delete(provider_name.to_sym) end |
#cooldown_for(provider_name) ⇒ Object
28 29 30 |
# File 'lib/agent_harness/dependency_updater.rb', line 28 def cooldown_for(provider_name) @per_provider_cooldown[provider_name.to_sym] || @cooldown_period end |
#eligible?(provider_name, version, bypass_cooldown: false, now: Time.now) ⇒ Boolean
55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/agent_harness/dependency_updater.rb', line 55 def eligible?(provider_name, version, bypass_cooldown: false, now: Time.now) return true if bypass_cooldown provider_name = provider_name.to_sym version = version.to_s released_at = @release_registry.released_at(provider_name, version) return true if released_at.nil? cooldown = cooldown_for(provider_name) (now - released_at) >= cooldown end |
#register_release(provider_name, version, released_at: Time.now) ⇒ Object
32 33 34 |
# File 'lib/agent_harness/dependency_updater.rb', line 32 def register_release(provider_name, version, released_at: Time.now) @release_registry.register(provider_name, version, released_at: released_at) end |
#resolve_all_latest(bypass_cooldown: false, now: Time.now) ⇒ Object
92 93 94 95 96 97 |
# File 'lib/agent_harness/dependency_updater.rb', line 92 def resolve_all_latest(bypass_cooldown: false, now: Time.now) @release_registry.providers.each_with_object({}) do |provider_name, results| version_info = resolve_latest_version(provider_name, bypass_cooldown: bypass_cooldown, now: now) results[provider_name] = version_info if version_info end end |
#resolve_latest_installation_contract(provider_name, bypass_cooldown: false, now: Time.now) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/agent_harness/dependency_updater.rb', line 68 def resolve_latest_installation_contract(provider_name, bypass_cooldown: false, now: Time.now) provider_name = provider_name.to_sym version_info = resolve_latest_version(provider_name, bypass_cooldown: bypass_cooldown, now: now) return nil unless version_info version = version_info[:version] begin contract = Providers::Registry.instance.installation_contract(provider_name, version: version) { provider: provider_name, version: version, released_at: version_info[:released_at], installation_contract: contract } rescue ConfigurationError { provider: provider_name, version: version, released_at: version_info[:released_at], installation_contract: nil } end end |
#resolve_latest_version(provider_name, bypass_cooldown: false, now: Time.now) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/agent_harness/dependency_updater.rb', line 36 def resolve_latest_version(provider_name, bypass_cooldown: false, now: Time.now) provider_name = provider_name.to_sym available = @release_registry.versions_for(provider_name) return nil if available.nil? || available.empty? if bypass_cooldown return newest_version(available) end cooldown = cooldown_for(provider_name) eligible = available.select do |entry| entry[:released_at].nil? || (now - entry[:released_at]) >= cooldown end return nil if eligible.empty? newest_version(eligible) end |
#set_cooldown(provider_name, period) ⇒ Object
19 20 21 22 |
# File 'lib/agent_harness/dependency_updater.rb', line 19 def set_cooldown(provider_name, period) provider_name = provider_name.to_sym @per_provider_cooldown[provider_name] = validate_cooldown(period) end |