inst-jobs 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4ab079657570b1e9ce94abdd938367ba912afa077ccad380f38f81862fe5a43
4
- data.tar.gz: a0366132ef9d5cced326cdecef3446217857e668760fae47a72f664060fc380a
3
+ metadata.gz: b27bc2f28f4906ac69cc6982188b528bdad5897c0bed2a6a5c6445f294eb9973
4
+ data.tar.gz: cddeff5c83f6ed73d63fee9ae7ffe0df2a4bc18636b11c0fd4cc80e04c8bf835
5
5
  SHA512:
6
- metadata.gz: 04d51cfd152ee4a6e5145df09d1f8fec52d60c4eb74287e49d693a29f62498ca9a09655ac0dbb5ce6137817e309a7a47fb5918b737d41a2f78f64c6c8c43ff4e
7
- data.tar.gz: ed4b8778c404ea2a5f57644e71b5b5bdb8be9f135056acd8eba46dcb7fec58eb39cc5bf5deb05cd4bf3e6754334d7fedb9fe5239291b276bebc1595946d97b45
6
+ metadata.gz: 612d7681460b68f02c11b059b09504544969123ac1f70fbb89203b69f8002a768dae8c281cd498cb610cd316ee962f58d1d8bba3b13680aff94c807931e1c68c
7
+ data.tar.gz: fc8126210f011236d8ca57e6a938e6e6e33c0e88f79f27cf9e612cb2bae3f743066b6527c728da3b668cf22f27c13dcc0a04764ddd02fe3c3dbc4b1ad1c2c61e
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Delayed
4
- VERSION = "3.4.0"
4
+ VERSION = "3.5.0"
5
5
  end
@@ -7,11 +7,13 @@ require "socket"
7
7
  module Delayed
8
8
  class Worker
9
9
  class ConsulHealthCheck < HealthCheck
10
+ include Delayed::Logging
11
+
10
12
  self.type_name = :consul
11
13
 
12
14
  CONSUL_CONFIG_KEYS = %w[url acl_token].map(&:freeze).freeze
13
15
  DEFAULT_SERVICE_NAME = "inst-jobs_worker"
14
- attr_reader :service_client, :health_client
16
+ attr_reader :service_client, :health_client, :check_client
15
17
 
16
18
  def initialize(*, **)
17
19
  super
@@ -27,21 +29,23 @@ module Delayed
27
29
  end
28
30
  @service_client = Diplomat::Service.new(configuration: consul_config)
29
31
  @health_client = Diplomat::Health.new(configuration: consul_config)
32
+ @check_client = Diplomat::Check.new(configuration: consul_config)
30
33
  else
31
34
  @service_client = Diplomat::Service.new
32
35
  @health_client = Diplomat::Health.new
36
+ @check_client = Diplomat::Check.new
33
37
  end
34
38
  end
35
39
 
36
40
  def start
37
- @service_client.register({
38
- id: worker_name,
39
- name: service_name,
40
- check: check_attributes
41
- })
41
+ registered = register
42
+ start_heartbeat if registered && ttl_check?
43
+ registered
42
44
  end
43
45
 
44
46
  def stop
47
+ @heartbeat_thread&.kill
48
+ @heartbeat_thread = nil
45
49
  @service_client.deregister(worker_name)
46
50
  end
47
51
 
@@ -56,13 +60,56 @@ module Delayed
56
60
 
57
61
  private
58
62
 
63
+ def register
64
+ @service_client.register({
65
+ id: worker_name,
66
+ name: service_name,
67
+ check: check_attributes
68
+ })
69
+ end
70
+
71
+ def ttl_check?
72
+ @config.fetch(:check_type, "script").to_s == "ttl"
73
+ end
74
+
75
+ def check_id
76
+ "service:#{worker_name}"
77
+ end
78
+
79
+ # in seconds
80
+ def ttl
81
+ Integer(@config.fetch(:ttl, 60))
82
+ end
83
+
84
+ def start_heartbeat
85
+ @heartbeat_thread = Thread.new do
86
+ loop do
87
+ sleep(ttl / 3.0)
88
+ heartbeat
89
+ rescue => e
90
+ logger.warn("Consul TTL update failed for #{worker_name}: #{e.class}: #{e.message}")
91
+ end
92
+ end
93
+ end
94
+
95
+ def heartbeat
96
+ @check_client.pass(check_id)
97
+ rescue Faraday::ResourceNotFound
98
+ logger.warn("Consul forgot #{worker_name}, re-registering")
99
+ register
100
+ end
101
+
59
102
  def check_attributes
60
- {
61
- args: ["bash", "-c", check_script],
103
+ base = {
62
104
  status: "passing",
63
- interval: @config.fetch(:check_interval, "5m"),
64
105
  deregister_critical_service_after: @config.fetch(:deregister_service_delay, "10m")
65
- }.tap do |h|
106
+ }
107
+ return base.merge(ttl: "#{ttl}s") if ttl_check?
108
+
109
+ base.merge(
110
+ args: ["bash", "-c", check_script],
111
+ interval: @config.fetch(:check_interval, "5m")
112
+ ).tap do |h|
66
113
  h[:docker_container_id] = docker_container_id if @config["docker"]
67
114
  end
68
115
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inst-jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.0
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2026-10-19 00:00:00.000000000 Z
13
+ date: 2026-10-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord