hotdog 0.29.0 → 0.30.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|