hotdog 0.7.1 → 0.8.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/commands/down.rb +3 -3
- data/lib/hotdog/commands/pssh.rb +1 -1
- data/lib/hotdog/commands/search.rb +23 -1
- data/lib/hotdog/commands/ssh.rb +7 -8
- data/lib/hotdog/commands/up.rb +1 -1
- data/lib/hotdog/commands.rb +10 -2
- data/lib/hotdog/version.rb +1 -1
- data/spec/core/commands_spec.rb +2 -2
- data/spec/parser/parser_spec.rb +36 -0
- 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: 9389d9529203f20a278c0446d57c1ae72e57cb99
|
4
|
+
data.tar.gz: 807eab226a18b286a38a7968bfb98ed27525b657
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef097ee620a3e70d38195b5f4f6ea32f4d7f439962f68495e7d6997e2e667f963d3ef6bff1395ab524cf5ac0f3a60b812a783a542f5bd74082e207971b96a821
|
7
|
+
data.tar.gz: e97de69542e3559ea62b19d1a35fb3d3c2ec30102719596050e15b66ab6e7cff06f05a202670a3a9ce054eac576938f8ebbc698fde046009c4d4036327e652d0
|
data/lib/hotdog/commands/down.rb
CHANGED
@@ -6,9 +6,9 @@ module Hotdog
|
|
6
6
|
module Commands
|
7
7
|
class Down < BaseCommand
|
8
8
|
def define_options(optparse, options={})
|
9
|
-
options
|
10
|
-
options
|
11
|
-
options
|
9
|
+
default_option(options, :downtime, 86400)
|
10
|
+
default_option(options, :start, Time.new)
|
11
|
+
default_option(options, :retry, 5)
|
12
12
|
optparse.on("--downtime DURATION") do |v|
|
13
13
|
options[:downtime] = v.to_i
|
14
14
|
end
|
data/lib/hotdog/commands/pssh.rb
CHANGED
@@ -10,8 +10,8 @@ module Hotdog
|
|
10
10
|
module Commands
|
11
11
|
class Pssh < SshAlike
|
12
12
|
def define_options(optparse, options={})
|
13
|
+
default_option(options, :show_identifier, true)
|
13
14
|
super
|
14
|
-
options[:show_identifier] = true
|
15
15
|
optparse.on("--[no-]identifier", "Each output line will be prepended with identifier.") do |identifier|
|
16
16
|
options[:show_identifier] = identifier
|
17
17
|
end
|
@@ -3,6 +3,19 @@
|
|
3
3
|
require "json"
|
4
4
|
require "parslet"
|
5
5
|
|
6
|
+
# Monkey patch to prevent `NoMethodError` after some parse error in parselet
|
7
|
+
module Parslet
|
8
|
+
class Cause
|
9
|
+
def cause
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def backtrace
|
14
|
+
[]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
6
19
|
module Hotdog
|
7
20
|
module Commands
|
8
21
|
class Search < BaseCommand
|
@@ -114,7 +127,8 @@ module Hotdog
|
|
114
127
|
)
|
115
128
|
}
|
116
129
|
rule(:expression1) {
|
117
|
-
( unary_op.as(:unary_op) >> spacing
|
130
|
+
( unary_op.as(:unary_op) >> spacing >> expression.as(:expression) \
|
131
|
+
| unary_op.as(:unary_op) >> spacing.maybe >> str('(') >> spacing.maybe >> expression.as(:expression) >> spacing.maybe >> str(')') \
|
118
132
|
| expression2 \
|
119
133
|
)
|
120
134
|
}
|
@@ -182,10 +196,14 @@ module Hotdog
|
|
182
196
|
}
|
183
197
|
rule(:identifier_glob) {
|
184
198
|
( binary_op.absent? >> unary_op.absent? >> identifier.repeat(0) >> (glob >> identifier.maybe).repeat(1) \
|
199
|
+
| binary_op >> identifier.repeat(1) >> (glob >> identifier.maybe).repeat(1) \
|
200
|
+
| unary_op >> identifier.repeat(1) >> (glob >> identifier.maybe).repeat(1) \
|
185
201
|
)
|
186
202
|
}
|
187
203
|
rule(:identifier) {
|
188
204
|
( binary_op.absent? >> unary_op.absent? >> match('[A-Za-z]') >> match('[-./0-9A-Z_a-z]').repeat(0) \
|
205
|
+
| binary_op >> match('[-./0-9A-Z_a-z]').repeat(1) \
|
206
|
+
| unary_op >> match('[-./0-9A-Z_a-z]').repeat(1) \
|
189
207
|
)
|
190
208
|
}
|
191
209
|
rule(:separator) {
|
@@ -199,10 +217,14 @@ module Hotdog
|
|
199
217
|
}
|
200
218
|
rule(:attribute_glob) {
|
201
219
|
( binary_op.absent? >> unary_op.absent? >> attribute.repeat(0) >> (glob >> attribute.maybe).repeat(1) \
|
220
|
+
| binary_op >> attribute.repeat(1) >> (glob >> attribute.maybe).repeat(1) \
|
221
|
+
| unary_op >> attribute.repeat(1) >> (glob >> attribute.maybe).repeat(1) \
|
202
222
|
)
|
203
223
|
}
|
204
224
|
rule(:attribute) {
|
205
225
|
( binary_op.absent? >> unary_op.absent? >> match('[-./0-9:A-Z_a-z]').repeat(1) \
|
226
|
+
| binary_op >> match('[-./0-9:A-Z_a-z]').repeat(1) \
|
227
|
+
| unary_op >> match('[-./0-9:A-Z_a-z]').repeat(1) \
|
206
228
|
)
|
207
229
|
}
|
208
230
|
rule(:glob) {
|
data/lib/hotdog/commands/ssh.rb
CHANGED
@@ -9,14 +9,13 @@ module Hotdog
|
|
9
9
|
module Commands
|
10
10
|
class SshAlike < Search
|
11
11
|
def define_options(optparse, options={})
|
12
|
-
options
|
13
|
-
options
|
14
|
-
options
|
15
|
-
options
|
16
|
-
options
|
17
|
-
options
|
18
|
-
options
|
19
|
-
|
12
|
+
default_option(options, :options, [])
|
13
|
+
default_option(options, :user, nil)
|
14
|
+
default_option(options, :port, nil)
|
15
|
+
default_option(options, :identity_file, nil)
|
16
|
+
default_option(options, :forward_agent, false)
|
17
|
+
default_option(options, :color, :auto)
|
18
|
+
default_option(options, :max_parallelism, Parallel.processor_count)
|
20
19
|
optparse.on("-o SSH_OPTION", "Passes this string to ssh command through shell. This option may be given multiple times") do |option|
|
21
20
|
options[:options] += [option]
|
22
21
|
end
|
data/lib/hotdog/commands/up.rb
CHANGED
data/lib/hotdog/commands.rb
CHANGED
@@ -59,6 +59,14 @@ module Hotdog
|
|
59
59
|
end
|
60
60
|
|
61
61
|
private
|
62
|
+
def default_option(options, key, default_value)
|
63
|
+
if options.key?(key)
|
64
|
+
options[key]
|
65
|
+
else
|
66
|
+
options[key] = default_value
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
62
70
|
def prepare(db, query)
|
63
71
|
k = (db.hash & MASK_DATABASE) | (query.hash & MASK_QUERY)
|
64
72
|
@prepared_statements[k] ||= db.prepare(query)
|
@@ -132,7 +140,7 @@ module Hotdog
|
|
132
140
|
}
|
133
141
|
]
|
134
142
|
end
|
135
|
-
q1 = "SELECT tags.name, GROUP_CONCAT(tags.value, ',') FROM hosts_tags " \
|
143
|
+
q1 = "SELECT LOWER(tags.name), GROUP_CONCAT(tags.value, ',') FROM hosts_tags " \
|
136
144
|
"INNER JOIN tags ON hosts_tags.tag_id = tags.id " \
|
137
145
|
"WHERE hosts_tags.host_id = ? AND tags.name IN (%s) " \
|
138
146
|
"GROUP BY tags.name;"
|
@@ -146,7 +154,7 @@ module Hotdog
|
|
146
154
|
if tag_name == "host"
|
147
155
|
host_names.fetch(host_id, nil)
|
148
156
|
else
|
149
|
-
tag_value = tag_values.fetch(tag_name, nil)
|
157
|
+
tag_value = tag_values.fetch(tag_name.downcase, nil)
|
150
158
|
if tag_value
|
151
159
|
if tag_value.empty?
|
152
160
|
tag_name # use `tag_name` as `tag_value` for the tags without any values
|
data/lib/hotdog/version.rb
CHANGED
data/spec/core/commands_spec.rb
CHANGED
@@ -81,7 +81,7 @@ describe "commands" do
|
|
81
81
|
|
82
82
|
it "get host fields without host" do
|
83
83
|
q1 = [
|
84
|
-
"SELECT tags.name, GROUP_CONCAT(tags.value, ',') FROM hosts_tags",
|
84
|
+
"SELECT LOWER(tags.name), GROUP_CONCAT(tags.value, ',') FROM hosts_tags",
|
85
85
|
"INNER JOIN tags ON hosts_tags.tag_id = tags.id",
|
86
86
|
"WHERE hosts_tags.host_id = ? AND tags.name IN (?, ?, ?)",
|
87
87
|
"GROUP BY tags.name;",
|
@@ -103,7 +103,7 @@ describe "commands" do
|
|
103
103
|
[[1, "host1"], [2, "host2"], [3, "host3"]]
|
104
104
|
}
|
105
105
|
q1 = [
|
106
|
-
"SELECT tags.name, GROUP_CONCAT(tags.value, ',') FROM hosts_tags",
|
106
|
+
"SELECT LOWER(tags.name), GROUP_CONCAT(tags.value, ',') FROM hosts_tags",
|
107
107
|
"INNER JOIN tags ON hosts_tags.tag_id = tags.id",
|
108
108
|
"WHERE hosts_tags.host_id = ? AND tags.name IN (?, ?)",
|
109
109
|
"GROUP BY tags.name;",
|
data/spec/parser/parser_spec.rb
CHANGED
@@ -94,6 +94,42 @@ describe "parser" do
|
|
94
94
|
expect(cmd.parse("( ( foo ) )")).to eq({identifier: "foo"})
|
95
95
|
end
|
96
96
|
|
97
|
+
it "parses 'identifier with prefix and'" do
|
98
|
+
expect(cmd.parse("android")).to eq({identifier: "android"})
|
99
|
+
end
|
100
|
+
|
101
|
+
it "parses 'identifier with infix and'" do
|
102
|
+
expect(cmd.parse("islander")).to eq({identifier: "islander"})
|
103
|
+
end
|
104
|
+
|
105
|
+
it "parses 'identifier with suffix and'" do
|
106
|
+
expect(cmd.parse("mainland")).to eq({identifier: "mainland"})
|
107
|
+
end
|
108
|
+
|
109
|
+
it "parses 'identifier with prefix or'" do
|
110
|
+
expect(cmd.parse("oreo")).to eq({identifier: "oreo"})
|
111
|
+
end
|
112
|
+
|
113
|
+
it "parses 'identifier with infix or'" do
|
114
|
+
expect(cmd.parse("category")).to eq({identifier: "category"})
|
115
|
+
end
|
116
|
+
|
117
|
+
it "parses 'identifier with suffix or'" do
|
118
|
+
expect(cmd.parse("imperator")).to eq({identifier: "imperator"})
|
119
|
+
end
|
120
|
+
|
121
|
+
it "parses 'identifier with prefix not'" do
|
122
|
+
expect(cmd.parse("nothing")).to eq({identifier: "nothing"})
|
123
|
+
end
|
124
|
+
|
125
|
+
it "parses 'identifier with infix not'" do
|
126
|
+
expect(cmd.parse("annotation")).to eq({identifier: "annotation"})
|
127
|
+
end
|
128
|
+
|
129
|
+
it "parses 'identifier with suffix not'" do
|
130
|
+
expect(cmd.parse("forgetmenot")).to eq({identifier: "forgetmenot"})
|
131
|
+
end
|
132
|
+
|
97
133
|
it "parses 'foo bar'" do
|
98
134
|
expect(cmd.parse("foo bar")).to eq({left: {identifier: "foo"}, binary_op: nil, right: {identifier: "bar"}})
|
99
135
|
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.
|
4
|
+
version: 0.8.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: 2016-
|
11
|
+
date: 2016-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|