hotdog 0.7.1 → 0.8.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/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
|