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 +4 -4
- data/lib/delayed/version.rb +1 -1
- data/lib/delayed/worker/consul_health_check.rb +57 -10
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b27bc2f28f4906ac69cc6982188b528bdad5897c0bed2a6a5c6445f294eb9973
|
|
4
|
+
data.tar.gz: cddeff5c83f6ed73d63fee9ae7ffe0df2a4bc18636b11c0fd4cc80e04c8bf835
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 612d7681460b68f02c11b059b09504544969123ac1f70fbb89203b69f8002a768dae8c281cd498cb610cd316ee962f58d1d8bba3b13680aff94c807931e1c68c
|
|
7
|
+
data.tar.gz: fc8126210f011236d8ca57e6a938e6e6e33c0e88f79f27cf9e612cb2bae3f743066b6527c728da3b668cf22f27c13dcc0a04764ddd02fe3c3dbc4b1ad1c2c61e
|
data/lib/delayed/version.rb
CHANGED
|
@@ -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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
}
|
|
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
|
+
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-
|
|
13
|
+
date: 2026-10-22 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: activerecord
|