herdst_worker 0.2.18 → 0.2.19
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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6654d05e7c9d7f3a3060096bbc9acf651360fb25e3e2527292632518537f61f5
|
|
4
|
+
data.tar.gz: 98ce22ba4604f0c889bdfd27d6627ae63c36e45746e5c38697518c6675f993c2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6f21d913498e7514c5a9fc591bdfc2fa65054692a0780fd075614824fed061c6eaf383f6e6133132b6674c2dc6ff7ef27215e3c35f877dbf5b0771a739e81613
|
|
7
|
+
data.tar.gz: e112479b119fce002f93b26b1a2931f6b1e24294210751446974f63f0b1450d8e50ba1aa8645093244d9d9a66eccd8306a66e59c137dd2ea7dfd89993932e024
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require "concurrent-ruby"
|
|
2
|
+
require "aws-sdk-ecs"
|
|
2
3
|
|
|
3
4
|
require_relative '../configuration/facade'
|
|
4
5
|
require_relative '../log/facade'
|
|
@@ -73,12 +74,14 @@ module HerdstWorker
|
|
|
73
74
|
|
|
74
75
|
Kernel.exit(exit_code)
|
|
75
76
|
end
|
|
76
|
-
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
|
|
79
|
+
def force_stop(delay = nil)
|
|
80
|
+
delay = 600 if delay == nil # 10 minutes
|
|
80
81
|
process_id = "#{$$}"
|
|
81
|
-
|
|
82
|
+
|
|
83
|
+
self.logger.warn "Application force stopping in #{delay} seconds."
|
|
84
|
+
|
|
82
85
|
Concurrent::ScheduledTask.execute(delay) do
|
|
83
86
|
self.logger.warn "Application force stopping."
|
|
84
87
|
|
|
@@ -86,7 +89,34 @@ module HerdstWorker
|
|
|
86
89
|
end
|
|
87
90
|
end
|
|
88
91
|
|
|
89
|
-
|
|
92
|
+
|
|
93
|
+
def register_new_task
|
|
94
|
+
# TODO
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def deregister_task
|
|
99
|
+
begin
|
|
100
|
+
info = self.config.metadata.get_service_config
|
|
101
|
+
credentials = self.config.metadata.get_aws_credentials!
|
|
102
|
+
ecs_client = Aws::ECS::Client.new(
|
|
103
|
+
:region => info[:region],
|
|
104
|
+
:credentials => credentials
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
ecs_client.stop_task({
|
|
108
|
+
cluster: info[:cluster],
|
|
109
|
+
reason: "Task expired.",
|
|
110
|
+
task: info[:task_id]
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
rescue Exception => ex
|
|
114
|
+
self.force_stop(30)
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
|
|
90
120
|
def config_for(name)
|
|
91
121
|
self.config.config_for(name)
|
|
92
122
|
end
|
|
@@ -85,13 +85,13 @@ module HerdstWorker
|
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
def get_tasks_info
|
|
88
|
-
metadata = make_request!(get_task_metadata_uri)
|
|
88
|
+
metadata = make_request!(self.get_task_metadata_uri)
|
|
89
89
|
|
|
90
90
|
ecs_client = Aws::ECS::Client.new(
|
|
91
91
|
:region => self.secrets["AWS_REGION"],
|
|
92
92
|
:credentials => self.aws_credentials
|
|
93
93
|
)
|
|
94
|
-
|
|
94
|
+
|
|
95
95
|
ecs_client.describe_tasks(
|
|
96
96
|
:cluster => metadata["Cluster"],
|
|
97
97
|
:tasks => [
|
|
@@ -120,6 +120,20 @@ module HerdstWorker
|
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
|
|
123
|
+
def get_service_config
|
|
124
|
+
metadata = make_request!(self.get_task_metadata_uri_v4)
|
|
125
|
+
|
|
126
|
+
{
|
|
127
|
+
:task_id => metadata["TaskARN"].split("/").last,
|
|
128
|
+
:task_arn => metadata["TaskARN"],
|
|
129
|
+
:cluster => metadata["Cluster"].split("/").last,
|
|
130
|
+
:service_name => metadata["ServiceName"],
|
|
131
|
+
:region => self.secrets["AWS_REGION"],
|
|
132
|
+
:task_definition => metadata["Family"] + ":" + metadata["Revision"]
|
|
133
|
+
}
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
|
|
123
137
|
def get_aws_credentials!
|
|
124
138
|
credentials = self.is_prod? ?
|
|
125
139
|
make_request!(get_credentials_uri) :
|
|
@@ -230,6 +244,10 @@ module HerdstWorker
|
|
|
230
244
|
def get_task_metadata_uri
|
|
231
245
|
ENV["ECS_CONTAINER_METADATA_URI"].to_s + "/task"
|
|
232
246
|
end
|
|
247
|
+
|
|
248
|
+
def get_task_metadata_uri_v4
|
|
249
|
+
ENV["ECS_CONTAINER_METADATA_URI_V4"].to_s + "/task"
|
|
250
|
+
end
|
|
233
251
|
|
|
234
252
|
def get_credentials_uri
|
|
235
253
|
"http://169.254.170.2" + ENV["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"].to_s
|
|
@@ -9,7 +9,7 @@ module HerdstWorker
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
attr_accessor :app, :enabled, :queue_url, :queue_wait_time, :poller
|
|
12
|
-
attr_accessor :start_time, :
|
|
12
|
+
attr_accessor :start_time, :stop_processing_at, :stop_at, :run_duration, :stop_suration
|
|
13
13
|
attr_accessor :processor_status, :job_count, :max_jobs
|
|
14
14
|
attr_accessor :attempt_threshold, :visibility_timeout, :ignored_notifications
|
|
15
15
|
|
|
@@ -29,8 +29,8 @@ module HerdstWorker
|
|
|
29
29
|
]
|
|
30
30
|
|
|
31
31
|
# Set the start time
|
|
32
|
-
self.
|
|
33
|
-
self.
|
|
32
|
+
self.run_duration = (3600 * 4) + (rand * 900).floor # Four hours + bit more (< 15 minutes)
|
|
33
|
+
self.stop_suration = 300 # 5 minutes
|
|
34
34
|
self.reset_time
|
|
35
35
|
|
|
36
36
|
# Start the processor as working
|
|
@@ -49,10 +49,8 @@ module HerdstWorker
|
|
|
49
49
|
self.poller.poll(:wait_time_seconds => self.queue_wait_time, :skip_delete => false) do |msg|
|
|
50
50
|
process_message(msg)
|
|
51
51
|
end
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
self.app.stop(0)
|
|
55
|
-
end
|
|
52
|
+
|
|
53
|
+
self.app.deregister_task
|
|
56
54
|
else
|
|
57
55
|
raise "Cannot start a queue which is not enabled"
|
|
58
56
|
end
|
|
@@ -77,7 +75,7 @@ module HerdstWorker
|
|
|
77
75
|
# Sets the processor status to finishing. The sqs before action will
|
|
78
76
|
# take care of setting the idle state once all jobs have finished.
|
|
79
77
|
def halt
|
|
80
|
-
return if self.processor_status
|
|
78
|
+
return if self.processor_status == "finishing"
|
|
81
79
|
set_status "finishing"
|
|
82
80
|
end
|
|
83
81
|
|
|
@@ -120,12 +118,14 @@ module HerdstWorker
|
|
|
120
118
|
# After hours of running terminate application.
|
|
121
119
|
# The app will automatically restart in production
|
|
122
120
|
current_time = Time.now.utc.to_i
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
self.app.
|
|
126
|
-
|
|
121
|
+
|
|
122
|
+
if (self.processor_status == "stopping") && (current_time >= self.stop_at)
|
|
123
|
+
self.app.deregister_task
|
|
124
|
+
|
|
125
|
+
elsif (self.processor_status == "working") && (current_time >= self.stop_processing_at)
|
|
126
|
+
self.app.register_new_task
|
|
127
127
|
|
|
128
|
-
set_status "stopping"
|
|
128
|
+
set_status "stopping"
|
|
129
129
|
|
|
130
130
|
# On finishing wait for jobs to complete and then set status to idle
|
|
131
131
|
elsif self.processor_status == "finishing"
|
|
@@ -133,7 +133,7 @@ module HerdstWorker
|
|
|
133
133
|
self.app.logger.queue.warn "Setting processor status to idle"
|
|
134
134
|
set_status "idle"
|
|
135
135
|
end
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
end
|
|
138
138
|
|
|
139
139
|
# On stopping wait for jobs to complete and then set status
|
|
@@ -222,7 +222,7 @@ module HerdstWorker
|
|
|
222
222
|
self.job_count -= 1
|
|
223
223
|
}.execute
|
|
224
224
|
else
|
|
225
|
-
self.poller.change_message_visibility_timeout(msg,
|
|
225
|
+
self.poller.change_message_visibility_timeout(msg, 5)
|
|
226
226
|
throw :skip_delete
|
|
227
227
|
end
|
|
228
228
|
end
|
|
@@ -231,7 +231,8 @@ module HerdstWorker
|
|
|
231
231
|
private
|
|
232
232
|
def reset_time
|
|
233
233
|
self.start_time = Time.now.utc.to_i
|
|
234
|
-
self.
|
|
234
|
+
self.stop_processing_at = self.start_time + self.run_duration
|
|
235
|
+
self.stop_at = self.stop_processing_at + self.stop_suration
|
|
235
236
|
end
|
|
236
237
|
|
|
237
238
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: herdst_worker
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.19
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Herd.St
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-01-
|
|
11
|
+
date: 2026-01-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|