Class: AgentHarness::DependencyUpdater

Inherits:
Object
  • Object
show all
Defined in:
lib/agent_harness/dependency_updater.rb

Constant Summary collapse

DEFAULT_COOLDOWN_SECONDS =
3 * 24 * 60 * 60

Instance Attribute Summary collapse

Instance Method Summary collapse

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_periodObject

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_registryObject (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

Returns:

  • (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