hotdog 0.0.6 → 0.0.7

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
  SHA1:
3
- metadata.gz: 7300d7cfb838327013fb49f3012e15a606cb7af4
4
- data.tar.gz: 38666c025172a7873a7746027d64d6a388cd38b5
3
+ metadata.gz: d1a630c98690e6d1df7a32b7baf48e24776da49a
4
+ data.tar.gz: ab4daa9a831412d598eb235e3e4ed8a4516b2dcf
5
5
  SHA512:
6
- metadata.gz: c3e9cd9dff9174e95ba9343f4af840437b721b2ad3e0c46e4bf03ab3433f54d66ea2676c0600f5f30b5278315aa48d3943480a7f40b0e5b43737be7fbb70acb3
7
- data.tar.gz: 86870002dea94e2cefc19ac9c3f028f394d001bab658bb875ee2bbb86a68e5feb2e47bb7cbd59e5465f5416da1f88f0336ce14799a122d9e3f600a1ccf6c6f20
6
+ metadata.gz: cb2c5b244339014184b56d4c1ab68bce58bc8fa2f71e84eef15319a8157be1532304647760fcd0b41d200cd8e1fdb895e6ca6a8309c7cd79d3ce9f6e67379c6f
7
+ data.tar.gz: 00ea3e8ddc439588571c788a0ec4f2546fb084d81ef18749b92cb83ab239ce2ea6df3f7c1ad21f17ca9f487794c805a1c5eb1fd007857d81dc58b3f9be9e3746
@@ -17,14 +17,14 @@ module Hotdog
17
17
  debug: false,
18
18
  environment: "default",
19
19
  minimum_expiry: 3600, # 1 hour
20
- random_expiry: 604800, # 7 days
20
+ random_expiry: 5940, # 99 hours
21
21
  fixed_string: false,
22
22
  force: false,
23
23
  format: "plain",
24
24
  headers: false,
25
25
  listing: false,
26
26
  logger: Logger.new(STDERR),
27
- max_time: 10,
27
+ max_time: 5,
28
28
  api_key: ENV["DATADOG_API_KEY"],
29
29
  application_key: ENV["DATADOG_APPLICATION_KEY"],
30
30
  print0: false,
@@ -5,17 +5,27 @@ module Hotdog
5
5
  class Hosts < BaseCommand
6
6
  def run(args=[])
7
7
  application.run_command("init")
8
- update_hosts(@options.dup)
9
8
 
10
9
  if args.empty?
10
+ update_hosts(@options.dup)
11
11
  @hosts_q1 ||= @db.prepare(<<-EOS)
12
12
  SELECT DISTINCT host_id FROM hosts_tags;
13
13
  EOS
14
14
  logger.debug("hosts_q1()")
15
15
  result = @hosts_q1.execute().to_a.reduce(:+)
16
16
  else
17
+ if args.map { |host_name| glob?(host_name) }.any?
18
+ update_hosts(@options.dup)
19
+ else
20
+ args.each do |host_name|
21
+ @hosts_q4 ||= @db.prepare("INSERT OR IGNORE INTO hosts (name) VALUES (?);")
22
+ logger.debug("hosts_q4(%s)" % [host_name.inspect])
23
+ @hosts_q4.execute(host_name)
24
+ update_host_tags(host_name, @options.dup)
25
+ end
26
+ end
17
27
  result = args.map { |host_name|
18
- if host_name.index("*")
28
+ if glob?(host_name)
19
29
  @hosts_q2 ||= @db.prepare(<<-EOS)
20
30
  SELECT DISTINCT hosts_tags.host_id FROM hosts_tags
21
31
  INNER JOIN hosts ON hosts_tags.host_id = hosts.id
@@ -65,13 +65,13 @@ module Hotdog
65
65
  @get_hosts_q6 ||= @db.prepare(<<-EOS)
66
66
  SELECT expires_at FROM hosts_tags WHERE host_id = ? LIMIT 1;
67
67
  EOS
68
- logger.debug("get_hosts_q6()")
68
+ logger.debug("get_hosts_q6(%s)" % [host_id.inspect])
69
69
  @get_hosts_q6.execute(host_id).map { |row| Time.at(row.first).strftime("%Y-%m-%dT%H:%M:%S") }.first
70
70
  when "host"
71
71
  @get_hosts_q1 ||= @db.prepare(<<-EOS)
72
72
  SELECT name FROM hosts WHERE id = ? LIMIT 1;
73
73
  EOS
74
- logger.debug("get_hosts_q1()")
74
+ logger.debug("get_hosts_q1(%s)" % [host_id.inspect])
75
75
  @get_hosts_q1.execute(host_id).map { |row| row.first }.first
76
76
  else
77
77
  if not glob?(tag_name)
@@ -80,7 +80,7 @@ module Hotdog
80
80
  INNER JOIN tags ON hosts_tags.tag_id = tags.id
81
81
  WHERE hosts_tags.host_id = ? AND tags.name = ?;
82
82
  EOS
83
- logger.debug("get_hosts_q2()")
83
+ logger.debug("get_hosts_q2(%s, %s)" % [host_id.inspect, tag_name.inspect])
84
84
  @get_hosts_q2.execute(host_id, tag_name).map { |row| row.first }.join(",")
85
85
  else
86
86
  @get_hosts_q5 ||= @db.prepare(<<-EOS)
@@ -88,7 +88,7 @@ module Hotdog
88
88
  INNER JOIN tags ON hosts_tags.tag_id = tags.id
89
89
  WHERE hosts_tags.host_id = ? AND tags.name GLOB ?;
90
90
  EOS
91
- logger.debug("get_hosts_q5()")
91
+ logger.debug("get_hosts_q5(%s, %s)", host_id.inspect, tag_name.inspect)
92
92
  @get_hosts_q5.execute(host_id, tag_name).map { |row| row.first }.join(",")
93
93
  end
94
94
  end
@@ -109,7 +109,7 @@ module Hotdog
109
109
  INNER JOIN tags ON hosts_tags.tag_id = tags.id
110
110
  WHERE hosts_tags.host_id = ?;
111
111
  EOS
112
- logger.debug("get_hosts_q3()")
112
+ logger.debug("get_hosts_q3(%s)" % [host_id.inspect])
113
113
  tag_names = @get_hosts_q3.execute(host_id).map { |row| row.first }
114
114
  tag_names.each do |tag_name|
115
115
  fields << tag_name unless fields.index(tag_name)
@@ -138,8 +138,7 @@ module Hotdog
138
138
  def update_hosts(options={})
139
139
  if suspended?
140
140
  return
141
- end
142
- @db.transaction do
141
+ else
143
142
  if not options[:force]
144
143
  # Update host list on every expirations to update frequently.
145
144
  @update_hosts_q1 ||= @db.prepare("SELECT MIN(expires_at) FROM hosts_tags;")
@@ -188,8 +187,7 @@ module Hotdog
188
187
  def update_tags(options={})
189
188
  if suspended?
190
189
  return
191
- end
192
- @db.transaction do
190
+ else
193
191
  resume_host_tags
194
192
 
195
193
  if options[:force]
@@ -203,8 +201,8 @@ module Hotdog
203
201
  SELECT DISTINCT hosts_tags.host_id FROM hosts_tags
204
202
  WHERE hosts_tags.expires_at < ?;
205
203
  EOS
206
- logger.debug("update_tags_q2()")
207
- hosts = @update_tags_q2.execute(Time.new.to_i)
204
+ logger.debug("update_tags_q2(%s)" % [Time.new.to_i])
205
+ hosts = @update_tags_q2.execute(Time.new.to_i).map { |row| row.first }
208
206
  end
209
207
  hosts.each_with_index do |host_id, i|
210
208
  @update_tags_q3 ||= @db.prepare("DELETE FROM hosts_tags WHERE host_id = ? AND hosts_tags.expires_at < ?;")
@@ -231,21 +229,23 @@ module Hotdog
231
229
  EMPTY_EXPIRES_AT = Time.at(0).to_i
232
230
 
233
231
  def suspend_host_tags()
234
- @suspended = true
235
- @suspend_host_tags_q1 ||= @db.prepare("INSERT OR IGNORE INTO hosts (name) VALUES (?);")
236
- logger.debug("suspend_host_tags_q1(%s)" % [EMPTY_HOST_NAME.inspect])
237
- @suspend_host_tags_q1.execute(EMPTY_HOST_NAME)
238
- @suspend_host_tags_q2 ||= @db.prepare("INSERT OR IGNORE INTO tags (name, value) VALUES (?, ?);")
239
- logger.debug("suspend_host_tags_q2(%s, %s)" % [EMPTY_TAG_NAME.inspect, EMPTY_TAG_VALUE.inspect])
240
- @suspend_host_tags_q2.execute(EMPTY_TAG_NAME, EMPTY_TAG_VALUE)
241
- @suspend_host_tags_q3 ||= @db.prepare(<<-EOS)
242
- INSERT OR REPLACE INTO hosts_tags (host_id, tag_id, expires_at)
243
- SELECT host.id, tag.id, ? FROM
244
- ( SELECT id FROM hosts WHERE name = ?) AS host,
245
- ( SELECT id FROM tags WHERE name = ? AND value = ? ) AS tag;
246
- EOS
247
- logger.debug("suspend_host_tags_q3(%s, %s, %s, %s)" % [EMPTY_EXPIRES_AT.inspect, EMPTY_HOST_NAME.inspect, EMPTY_TAG_NAME.inspect, EMPTY_TAG_VALUE.inspect])
248
- @suspend_host_tags_q3.execute(EMPTY_EXPIRES_AT, EMPTY_HOST_NAME, EMPTY_TAG_NAME, EMPTY_TAG_VALUE)
232
+ @db.transaction do
233
+ @suspended = true
234
+ @suspend_host_tags_q1 ||= @db.prepare("INSERT OR IGNORE INTO hosts (name) VALUES (?);")
235
+ logger.debug("suspend_host_tags_q1(%s)" % [EMPTY_HOST_NAME.inspect])
236
+ @suspend_host_tags_q1.execute(EMPTY_HOST_NAME)
237
+ @suspend_host_tags_q2 ||= @db.prepare("INSERT OR IGNORE INTO tags (name, value) VALUES (?, ?);")
238
+ logger.debug("suspend_host_tags_q2(%s, %s)" % [EMPTY_TAG_NAME.inspect, EMPTY_TAG_VALUE.inspect])
239
+ @suspend_host_tags_q2.execute(EMPTY_TAG_NAME, EMPTY_TAG_VALUE)
240
+ @suspend_host_tags_q3 ||= @db.prepare(<<-EOS)
241
+ INSERT OR REPLACE INTO hosts_tags (host_id, tag_id, expires_at)
242
+ SELECT host.id, tag.id, ? FROM
243
+ ( SELECT id FROM hosts WHERE name = ?) AS host,
244
+ ( SELECT id FROM tags WHERE name = ? AND value = ? ) AS tag;
245
+ EOS
246
+ logger.debug("suspend_host_tags_q3(%s, %s, %s, %s)" % [EMPTY_EXPIRES_AT.inspect, EMPTY_HOST_NAME.inspect, EMPTY_TAG_NAME.inspect, EMPTY_TAG_VALUE.inspect])
247
+ @suspend_host_tags_q3.execute(EMPTY_EXPIRES_AT, EMPTY_HOST_NAME, EMPTY_TAG_NAME, EMPTY_TAG_VALUE)
248
+ end
249
249
  end
250
250
 
251
251
  def resume_host_tags()
@@ -261,76 +261,79 @@ module Hotdog
261
261
  if suspended?
262
262
  # stop updating if the `update_host_tags` has already been suspended
263
263
  return
264
- end
265
- if Integer === host_name
266
- host_id = host_name
267
- @update_host_tags_q1 ||= @db.prepare("SELECT name FROM hosts WHERE id = ? LIMIT 1;")
268
- logger.debug("update_host_tags_q1(%s)" % [host_id.inspect])
269
- host_name = @update_host_tags_q1.execute(host_id).map { |row| row.first }.first
270
264
  else
271
- @update_host_tags_q2 ||= @db.prepare("SELECT id, name FROM hosts WHERE LOWER(name) = LOWER(?) LIMIT 1;")
272
- logger.debug("update_host_tags_q2(%s)" % [host_name.inspect])
273
- host_id, host_name = @update_host_tags_q2.execute(host_name).map { |row| row }.first
274
- end
265
+ if Integer === host_name
266
+ host_id = host_name
267
+ @update_host_tags_q1 ||= @db.prepare("SELECT name FROM hosts WHERE id = ? LIMIT 1;")
268
+ logger.debug("update_host_tags_q1(%s)" % [host_id.inspect])
269
+ host_name = @update_host_tags_q1.execute(host_id).map { |row| row.first }.first
270
+ else
271
+ @update_host_tags_q2 ||= @db.prepare("SELECT id, name FROM hosts WHERE LOWER(name) = LOWER(?) LIMIT 1;")
272
+ logger.debug("update_host_tags_q2(%s)" % [host_name.inspect])
273
+ host_id, host_name = @update_host_tags_q2.execute(host_name).map { |row| row }.first
274
+ end
275
275
 
276
- if not options[:force]
277
- # Update host tags less frequently.
278
- # Don't need to run updates on every expiration.
279
- @update_host_tags_q3 ||= @db.prepare("SELECT AVG(expires_at) FROM hosts_tags WHERE host_id = ?;")
280
- logger.debug("update_host_tags_q3(%s)" % [host_id.inspect])
281
- if expires_at = @update_host_tags_q3.execute(host_id).map { |row| row.first }.first
282
- if Time.new.to_i < expires_at
283
- logger.debug("%s: next update will run after %s." % [host_name, Time.at(expires_at)])
284
- return
276
+ if not options[:force]
277
+ # Update host tags less frequently.
278
+ # Don't need to run updates on every expiration.
279
+ @update_host_tags_q3 ||= @db.prepare("SELECT AVG(expires_at) FROM hosts_tags WHERE host_id = ?;")
280
+ logger.debug("update_host_tags_q3(%s)" % [host_id.inspect])
281
+ if expires_at = @update_host_tags_q3.execute(host_id).map { |row| row.first }.first
282
+ if Time.new.to_i < expires_at
283
+ logger.debug("%s: next update will run after %s." % [host_name, Time.at(expires_at)])
284
+ return
285
+ else
286
+ logger.debug("%s: average expires_at was %s. start updating." % [host_name, Time.at(expires_at)])
287
+ end
285
288
  else
286
- logger.debug("%s: average expires_at was %s. start updating." % [host_name, Time.at(expires_at)])
289
+ logger.debug("%s: expires_at not found. start updateing." % [host_name])
287
290
  end
288
- else
289
- logger.debug("%s: expires_at not found. start updateing." % [host_name])
290
291
  end
291
- end
292
292
 
293
- code, result = @dog.host_tags(host_name)
294
- logger.debug("dog.host_tags(%s) #==> [%s, %s]" % [host_name.inspect, code.inspect, result.inspect])
295
- if code.to_i / 100 != 2
296
- case code.to_i
297
- when 404 # host not found on datadog
298
- @update_host_tags_q7 ||= @db.prepare("DELETE FROM hosts_tags WHERE host_id IN ( SELECT id FROM hosts WHERE LOWER(name) = LOWER(?) );")
299
- logger.debug("update_host_tags_q7(%s)" % [host_name.inspect])
300
- @update_host_tags_q7.execute(host_name)
293
+ code, result = @dog.host_tags(host_name)
294
+ logger.debug("dog.host_tags(%s) #==> [%s, %s]" % [host_name.inspect, code.inspect, result.inspect])
295
+ if code.to_i / 100 != 2
296
+ case code.to_i
297
+ when 404 # host not found on datadog
298
+ @update_host_tags_q7 ||= @db.prepare("DELETE FROM hosts_tags WHERE host_id IN ( SELECT id FROM hosts WHERE LOWER(name) = LOWER(?) );")
299
+ logger.debug("update_host_tags_q7(%s)" % [host_name.inspect])
300
+ @update_host_tags_q7.execute(host_name)
301
+ end
302
+ raise("dog.host_tags(%s) returns (%s: %s)" % [host_name.inspect, code.inspect, result.inspect])
301
303
  end
302
- raise("dog.host_tags(%s) returns (%s: %s)" % [host_name.inspect, code.inspect, result.inspect])
303
- end
304
304
 
305
- expires_at = Time.new.to_i + (options[:minimum_expiry] + rand(options[:random_expiry]))
306
- logger.debug("%s: expires_at=%s" % [host_name, Time.at(expires_at)])
305
+ expires_at = Time.new.to_i + (options[:minimum_expiry] + rand(options[:random_expiry]))
306
+ logger.debug("%s: expires_at=%s" % [host_name, Time.at(expires_at)])
307
+
308
+ @db.transaction do
309
+ result["tags"].each do |tag|
310
+ tag_name, tag_value = tag.split(":", 2)
311
+ tag_value ||= ""
307
312
 
308
- result["tags"].each do |tag|
309
- tag_name, tag_value = tag.split(":", 2)
310
- tag_value ||= ""
313
+ if options.has_key?(:tags) and not options[:tags].empty? and not options[:tags].index(tag_name)
314
+ next
315
+ else
316
+ @update_host_tags_q4 ||= @db.prepare("INSERT OR IGNORE INTO tags (name, value) VALUES (?, ?);")
317
+ logger.debug("update_host_tags_q4(%s, %s)" % [tag_name.inspect, tag_value.inspect])
318
+ @update_host_tags_q4.execute(tag_name, tag_value)
319
+ @update_host_tags_q5 ||= @db.prepare(<<-EOS)
320
+ INSERT OR REPLACE INTO hosts_tags (host_id, tag_id, expires_at)
321
+ SELECT host.id, tag.id, ? FROM
322
+ ( SELECT id FROM hosts WHERE name = ? ) AS host,
323
+ ( SELECT id FROM tags WHERE name = ? AND value = ? ) AS tag;
324
+ EOS
325
+ logger.debug("update_host_tags_q5(%s, %s)" % [expires_at, host_name, tag_name, tag_value])
326
+ @update_host_tags_q5.execute(expires_at, host_name, tag_name, tag_value)
327
+ end
328
+ end
311
329
 
312
- if options.has_key?(:tags) and not options[:tags].empty? and not options[:tags].index(tag_name)
313
- next
314
- else
315
- @update_host_tags_q4 ||= @db.prepare("INSERT OR IGNORE INTO tags (name, value) VALUES (?, ?);")
316
- logger.debug("update_host_tags_q4(%s, %s)" % [tag_name.inspect, tag_value.inspect])
317
- @update_host_tags_q4.execute(tag_name, tag_value)
318
- @update_host_tags_q5 ||= @db.prepare(<<-EOS)
319
- INSERT OR REPLACE INTO hosts_tags (host_id, tag_id, expires_at)
320
- SELECT host.id, tag.id, ? FROM
321
- ( SELECT id FROM hosts WHERE name = ? ) AS host,
322
- ( SELECT id FROM tags WHERE name = ? AND value = ? ) AS tag;
330
+ @update_host_tags_q6 ||= @db.prepare(<<-EOS)
331
+ DELETE FROM hosts_tags WHERE host_id = ? and expires_at <= ?;
323
332
  EOS
324
- logger.debug("update_host_tags_q5(%s, %s)" % [expires_at, host_name, tag_name, tag_value])
325
- @update_host_tags_q5.execute(expires_at, host_name, tag_name, tag_value)
333
+ logger.debug("update_host_tags_q6(%s, %s)" % [host_id.inspect, Time.new.to_i.inspect])
334
+ @update_host_tags_q6.execute(host_id, Time.new.to_i)
326
335
  end
327
336
  end
328
-
329
- @update_host_tags_q6 ||= @db.prepare(<<-EOS)
330
- DELETE FROM hosts_tags WHERE host_id = ? and expires_at <= ?;
331
- EOS
332
- logger.debug("update_host_tags_q6(%s, %s)" % [host_id.inspect, Time.new.to_i.inspect])
333
- @update_host_tags_q6.execute(host_id, Time.new.to_i)
334
337
  end
335
338
  end
336
339
  end
@@ -1,3 +1,3 @@
1
1
  module Hotdog
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
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.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yamashita Yuu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-07 00:00:00.000000000 Z
11
+ date: 2015-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler