hotdog 0.1.4 → 0.1.5
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 +7 -2
- data/lib/hotdog/commands/down.rb +14 -3
- data/lib/hotdog/commands/hosts.rb +1 -0
- data/lib/hotdog/commands/search.rb +17 -2
- data/lib/hotdog/commands/tags.rb +1 -0
- data/lib/hotdog/commands/up.rb +1 -1
- data/lib/hotdog/commands.rb +21 -25
- data/lib/hotdog/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a8a2587c731d0636d060338297376ef857135d4
|
4
|
+
data.tar.gz: 4ec81a26bfa37aa4a2352a3879526d86aa023a60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c718fa212bd63300938cbfb78b624b24b4df25da7ee351f586f51e4b357d1fc2bf5ff8f7b2144b4d531804e61bb13c5cd4f20dc179b38b6bc5933bc296ba8975
|
7
|
+
data.tar.gz: 6cfaa906fc298e47913400612584eba9d94877ad7addc9f52ac5768229864ece0699387cff42d0022207e043fcb78a86e309d7001785c913c42fa6dd5a6f3fb3
|
data/lib/hotdog/application.rb
CHANGED
@@ -29,11 +29,13 @@ module Hotdog
|
|
29
29
|
print0: false,
|
30
30
|
print1: true,
|
31
31
|
tags: [],
|
32
|
+
display_search_tags: false,
|
32
33
|
verbose: false,
|
33
34
|
}
|
34
35
|
define_options
|
35
36
|
end
|
36
37
|
attr_reader :options
|
38
|
+
attr_reader :optparse
|
37
39
|
|
38
40
|
def main(argv=[])
|
39
41
|
config = File.join(options[:confdir], "config.yml")
|
@@ -43,7 +45,7 @@ module Hotdog
|
|
43
45
|
@options = @options.merge(Hash[loaded.map { |key, value| [Symbol === key ? key : key.to_s.to_sym, value] }])
|
44
46
|
end
|
45
47
|
end
|
46
|
-
args = @optparse.
|
48
|
+
args = @optparse.order(argv)
|
47
49
|
|
48
50
|
unless options[:api_key]
|
49
51
|
raise("DATADOG_API_KEY is not set")
|
@@ -63,7 +65,7 @@ module Hotdog
|
|
63
65
|
|
64
66
|
begin
|
65
67
|
command = ( args.shift || "help" )
|
66
|
-
get_command(command).new(
|
68
|
+
get_command(command).new(self).tap do |cmd|
|
67
69
|
cmd.run(args)
|
68
70
|
end
|
69
71
|
rescue Errno::EPIPE
|
@@ -106,6 +108,9 @@ module Hotdog
|
|
106
108
|
@optparse.on("-a TAG", "-t TAG", "--tag TAG", "Use specified tag name/value") do |tag|
|
107
109
|
options[:tags] += [tag]
|
108
110
|
end
|
111
|
+
@optparse.on("-x", "--display-search-tags", "Show tags used in search expression") do |v|
|
112
|
+
options[:display_search_tags] = v
|
113
|
+
end
|
109
114
|
@optparse.on("-V", "--[no-]verbose", "Enable verbose mode") do |v|
|
110
115
|
options[:verbose] = v
|
111
116
|
end
|
data/lib/hotdog/commands/down.rb
CHANGED
@@ -6,14 +6,25 @@ module Hotdog
|
|
6
6
|
module Commands
|
7
7
|
class Down < BaseCommand
|
8
8
|
def run(args=[])
|
9
|
+
if args.index("--start").nil?
|
10
|
+
start = Time.new
|
11
|
+
else
|
12
|
+
start = Time.parse(args[args.index("--start") + 1])
|
13
|
+
args.slice!(args.index("--start"), 2)
|
14
|
+
end
|
15
|
+
if args.index("--downtime").nil?
|
16
|
+
downtime = 86400
|
17
|
+
else
|
18
|
+
downtime = args[args.index("--downtime") + 1].to_i
|
19
|
+
args.slice!(args.index("--downtime"), 2)
|
20
|
+
end
|
21
|
+
|
9
22
|
args.each do |arg|
|
10
23
|
if arg.index(":").nil?
|
11
24
|
scope = "host:#{arg}"
|
12
25
|
else
|
13
26
|
scope = arg
|
14
27
|
end
|
15
|
-
start = Time.new
|
16
|
-
downtime = 86400 # TODO: make configurable
|
17
28
|
code, schedule = @dog.schedule_downtime(scope, :start => start.to_i, :end => (start+downtime).to_i)
|
18
29
|
logger.debug("dog.schedule_donwtime(%s, :start => %s, :end => %s) #==> [%s, %s]" % [scope.inspect, start.to_i, (start+downtime).to_i, code.inspect, schedule.inspect])
|
19
30
|
if code.to_i / 100 != 2
|
@@ -24,7 +35,7 @@ module Hotdog
|
|
24
35
|
# Remove persistent.db to schedule update on next invocation
|
25
36
|
if not @db.nil?
|
26
37
|
@db.close
|
27
|
-
FileUtils.rm_f(File.join(confdir, PERSISTENT_DB))
|
38
|
+
FileUtils.rm_f(File.join(@options[:confdir], PERSISTENT_DB))
|
28
39
|
end
|
29
40
|
end
|
30
41
|
end
|
@@ -7,6 +7,7 @@ module Hotdog
|
|
7
7
|
module Commands
|
8
8
|
class Search < BaseCommand
|
9
9
|
def run(args=[])
|
10
|
+
args = optparse.parse(args)
|
10
11
|
expression = args.join(" ").strip
|
11
12
|
if expression.empty?
|
12
13
|
exit(1)
|
@@ -19,9 +20,19 @@ module Hotdog
|
|
19
20
|
exit(1)
|
20
21
|
end
|
21
22
|
|
23
|
+
drilldown = ->(n){
|
24
|
+
case
|
25
|
+
when n[:left] && n[:right] then drilldown.(n[:left]) + drilldown.(n[:right])
|
26
|
+
when n[:expression] then drilldown.(n[:expression])
|
27
|
+
when n[:identifier] then [n[:identifier]]
|
28
|
+
else []
|
29
|
+
end
|
30
|
+
}
|
31
|
+
identifiers = drilldown.call(node).map(&:to_s)
|
32
|
+
|
22
33
|
result = evaluate(node, self).sort
|
23
34
|
if 0 < result.length
|
24
|
-
result, fields = get_hosts(result)
|
35
|
+
result, fields = get_hosts(result, @options[:display_search_tags] ? identifiers : [])
|
25
36
|
STDOUT.print(format(result, fields: fields))
|
26
37
|
logger.info("found %d host(s)." % result.length)
|
27
38
|
else
|
@@ -59,7 +70,7 @@ module Hotdog
|
|
59
70
|
rule(:unary_expression) {
|
60
71
|
( spacing.maybe >> str('!').as(:unary_op) >> atom.as(:expression) \
|
61
72
|
| spacing.maybe >> str('~').as(:unary_op) >> atom.as(:expression) \
|
62
|
-
| spacing.maybe >>
|
73
|
+
| spacing.maybe >> (match('[Nn]') >> match('[Oo]') >> match('[Tt]')).as(:unary_op) >> atom.as(:expression) \
|
63
74
|
)
|
64
75
|
}
|
65
76
|
rule(:term) {
|
@@ -157,6 +168,8 @@ module Hotdog
|
|
157
168
|
end
|
158
169
|
|
159
170
|
class BinaryExpressionNode < ExpressionNode
|
171
|
+
attr_reader :left, :right
|
172
|
+
|
160
173
|
def initialize(op, left, right)
|
161
174
|
@op = op
|
162
175
|
@left = left
|
@@ -183,6 +196,8 @@ module Hotdog
|
|
183
196
|
end
|
184
197
|
|
185
198
|
class UnaryExpressionNode < ExpressionNode
|
199
|
+
attr_reader :expression
|
200
|
+
|
186
201
|
def initialize(op, expression)
|
187
202
|
@op = op
|
188
203
|
@expression = expression
|
data/lib/hotdog/commands/tags.rb
CHANGED
data/lib/hotdog/commands/up.rb
CHANGED
data/lib/hotdog/commands.rb
CHANGED
@@ -10,27 +10,14 @@ module Hotdog
|
|
10
10
|
class BaseCommand
|
11
11
|
PERSISTENT_DB = "persistent.db"
|
12
12
|
|
13
|
-
def initialize(
|
14
|
-
@application =
|
15
|
-
@
|
16
|
-
@
|
17
|
-
@fixed_string = options[:fixed_string]
|
18
|
-
@force = options[:force]
|
19
|
-
@formatter = options[:formatter]
|
20
|
-
@listing = options[:listing]
|
21
|
-
@logger = options[:logger]
|
22
|
-
@tags = options[:tags]
|
23
|
-
@options = options
|
13
|
+
def initialize(application)
|
14
|
+
@application = application
|
15
|
+
@logger = application.options[:logger]
|
16
|
+
@options = application.options
|
24
17
|
@dog = Dogapi::Client.new(options[:api_key], options[:application_key])
|
25
18
|
end
|
26
19
|
attr_reader :application
|
27
|
-
attr_reader :confdir
|
28
|
-
attr_reader :expiry
|
29
|
-
attr_reader :force
|
30
|
-
attr_reader :formatter
|
31
|
-
attr_reader :listing
|
32
20
|
attr_reader :logger
|
33
|
-
attr_reader :tags
|
34
21
|
attr_reader :options
|
35
22
|
|
36
23
|
def run(args=[])
|
@@ -48,12 +35,16 @@ module Hotdog
|
|
48
35
|
end
|
49
36
|
|
50
37
|
def fixed_string?()
|
51
|
-
@fixed_string
|
38
|
+
@options[:fixed_string]
|
52
39
|
end
|
53
40
|
|
54
41
|
private
|
55
42
|
def format(result, options={})
|
56
|
-
@formatter.format(result, @options.merge(options))
|
43
|
+
@options[:formatter].format(result, @options.merge(options))
|
44
|
+
end
|
45
|
+
|
46
|
+
def optparse()
|
47
|
+
@application.optparse
|
57
48
|
end
|
58
49
|
|
59
50
|
def glob?(s)
|
@@ -65,9 +56,14 @@ module Hotdog
|
|
65
56
|
not host_id.nil?
|
66
57
|
end
|
67
58
|
|
68
|
-
def get_hosts(hosts=[])
|
59
|
+
def get_hosts(hosts=[], identifiers=[])
|
69
60
|
update_db
|
70
|
-
if 0 < tags.length
|
61
|
+
if 0 < @options[:tags].length || 0 < identifiers.length
|
62
|
+
tags = if 0 < @options[:tags].length
|
63
|
+
@options[:tags] + identifiers
|
64
|
+
else
|
65
|
+
["host"] + identifiers
|
66
|
+
end
|
71
67
|
result = hosts.map { |host_id|
|
72
68
|
tags.map { |tag|
|
73
69
|
tag_name, tag_value = tag.split(":", 2)
|
@@ -85,7 +81,7 @@ module Hotdog
|
|
85
81
|
}
|
86
82
|
fields = tags
|
87
83
|
else
|
88
|
-
if @listing
|
84
|
+
if @options[:listing]
|
89
85
|
fields = []
|
90
86
|
hosts = execute("SELECT id, name FROM hosts WHERE id IN (%s)" % hosts.map { "?" }.join(", "), hosts)
|
91
87
|
result = hosts.map { |host_id, host_name|
|
@@ -108,10 +104,10 @@ module Hotdog
|
|
108
104
|
|
109
105
|
def update_db(options={})
|
110
106
|
if @db.nil?
|
111
|
-
FileUtils.mkdir_p(confdir)
|
112
|
-
persistent = File.join(confdir, PERSISTENT_DB)
|
107
|
+
FileUtils.mkdir_p(@options[:confdir])
|
108
|
+
persistent = File.join(@options[:confdir], PERSISTENT_DB)
|
113
109
|
|
114
|
-
if not @force and File.exist?(persistent) and Time.new < File.mtime(persistent) + expiry
|
110
|
+
if not @options[:force] and File.exist?(persistent) and Time.new < File.mtime(persistent) + @options[:expiry]
|
115
111
|
begin
|
116
112
|
persistent_db = SQLite3::Database.new(persistent)
|
117
113
|
persistent_db.execute("SELECT id, name FROM hosts LIMIT 1")
|
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.1.
|
4
|
+
version: 0.1.5
|
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-
|
11
|
+
date: 2015-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
requirements: []
|
134
134
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.
|
135
|
+
rubygems_version: 2.2.2
|
136
136
|
signing_key:
|
137
137
|
specification_version: 4
|
138
138
|
summary: Yet another command-line tool for Datadog
|