hotdog 0.29.0 → 0.30.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/hotdog/application.rb +11 -0
- data/lib/hotdog/commands/down.rb +20 -1
- data/lib/hotdog/commands/ssh.rb +8 -8
- data/lib/hotdog/commands.rb +7 -2
- data/lib/hotdog/expression/semantics.rb +16 -8
- data/lib/hotdog/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 704ccd17864c284a1daa3550e9c955469e718ee4
|
4
|
+
data.tar.gz: 0d5e59e8c274f25ebd179e92123380c5336d7cec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03d9ceb9147a75449c9b7542f3deecdb331cd0736d902603101508fbd1ef87881c82503b223dcd2c710f5f69c8408b173b95b1a17c57bbb08b5ca27857bfcc14
|
7
|
+
data.tar.gz: 5d32974bbbb07110a678538b5275ca792a1d76eb5ae086ad1b9831ff434d1937d4eae8f0ae4048df393bec2f81664223da444ba9aeee3467224b78bf4e0d375d
|
data/lib/hotdog/application.rb
CHANGED
@@ -163,6 +163,17 @@ module Hotdog
|
|
163
163
|
options.fetch(:status, STATUS_RUNNING)
|
164
164
|
end
|
165
165
|
|
166
|
+
def status_name()
|
167
|
+
{
|
168
|
+
STATUS_PENDING => "pending",
|
169
|
+
STATUS_RUNNING => "running",
|
170
|
+
STATUS_SHUTTING_DOWN => "shutting-down",
|
171
|
+
STATUS_TERMINATED => "terminated",
|
172
|
+
STATUS_STOPPING => "stopping",
|
173
|
+
STATUS_STOPPED => "stopped",
|
174
|
+
}.fetch(self.status, "unknown")
|
175
|
+
end
|
176
|
+
|
166
177
|
private
|
167
178
|
def define_options
|
168
179
|
@optparse.on("--endpoint ENDPOINT", "Datadog API endpoint") do |endpoint|
|
data/lib/hotdog/commands/down.rb
CHANGED
@@ -10,7 +10,26 @@ module Hotdog
|
|
10
10
|
default_option(options, :retry, 5)
|
11
11
|
default_option(options, :start, Time.new)
|
12
12
|
optparse.on("--downtime DURATION") do |v|
|
13
|
-
|
13
|
+
case v
|
14
|
+
when /\A\s*(\d+)\s*(?:seconds?|sec|S)\s*\z/
|
15
|
+
options[:downtime] = $1.to_i
|
16
|
+
when /\A\s*(\d+)\s*(?:minutes?|min|M)\s*\z/
|
17
|
+
options[:downtime] = $1.to_i * 60
|
18
|
+
when /\A\s*(\d+)\s*(?:hours?|H)\s*\z/
|
19
|
+
options[:downtime] = $1.to_i * 60 * 60
|
20
|
+
when /\A\s*(\d+)\s*(?:days?|d)\s*\z/
|
21
|
+
options[:downtime] = $1.to_i * 60 * 60 * 24
|
22
|
+
when /\A\s*(\d+)\s*(?:weeks?|w)\s*\z/
|
23
|
+
options[:downtime] = $1.to_i * 60 * 60 * 24 * 7
|
24
|
+
when /\A\s*(\d+)\s*(?:months?|m)\s*\z/i
|
25
|
+
options[:downtime] = $1.to_i * 60 * 60 * 24 * 30
|
26
|
+
when /\A\s*(\d+)\s*(?:years?|y)\s*\z/i
|
27
|
+
options[:downtime] = $1.to_i * 60 * 60 * 24 * 365
|
28
|
+
when /\A\s*(\d+)\s*\z/
|
29
|
+
options[:downtime] = $1.to_i
|
30
|
+
else
|
31
|
+
raise(OptionParser::InvalidArgument.new("downtime argument value is invalid: #{v}"))
|
32
|
+
end
|
14
33
|
end
|
15
34
|
optparse.on("--retry NUM") do |v|
|
16
35
|
options[:retry] = v.to_i
|
data/lib/hotdog/commands/ssh.rb
CHANGED
@@ -236,17 +236,17 @@ module Hotdog
|
|
236
236
|
end
|
237
237
|
|
238
238
|
private
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
end
|
246
|
-
|
239
|
+
# rewriting `options[:index]` as SLICE expression won't work as expected with hosts' status
|
240
|
+
# since the result may be filtered again with using the status,
|
241
|
+
# the filtering needs to be done after the `evaluate()`.
|
242
|
+
#
|
243
|
+
# for now we need to keep using `filter_hosts()` in favor of `rewrite_expression() to do
|
244
|
+
# the filtering based on status filtering.
|
247
245
|
def filter_hosts(tuples)
|
248
246
|
tuples = super
|
249
247
|
if options[:index] and options[:index] < tuples.length
|
248
|
+
filtered_tuples = tuples.reject.with_index { |tuple, i| i == options[:index] }
|
249
|
+
logger.warn("filtered host(s): #{filtered_tuples.map { |tuple| tuple.first }.inspect}")
|
250
250
|
[tuples[options[:index]]]
|
251
251
|
else
|
252
252
|
tuples
|
data/lib/hotdog/commands.rb
CHANGED
@@ -81,10 +81,15 @@ module Hotdog
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def get_hosts(host_ids, tags=nil)
|
84
|
-
status = application.status
|
84
|
+
status = application.status
|
85
|
+
n = Array(host_ids).length
|
85
86
|
host_ids = Array(host_ids).each_slice(SQLITE_LIMIT_COMPOUND_SELECT).flat_map { |host_ids|
|
86
87
|
execute("SELECT id FROM hosts WHERE status = ? AND id IN (%s);" % host_ids.map { "?" }.join(", "), [status] + host_ids).map { |row| row[0] }
|
87
88
|
}
|
89
|
+
m = host_ids.length
|
90
|
+
if n != m
|
91
|
+
logger.warn("filtered out #{n - m} host(s) out of #{n} due to status != #{application.status_name}.")
|
92
|
+
end
|
88
93
|
tags ||= @options[:tags]
|
89
94
|
update_db
|
90
95
|
if host_ids.empty?
|
@@ -139,7 +144,7 @@ module Hotdog
|
|
139
144
|
when 1
|
140
145
|
get_hosts_field(host_ids, fields.first, options)
|
141
146
|
else
|
142
|
-
[host_ids.
|
147
|
+
[host_ids.map { |host_id| get_host_fields(host_id, fields, options) }.map { |result, fields| result }, fields]
|
143
148
|
end
|
144
149
|
end
|
145
150
|
|
@@ -229,9 +229,13 @@ module Hotdog
|
|
229
229
|
range = (((sqlite_limit_compound_select - 2) / 2) * i)...(((sqlite_limit_compound_select - 2) / 2) * (i + 1))
|
230
230
|
left_selected = left_values.select { |n| range === n }
|
231
231
|
right_selected = right_values.select { |n| range === n }
|
232
|
-
|
233
|
-
|
234
|
-
|
232
|
+
if 0 < left_selected.length or 0 < right_selected.length
|
233
|
+
q = "SELECT id FROM hosts " \
|
234
|
+
"WHERE ? <= id AND id < ? AND ( id IN (%s) OR id IN (%s) );"
|
235
|
+
environment.execute(q % [left_selected.map { "?" }.join(", "), right_selected.map { "?" }.join(", ")], [range.first, range.last] + left_selected + right_selected).map { |row| row.first }
|
236
|
+
else
|
237
|
+
[]
|
238
|
+
end
|
235
239
|
}.tap do |values|
|
236
240
|
environment.logger.debug("lhs(#{left_values.length}) OR rhs(#{right_values.length}) => #{values.length}")
|
237
241
|
end
|
@@ -257,11 +261,15 @@ module Hotdog
|
|
257
261
|
range = (((sqlite_limit_compound_select - 2) / 4) * i)...(((sqlite_limit_compound_select - 2) / 4) * (i + 1))
|
258
262
|
left_selected = left_values.select { |n| range === n }
|
259
263
|
right_selected = right_values.select { |n| range === n }
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
264
|
+
if 0 < left_selected.length or 0 < right_selected.length
|
265
|
+
q = "SELECT id FROM hosts " \
|
266
|
+
"WHERE ? <= id AND id < ? AND NOT (id IN (%s) AND id IN (%s)) AND ( id IN (%s) OR id IN (%s) );"
|
267
|
+
lq = left_selected.map { "?" }.join(", ")
|
268
|
+
rq = right_selected.map { "?" }.join(", ")
|
269
|
+
environment.execute(q % [lq, rq, lq, rq], [range.first, range.last] + left_selected + right_selected + left_selected + right_selected).map { |row| row.first }
|
270
|
+
else
|
271
|
+
[]
|
272
|
+
end
|
265
273
|
}.tap do |values|
|
266
274
|
environment.logger.debug("lhs(#{left_values.length}) XOR rhs(#{right_values.length}) => #{values.length}")
|
267
275
|
end
|
data/lib/hotdog/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hotdog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.30.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yamashita Yuu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|