bixby-agent 0.3.1 → 0.3.2
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/.travis.yml +5 -2
- data/Gemfile +4 -6
- data/Gemfile.lock +56 -56
- data/VERSION +1 -1
- data/bixby-agent.gemspec +10 -16
- data/lib/bixby-agent/agent.rb +0 -1
- data/lib/bixby-agent/agent/handshake.rb +3 -5
- data/lib/bixby-agent/agent/shell_exec.rb +26 -31
- data/lib/bixby-agent/agent_handler.rb +0 -1
- data/lib/bixby-agent/app.rb +13 -13
- data/lib/bixby-agent/app/cli.rb +5 -19
- data/lib/bixby-agent/version.rb +1 -1
- data/lib/bixby-agent/websocket/client.rb +16 -4
- data/test/base.rb +1 -2
- data/test/helper.rb +0 -2
- data/test/stub_eventmachine.rb +1 -0
- data/test/test_agent.rb +2 -2
- data/test/test_app.rb +3 -6
- data/test/websocket/test_client.rb +5 -1
- metadata +7 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0269849a53e379766e5cbc9463c1e084af26739b
|
4
|
+
data.tar.gz: 67f156df0b65ccbe9e17f24d5b1c4a76719cb17f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2afe3e7f76744a99b76a87bc96e8f19c5db169ce5b7804b6bfc7128d1ac505eec25c8e2b51c7a55db2248acfb18a1a756c8eb76f7d3283b56cc8e3df953f778
|
7
|
+
data.tar.gz: aefb329dced8a26e2bb3e362badeb2c5128a037b53e778facd11e7ec39555e803d15e553d2d930c28fd219402e41cb733a7aaba435fee99dd025229d985140d1
|
data/.travis.yml
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
language: ruby
|
2
2
|
before_install:
|
3
|
+
- "gem install bundler --no-ri --no-rdoc"
|
3
4
|
- "curl -sL https://s3.bixby.io/wad > ~/wad"
|
4
5
|
- "chmod +x ~/wad"
|
5
6
|
install:
|
@@ -11,8 +12,9 @@ after_script:
|
|
11
12
|
- "bundle exec rake coveralls"
|
12
13
|
|
13
14
|
rvm:
|
14
|
-
- 2.
|
15
|
-
- 1.
|
15
|
+
- 2.0.0-p598
|
16
|
+
- 2.1.5
|
17
|
+
- 2.2.0
|
16
18
|
|
17
19
|
branches:
|
18
20
|
only:
|
@@ -20,6 +22,7 @@ branches:
|
|
20
22
|
|
21
23
|
env:
|
22
24
|
global:
|
25
|
+
- MICRON_NO_HTML="1"
|
23
26
|
- S3_REGION="us-east-1"
|
24
27
|
- S3_BUCKET_NAME="io.bixby.gemcache.wad.agent"
|
25
28
|
- secure: bnMJOHx5QrfTgOcxg0glw5x9mDoAJ0kKWILQaFCqwORwiJE4nh/3jYsx/uifVmSqOMXqY/9ozBwYrWeG6krPdcFCPS6mq4dVWsbtgQa31x9IWhjUg5lOt0MCrGXpq1JOD3CFIxnQ2f77hl0TzxutIfAtO023ad598+5/FVviyik=
|
data/Gemfile
CHANGED
@@ -4,7 +4,7 @@ group :self do
|
|
4
4
|
gem 'bixby-agent', :path => "."
|
5
5
|
end
|
6
6
|
|
7
|
-
gem 'bixby-common', "~> 0.
|
7
|
+
gem 'bixby-common', "~> 0.6"
|
8
8
|
gem 'bixby-client', "~> 0.5"
|
9
9
|
gem 'bixby-auth', "~> 0.1"
|
10
10
|
#gem 'bixby-auth', :path => "../auth"
|
@@ -16,11 +16,9 @@ gem 'daemons', "~> 1.1"
|
|
16
16
|
gem 'multi_json', "~> 1.8"
|
17
17
|
gem 'oj', "~> 2.11"
|
18
18
|
gem 'httpi', "~> 2.3"
|
19
|
-
gem 'curb', "~> 0.8"
|
20
19
|
gem 'facter', '~> 2.0.0'
|
21
20
|
gem 'mixlib-cli', "~> 1.5"
|
22
|
-
gem 'mixlib-shellout', "~>
|
23
|
-
gem 'highline', "~> 1.6"
|
21
|
+
gem 'mixlib-shellout', "~> 2.0"
|
24
22
|
gem 'uuidtools', "~> 2.1"
|
25
23
|
gem 'logging', "~> 1.8"
|
26
24
|
|
@@ -39,7 +37,7 @@ group :development do
|
|
39
37
|
gem "test_guard", :github => "chetan/test_guard"
|
40
38
|
|
41
39
|
# quality
|
42
|
-
gem "cane", :platforms => [:mri_19, :mri_20]
|
40
|
+
gem "cane", :platforms => [:mri_19, :mri_20, :mri_21, :mri_22]
|
43
41
|
end
|
44
42
|
|
45
43
|
group :development, :test do
|
@@ -52,7 +50,7 @@ group :development, :test do
|
|
52
50
|
gem 'mocha', :require => false
|
53
51
|
|
54
52
|
# tools
|
55
|
-
gem "simplecov", :platforms => [:mri_19, :mri_20]
|
53
|
+
gem "simplecov", :platforms => [:mri_19, :mri_20, :mri_21, :mri_22]
|
56
54
|
gem "coveralls", :require => false
|
57
55
|
gem "micron", :github => "chetan/micron"
|
58
56
|
gem 'rb-inotify', :require => false
|
data/Gemfile.lock
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
GIT
|
2
2
|
remote: git://github.com/chetan/jeweler.git
|
3
|
-
revision:
|
3
|
+
revision: 0334ea443c612bcbe3ebb7594b0a391fab233667
|
4
4
|
branch: bixby
|
5
5
|
specs:
|
6
6
|
jeweler (2.0.1)
|
@@ -14,7 +14,7 @@ GIT
|
|
14
14
|
|
15
15
|
GIT
|
16
16
|
remote: git://github.com/chetan/micron.git
|
17
|
-
revision:
|
17
|
+
revision: 576f6699e2a7ff1828ce5c333cc5fa433c0be380
|
18
18
|
specs:
|
19
19
|
micron (0.5.1)
|
20
20
|
ansi
|
@@ -36,19 +36,17 @@ GIT
|
|
36
36
|
PATH
|
37
37
|
remote: .
|
38
38
|
specs:
|
39
|
-
bixby-agent (0.3.
|
39
|
+
bixby-agent (0.3.2)
|
40
40
|
bixby-auth (~> 0.1)
|
41
41
|
bixby-client (~> 0.5)
|
42
|
-
bixby-common (~> 0.
|
43
|
-
curb (~> 0.8)
|
42
|
+
bixby-common (~> 0.6)
|
44
43
|
daemons (~> 1.1)
|
45
44
|
facter (~> 2.0.0)
|
46
45
|
god (~> 0.13)
|
47
|
-
highline (~> 1.6)
|
48
46
|
httpi (~> 2.3)
|
49
47
|
logging (~> 1.8)
|
50
48
|
mixlib-cli (~> 1.5)
|
51
|
-
mixlib-shellout (~>
|
49
|
+
mixlib-shellout (~> 2.0)
|
52
50
|
multi_json (~> 1.8)
|
53
51
|
oj (~> 2.11)
|
54
52
|
uuidtools (~> 2.1)
|
@@ -57,11 +55,11 @@ GEM
|
|
57
55
|
remote: https://rubygems.org/
|
58
56
|
specs:
|
59
57
|
CFPropertyList (2.2.8)
|
60
|
-
addressable (2.3.
|
61
|
-
ansi (1.
|
62
|
-
awesome_print (1.
|
63
|
-
bixby-auth (0.1.
|
64
|
-
bixby-client (0.5.
|
58
|
+
addressable (2.3.7)
|
59
|
+
ansi (1.5.0)
|
60
|
+
awesome_print (1.6.1)
|
61
|
+
bixby-auth (0.1.1)
|
62
|
+
bixby-client (0.5.2)
|
65
63
|
bixby-common
|
66
64
|
curb
|
67
65
|
fuzzy_file_finder
|
@@ -69,7 +67,7 @@ GEM
|
|
69
67
|
mixlib-shellout
|
70
68
|
multi_json
|
71
69
|
oj
|
72
|
-
bixby-common (0.
|
70
|
+
bixby-common (0.6.3)
|
73
71
|
bixby-auth (~> 0.1)
|
74
72
|
faye-websocket (~> 0.7)
|
75
73
|
httpi (~> 2.1)
|
@@ -82,13 +80,13 @@ GEM
|
|
82
80
|
celluloid (0.16.0)
|
83
81
|
timers (~> 4.0.0)
|
84
82
|
coderay (1.1.0)
|
85
|
-
colorize (0.7.
|
86
|
-
coveralls (0.7.
|
87
|
-
multi_json (~> 1.
|
88
|
-
rest-client (
|
89
|
-
simplecov (
|
90
|
-
term-ansicolor (
|
91
|
-
thor (
|
83
|
+
colorize (0.7.5)
|
84
|
+
coveralls (0.7.11)
|
85
|
+
multi_json (~> 1.10)
|
86
|
+
rest-client (>= 1.6.8, < 2)
|
87
|
+
simplecov (~> 0.9.1)
|
88
|
+
term-ansicolor (~> 1.3)
|
89
|
+
thor (~> 0.19.1)
|
92
90
|
crack (0.4.2)
|
93
91
|
safe_yaml (~> 1.0.0)
|
94
92
|
curb (0.8.6)
|
@@ -101,18 +99,18 @@ GEM
|
|
101
99
|
simplecov
|
102
100
|
simplecov-console
|
103
101
|
simplecov-html
|
104
|
-
eventmachine (1.0.
|
102
|
+
eventmachine (1.0.7)
|
105
103
|
facter (2.0.2)
|
106
104
|
CFPropertyList (~> 2.2.6)
|
107
|
-
faraday (0.9.
|
105
|
+
faraday (0.9.1)
|
108
106
|
multipart-post (>= 1.2, < 3)
|
109
|
-
faye-websocket (0.
|
107
|
+
faye-websocket (0.9.2)
|
110
108
|
eventmachine (>= 0.12.0)
|
111
|
-
websocket-driver (>= 0.
|
109
|
+
websocket-driver (>= 0.5.1)
|
112
110
|
ffi (1.9.6)
|
113
111
|
fuzzy_file_finder (1.0.4)
|
114
|
-
git (1.2.
|
115
|
-
github_api (0.12.
|
112
|
+
git (1.2.9.1)
|
113
|
+
github_api (0.12.3)
|
116
114
|
addressable (~> 2.3)
|
117
115
|
descendants_tracker (~> 0.0.4)
|
118
116
|
faraday (~> 0.8, < 0.10)
|
@@ -120,16 +118,16 @@ GEM
|
|
120
118
|
multi_json (>= 1.7.5, < 2.0)
|
121
119
|
nokogiri (~> 1.6.3)
|
122
120
|
oauth2
|
123
|
-
god (0.13.
|
121
|
+
god (0.13.5)
|
124
122
|
growl (1.0.3)
|
125
|
-
hashie (3.
|
126
|
-
highline (1.
|
127
|
-
hirb (0.7.
|
123
|
+
hashie (3.4.0)
|
124
|
+
highline (1.7.1)
|
125
|
+
hirb (0.7.3)
|
128
126
|
hitimes (1.2.2)
|
129
127
|
httpi (2.3.0)
|
130
128
|
rack
|
131
|
-
jwt (1.
|
132
|
-
listen (2.8.
|
129
|
+
jwt (1.4.1)
|
130
|
+
listen (2.8.5)
|
133
131
|
celluloid (>= 0.15.2)
|
134
132
|
rb-fsevent (>= 0.9.3)
|
135
133
|
rb-inotify (>= 0.9)
|
@@ -140,15 +138,16 @@ GEM
|
|
140
138
|
metaclass (0.0.4)
|
141
139
|
method_source (0.8.2)
|
142
140
|
mime-types (2.4.3)
|
143
|
-
mini_portile (0.6.
|
141
|
+
mini_portile (0.6.2)
|
144
142
|
mixlib-cli (1.5.0)
|
145
|
-
mixlib-shellout (
|
143
|
+
mixlib-shellout (2.0.1)
|
146
144
|
mocha (1.1.0)
|
147
145
|
metaclass (~> 0.0.1)
|
148
|
-
multi_json (1.
|
146
|
+
multi_json (1.11.0)
|
149
147
|
multi_xml (0.5.5)
|
150
148
|
multipart-post (2.0.0)
|
151
|
-
|
149
|
+
netrc (0.10.3)
|
150
|
+
nokogiri (1.6.6.2)
|
152
151
|
mini_portile (~> 0.6.0)
|
153
152
|
oauth2 (1.0.0)
|
154
153
|
faraday (>= 0.8, < 0.10)
|
@@ -156,45 +155,48 @@ GEM
|
|
156
155
|
multi_json (~> 1.3)
|
157
156
|
multi_xml (~> 0.5)
|
158
157
|
rack (~> 1.2)
|
159
|
-
oj (2.
|
160
|
-
parallel (1.
|
158
|
+
oj (2.12.1)
|
159
|
+
parallel (1.4.0)
|
161
160
|
pry (0.10.1)
|
162
161
|
coderay (~> 1.1.0)
|
163
162
|
method_source (~> 0.8.1)
|
164
163
|
slop (~> 3.4)
|
165
|
-
rack (1.
|
166
|
-
rake (10.
|
164
|
+
rack (1.6.0)
|
165
|
+
rake (10.4.2)
|
167
166
|
rb-fchange (0.0.6)
|
168
167
|
ffi
|
169
168
|
rb-fsevent (0.9.4)
|
170
169
|
rb-inotify (0.9.5)
|
171
170
|
ffi (>= 0.5.0)
|
172
|
-
rest-client (1.
|
173
|
-
mime-types (>= 1.16)
|
171
|
+
rest-client (1.7.3)
|
172
|
+
mime-types (>= 1.16, < 3.0)
|
173
|
+
netrc (~> 0.7)
|
174
174
|
safe_yaml (1.0.4)
|
175
|
-
semver2 (3.4.
|
176
|
-
simplecov (0.9.
|
175
|
+
semver2 (3.4.1)
|
176
|
+
simplecov (0.9.2)
|
177
177
|
docile (~> 1.1.0)
|
178
178
|
multi_json (~> 1.0)
|
179
|
-
simplecov-html (~> 0.
|
179
|
+
simplecov-html (~> 0.9.0)
|
180
180
|
simplecov-console (0.2.0)
|
181
181
|
colorize
|
182
182
|
hirb
|
183
183
|
simplecov
|
184
|
-
simplecov-html (0.
|
184
|
+
simplecov-html (0.9.0)
|
185
185
|
slop (3.6.0)
|
186
|
-
term-ansicolor (1.
|
187
|
-
tins (~> 0
|
188
|
-
thor (0.
|
189
|
-
thread_safe (0.3.
|
186
|
+
term-ansicolor (1.3.0)
|
187
|
+
tins (~> 1.0)
|
188
|
+
thor (0.19.1)
|
189
|
+
thread_safe (0.3.5)
|
190
190
|
timers (4.0.1)
|
191
191
|
hitimes
|
192
|
-
tins (
|
192
|
+
tins (1.3.4)
|
193
193
|
uuidtools (2.1.5)
|
194
194
|
webmock (1.20.4)
|
195
195
|
addressable (>= 2.3.6)
|
196
196
|
crack (>= 0.3.2)
|
197
|
-
websocket-driver (0.
|
197
|
+
websocket-driver (0.5.3)
|
198
|
+
websocket-extensions (>= 0.1.0)
|
199
|
+
websocket-extensions (0.1.2)
|
198
200
|
yard (0.8.7.6)
|
199
201
|
|
200
202
|
PLATFORMS
|
@@ -205,23 +207,21 @@ DEPENDENCIES
|
|
205
207
|
bixby-agent!
|
206
208
|
bixby-auth (~> 0.1)
|
207
209
|
bixby-client (~> 0.5)
|
208
|
-
bixby-common (~> 0.
|
210
|
+
bixby-common (~> 0.6)
|
209
211
|
cane
|
210
212
|
colorize
|
211
213
|
coveralls
|
212
|
-
curb (~> 0.8)
|
213
214
|
daemons (~> 1.1)
|
214
215
|
facter (~> 2.0.0)
|
215
216
|
god (~> 0.13)
|
216
217
|
growl
|
217
|
-
highline (~> 1.6)
|
218
218
|
hirb
|
219
219
|
httpi (~> 2.3)
|
220
220
|
jeweler!
|
221
221
|
logging (~> 1.8)
|
222
222
|
micron!
|
223
223
|
mixlib-cli (~> 1.5)
|
224
|
-
mixlib-shellout (~>
|
224
|
+
mixlib-shellout (~> 2.0)
|
225
225
|
mocha
|
226
226
|
multi_json (~> 1.8)
|
227
227
|
oj (~> 2.11)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/bixby-agent.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: bixby-agent 0.3.
|
5
|
+
# stub: bixby-agent 0.3.2 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "bixby-agent"
|
9
|
-
s.version = "0.3.
|
9
|
+
s.version = "0.3.2"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Chetan Sarva"]
|
14
|
-
s.date = "
|
14
|
+
s.date = "2015-03-19"
|
15
15
|
s.description = "Bixby Agent"
|
16
16
|
s.email = "chetan@pixelcop.net"
|
17
17
|
s.executables = ["bixby-agent"]
|
@@ -72,14 +72,14 @@ Gem::Specification.new do |s|
|
|
72
72
|
]
|
73
73
|
s.homepage = "http://github.com/chetan/bixby-agent"
|
74
74
|
s.licenses = ["MIT"]
|
75
|
-
s.rubygems_version = "2.4.
|
75
|
+
s.rubygems_version = "2.4.6"
|
76
76
|
s.summary = "Bixby Agent"
|
77
77
|
|
78
78
|
if s.respond_to? :specification_version then
|
79
79
|
s.specification_version = 4
|
80
80
|
|
81
81
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
82
|
-
s.add_runtime_dependency(%q<bixby-common>, ["~> 0.
|
82
|
+
s.add_runtime_dependency(%q<bixby-common>, ["~> 0.6"])
|
83
83
|
s.add_runtime_dependency(%q<bixby-client>, ["~> 0.5"])
|
84
84
|
s.add_runtime_dependency(%q<bixby-auth>, ["~> 0.1"])
|
85
85
|
s.add_runtime_dependency(%q<god>, ["~> 0.13"])
|
@@ -87,11 +87,9 @@ Gem::Specification.new do |s|
|
|
87
87
|
s.add_runtime_dependency(%q<multi_json>, ["~> 1.8"])
|
88
88
|
s.add_runtime_dependency(%q<oj>, ["~> 2.11"])
|
89
89
|
s.add_runtime_dependency(%q<httpi>, ["~> 2.3"])
|
90
|
-
s.add_runtime_dependency(%q<curb>, ["~> 0.8"])
|
91
90
|
s.add_runtime_dependency(%q<facter>, ["~> 2.0.0"])
|
92
91
|
s.add_runtime_dependency(%q<mixlib-cli>, ["~> 1.5"])
|
93
|
-
s.add_runtime_dependency(%q<mixlib-shellout>, ["~>
|
94
|
-
s.add_runtime_dependency(%q<highline>, ["~> 1.6"])
|
92
|
+
s.add_runtime_dependency(%q<mixlib-shellout>, ["~> 2.0"])
|
95
93
|
s.add_runtime_dependency(%q<uuidtools>, ["~> 2.1"])
|
96
94
|
s.add_runtime_dependency(%q<logging>, ["~> 1.8"])
|
97
95
|
s.add_development_dependency(%q<yard>, ["~> 0.7"])
|
@@ -113,7 +111,7 @@ Gem::Specification.new do |s|
|
|
113
111
|
s.add_development_dependency(%q<rb-fsevent>, [">= 0"])
|
114
112
|
s.add_development_dependency(%q<rb-fchange>, [">= 0"])
|
115
113
|
else
|
116
|
-
s.add_dependency(%q<bixby-common>, ["~> 0.
|
114
|
+
s.add_dependency(%q<bixby-common>, ["~> 0.6"])
|
117
115
|
s.add_dependency(%q<bixby-client>, ["~> 0.5"])
|
118
116
|
s.add_dependency(%q<bixby-auth>, ["~> 0.1"])
|
119
117
|
s.add_dependency(%q<god>, ["~> 0.13"])
|
@@ -121,11 +119,9 @@ Gem::Specification.new do |s|
|
|
121
119
|
s.add_dependency(%q<multi_json>, ["~> 1.8"])
|
122
120
|
s.add_dependency(%q<oj>, ["~> 2.11"])
|
123
121
|
s.add_dependency(%q<httpi>, ["~> 2.3"])
|
124
|
-
s.add_dependency(%q<curb>, ["~> 0.8"])
|
125
122
|
s.add_dependency(%q<facter>, ["~> 2.0.0"])
|
126
123
|
s.add_dependency(%q<mixlib-cli>, ["~> 1.5"])
|
127
|
-
s.add_dependency(%q<mixlib-shellout>, ["~>
|
128
|
-
s.add_dependency(%q<highline>, ["~> 1.6"])
|
124
|
+
s.add_dependency(%q<mixlib-shellout>, ["~> 2.0"])
|
129
125
|
s.add_dependency(%q<uuidtools>, ["~> 2.1"])
|
130
126
|
s.add_dependency(%q<logging>, ["~> 1.8"])
|
131
127
|
s.add_dependency(%q<yard>, ["~> 0.7"])
|
@@ -148,7 +144,7 @@ Gem::Specification.new do |s|
|
|
148
144
|
s.add_dependency(%q<rb-fchange>, [">= 0"])
|
149
145
|
end
|
150
146
|
else
|
151
|
-
s.add_dependency(%q<bixby-common>, ["~> 0.
|
147
|
+
s.add_dependency(%q<bixby-common>, ["~> 0.6"])
|
152
148
|
s.add_dependency(%q<bixby-client>, ["~> 0.5"])
|
153
149
|
s.add_dependency(%q<bixby-auth>, ["~> 0.1"])
|
154
150
|
s.add_dependency(%q<god>, ["~> 0.13"])
|
@@ -156,11 +152,9 @@ Gem::Specification.new do |s|
|
|
156
152
|
s.add_dependency(%q<multi_json>, ["~> 1.8"])
|
157
153
|
s.add_dependency(%q<oj>, ["~> 2.11"])
|
158
154
|
s.add_dependency(%q<httpi>, ["~> 2.3"])
|
159
|
-
s.add_dependency(%q<curb>, ["~> 0.8"])
|
160
155
|
s.add_dependency(%q<facter>, ["~> 2.0.0"])
|
161
156
|
s.add_dependency(%q<mixlib-cli>, ["~> 1.5"])
|
162
|
-
s.add_dependency(%q<mixlib-shellout>, ["~>
|
163
|
-
s.add_dependency(%q<highline>, ["~> 1.6"])
|
157
|
+
s.add_dependency(%q<mixlib-shellout>, ["~> 2.0"])
|
164
158
|
s.add_dependency(%q<uuidtools>, ["~> 2.1"])
|
165
159
|
s.add_dependency(%q<logging>, ["~> 1.8"])
|
166
160
|
s.add_dependency(%q<yard>, ["~> 0.7"])
|
data/lib/bixby-agent/agent.rb
CHANGED
@@ -14,19 +14,17 @@ module Handshake
|
|
14
14
|
# Register the agent with the server
|
15
15
|
#
|
16
16
|
# @param [String] url Bixby manager URL
|
17
|
-
# @param [String]
|
18
|
-
# @param [String] password Tenant registration password
|
17
|
+
# @param [String] token Client registration token
|
19
18
|
# @param [String] tags Comma-separated list of tags (e.g., "foo,bar")
|
20
19
|
#
|
21
20
|
# @return [JsonResponse] response from server
|
22
|
-
def register_agent(url,
|
21
|
+
def register_agent(url, token, tags=nil)
|
23
22
|
Bixby.manager_uri = @manager_uri = url
|
24
23
|
ret = Bixby::Inventory.register_agent({
|
25
24
|
:uuid => @uuid,
|
26
25
|
:public_key => self.public_key.to_s,
|
27
26
|
:hostname => get_hostname(),
|
28
|
-
:
|
29
|
-
:password => password,
|
27
|
+
:token => token,
|
30
28
|
:tags => tags,
|
31
29
|
:version => Bixby::Agent::VERSION
|
32
30
|
})
|
@@ -38,10 +38,12 @@ module ShellExec
|
|
38
38
|
old_env[r] = ENV.delete(r) if ENV.include?(r) }
|
39
39
|
|
40
40
|
logger.debug("exec: #{cmd}")
|
41
|
+
uid = lookup_id(:uid, spec.user)
|
42
|
+
gid = lookup_id(:gid, spec.group)
|
41
43
|
shell = Mixlib::ShellOut.new(cmd, :input => spec.stdin,
|
42
|
-
:env => spec.env,
|
43
|
-
:user => uid
|
44
|
-
:group => gid
|
44
|
+
:env => reset_env(spec.env, uid),
|
45
|
+
:user => uid,
|
46
|
+
:group => gid)
|
45
47
|
|
46
48
|
shell.run_command
|
47
49
|
|
@@ -55,51 +57,44 @@ module ShellExec
|
|
55
57
|
|
56
58
|
private
|
57
59
|
|
58
|
-
#
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
if Process.uid != 0 then
|
64
|
-
logger.warn("Can't change effective uid unless running as root")
|
65
|
-
return nil
|
60
|
+
# Merge in the correct ENV settings for the target user
|
61
|
+
def reset_env(env, uid)
|
62
|
+
if uid.nil? || uid == Process.uid then
|
63
|
+
# no need to change
|
64
|
+
return env
|
66
65
|
end
|
67
66
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
rescue ArgumentError => ex
|
72
|
-
logger.warn("Username '#{user}' was invalid: #{ex.message}")
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
begin
|
77
|
-
return Etc.getpwnam("bixby").uid
|
78
|
-
rescue ArgumentError
|
79
|
-
end
|
80
|
-
return nil
|
67
|
+
env ||= {}
|
68
|
+
user = Etc.getpwuid(uid)
|
69
|
+
env.merge({"HOME" => user.dir, "USER" => user.name})
|
81
70
|
end
|
82
71
|
|
83
|
-
#
|
72
|
+
# Lookup the id of the given user or group
|
73
|
+
#
|
74
|
+
# @param [Symbol] type :uid or :gid
|
75
|
+
# @param [String] str user or group name [Optional, default=bixby]
|
84
76
|
#
|
85
|
-
# @param [String] group group to run as [Optional, default=bixby]
|
86
77
|
# @return [Fixnum]
|
87
|
-
def
|
78
|
+
def lookup_id(type, str=nil)
|
88
79
|
if Process.uid != 0 then
|
89
80
|
logger.warn("Can't change effective gid unless running as root")
|
90
81
|
return nil
|
91
82
|
end
|
92
83
|
|
93
|
-
|
84
|
+
method = type == :uid ? :getpwnam : :getgrnam
|
85
|
+
|
86
|
+
if !(str.nil? or str.empty?) then
|
94
87
|
begin
|
95
|
-
|
88
|
+
logger.debug "Running as #{type} '#{str}'"
|
89
|
+
return Etc.send(method, str).send(type)
|
96
90
|
rescue ArgumentError => ex
|
97
|
-
logger.warn("
|
91
|
+
logger.warn("#{type} lookup for '#{str}' failed: #{ex.message}")
|
98
92
|
end
|
99
93
|
end
|
100
94
|
|
101
95
|
begin
|
102
|
-
|
96
|
+
logger.debug "Running as #{type} 'bixby' (default)"
|
97
|
+
return Etc.send(method, "bixby").send(type)
|
103
98
|
rescue ArgumentError
|
104
99
|
end
|
105
100
|
return nil
|
data/lib/bixby-agent/app.rb
CHANGED
@@ -5,7 +5,6 @@ require 'bixby-agent/app/cli'
|
|
5
5
|
require 'bixby-agent/help/system_time'
|
6
6
|
|
7
7
|
require 'daemons'
|
8
|
-
require 'highline/import'
|
9
8
|
|
10
9
|
module Bixby
|
11
10
|
class App
|
@@ -62,12 +61,9 @@ class App
|
|
62
61
|
raise ConfigException, "Bad manager URI: '#{uri}'"
|
63
62
|
end
|
64
63
|
|
65
|
-
tenant = @config[:tenant] || HighLine.new.ask("Tenant: ")
|
66
|
-
password = @config[:password] || HighLine.new.ask("Enter agent registration password: ") { |q| q.echo = "*" }
|
67
|
-
|
68
64
|
# register
|
69
65
|
$stdout.puts "Going to register with manager: #{uri}"
|
70
|
-
if (ret = agent.register_agent(uri,
|
66
|
+
if (ret = agent.register_agent(uri, @config[:token], @config[:tags])).fail? then
|
71
67
|
$stderr.puts "error: failed to register with manager!"
|
72
68
|
$stderr.puts "reason:"
|
73
69
|
if ret.message =~ /900 seconds old/ then
|
@@ -125,21 +121,26 @@ class App
|
|
125
121
|
def start_websocket_client
|
126
122
|
# make sure log level is still set correctly here
|
127
123
|
Bixby::Log.setup_logger(:level => Logging.appenders["file"].level)
|
128
|
-
logger.info "Started Bixby Agent"
|
124
|
+
logger.info "Started Bixby Agent #{Bixby::Agent::VERSION}"
|
129
125
|
@client = Bixby::WebSocket::Client.new(Bixby.agent.manager_ws_uri, AgentHandler)
|
130
126
|
trap_signals()
|
131
127
|
@client.start
|
132
128
|
end
|
133
129
|
|
134
130
|
def trap_signals
|
135
|
-
|
136
|
-
|
137
|
-
|
131
|
+
|
132
|
+
Bixby::Signal.trap(%w{INT QUIT TERM}) do |sig|
|
133
|
+
@client.stop()
|
134
|
+
if sig == "INT" then
|
138
135
|
puts # to get a blank line after the ^C in the term
|
139
|
-
reason =
|
140
|
-
|
136
|
+
reason = " (^C)"
|
137
|
+
else
|
138
|
+
reason = ""
|
141
139
|
end
|
140
|
+
logger.warn "caught #{sig}#{reason} signal; exiting"
|
142
141
|
end
|
142
|
+
|
143
|
+
Bixby::ThreadDump.trap!
|
143
144
|
end
|
144
145
|
|
145
146
|
# If running as root, fix ownership of var and etc dirs
|
@@ -192,8 +193,7 @@ class App
|
|
192
193
|
end
|
193
194
|
|
194
195
|
# Copied from daemons gem. We hit a bug where closing FDs failed,
|
195
|
-
#
|
196
|
-
# all cleanly before daemonizing.
|
196
|
+
# so close them all cleanly before daemonizing.
|
197
197
|
def close_fds
|
198
198
|
# don't close stdin/out/err (0/1/2)
|
199
199
|
3.upto(8192).each do |i|
|
data/lib/bixby-agent/app/cli.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
|
2
2
|
require 'mixlib/cli'
|
3
|
-
require 'highline/import'
|
4
3
|
|
5
4
|
module Bixby
|
6
5
|
class App
|
@@ -30,7 +29,7 @@ Where <command> is one of:
|
|
30
29
|
|
31
30
|
To register with the manager:
|
32
31
|
|
33
|
-
#{$0} --register [URL]
|
32
|
+
#{$0} --register [URL] --token TOKEN [--tags TAG1,TAG2]
|
34
33
|
|
35
34
|
Options:
|
36
35
|
|
@@ -44,24 +43,11 @@ EOF
|
|
44
43
|
:description => "Register with the management server (optional URL, default: https://bixby.io)",
|
45
44
|
:proc => Proc.new { |url| url || "https://bixby.io" } # default URL
|
46
45
|
|
47
|
-
option :
|
46
|
+
option :token,
|
48
47
|
:on => :head,
|
49
|
-
:short => "-t
|
50
|
-
:long => "--
|
51
|
-
:description => "
|
52
|
-
|
53
|
-
option :password,
|
54
|
-
:on => :head,
|
55
|
-
:short => "-P [PASSWORD]",
|
56
|
-
:long => "--password [PASSWORD]",
|
57
|
-
:description => "Agent registration password (prompt if not supplied)",
|
58
|
-
:proc => Proc.new { |c|
|
59
|
-
if c then
|
60
|
-
c
|
61
|
-
else
|
62
|
-
HighLine.new.ask("Enter agent registration password: ") { |q| q.echo = "*" }
|
63
|
-
end
|
64
|
-
}
|
48
|
+
:short => "-t TOKEN",
|
49
|
+
:long => "--token TOKEN",
|
50
|
+
:description => "Client registration token"
|
65
51
|
|
66
52
|
option :tags,
|
67
53
|
:on => :head,
|
data/lib/bixby-agent/version.rb
CHANGED
@@ -20,6 +20,7 @@ module Bixby
|
|
20
20
|
@handler = handler
|
21
21
|
@tries = 0
|
22
22
|
@exiting = false
|
23
|
+
@thread_pool = Bixby::ThreadPool.new(:min_size => 1, :max_size => 4)
|
23
24
|
end
|
24
25
|
|
25
26
|
# Start the Client thread
|
@@ -53,11 +54,19 @@ module Bixby
|
|
53
54
|
# the connection open forever, reconnecting as needed.
|
54
55
|
def connect
|
55
56
|
|
57
|
+
# cleanup any previously opened connections
|
58
|
+
if !@ws.nil? && ws.ready_state != Faye::WebSocket::API::CLOSED then
|
59
|
+
begin
|
60
|
+
@ws.close
|
61
|
+
rescue Exception => ex
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
56
65
|
# Ping is set to 55 sec to workaround issues with certain gateway devices which have a hard
|
57
66
|
# 60 sec timeout, like the AWS ELB:
|
58
67
|
# http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-healthcheck.html
|
59
68
|
@ws = Faye::WebSocket::Client.new(@url, nil, :ping => 55)
|
60
|
-
@api = Bixby::WebSocket::APIChannel.new(@ws, @handler)
|
69
|
+
@api = Bixby::WebSocket::APIChannel.new(@ws, @handler, @thread_pool)
|
61
70
|
|
62
71
|
ws.on :open do |e|
|
63
72
|
begin
|
@@ -82,7 +91,7 @@ module Bixby
|
|
82
91
|
api.close(e)
|
83
92
|
return if @exiting or not EM.reactor_running?
|
84
93
|
if was_connected then
|
85
|
-
logger.info "lost connection to manager"
|
94
|
+
logger.info "lost connection to manager (code=#{e.code}; reason=\"#{e.reason}\")"
|
86
95
|
else
|
87
96
|
logger.debug "failed to connect"
|
88
97
|
end
|
@@ -120,6 +129,9 @@ module Bixby
|
|
120
129
|
end
|
121
130
|
|
122
131
|
# Start a thread to watch for auth timeout
|
132
|
+
#
|
133
|
+
# Because the CONNECT request is fully-async, we need to make sure a reply is received
|
134
|
+
# within a certain time limit. If not, reconnect
|
123
135
|
Thread.new do
|
124
136
|
begin
|
125
137
|
sec = 60
|
@@ -155,13 +167,13 @@ module Bixby
|
|
155
167
|
|
156
168
|
if @exiting or not EM.reactor_running? then
|
157
169
|
# shutting down, don't try to reconnect
|
158
|
-
logger.
|
170
|
+
logger.info "not reconnecting since we are shutting down"
|
159
171
|
return false
|
160
172
|
end
|
161
173
|
|
162
174
|
@tries += 1
|
163
175
|
if @tries == 1 then
|
164
|
-
logger.
|
176
|
+
logger.info "retrying immediately"
|
165
177
|
|
166
178
|
# :nocov:
|
167
179
|
elsif @tries == 2 then
|
data/test/base.rb
CHANGED
@@ -18,8 +18,7 @@ module Bixby
|
|
18
18
|
@support_path = File.join(@git_path, "test", "support")
|
19
19
|
|
20
20
|
@manager_uri = "http://localhost:3000"
|
21
|
-
@
|
22
|
-
@password = "foobar"
|
21
|
+
@token = "ABCDEF012345"
|
23
22
|
@root_dir = Dir.mktmpdir("bixby-agent-test-")
|
24
23
|
@port = 9999
|
25
24
|
|
data/test/helper.rb
CHANGED
data/test/stub_eventmachine.rb
CHANGED
data/test/test_agent.rb
CHANGED
@@ -74,11 +74,11 @@ class TestAgent < TestCase
|
|
74
74
|
|
75
75
|
# stub out http request
|
76
76
|
stub_request(:post, "#{@manager_uri}/api").with { |req|
|
77
|
-
req.body =~ /inventory:register_agent/ and req.body =~ /"
|
77
|
+
req.body =~ /inventory:register_agent/ and req.body =~ /"token":"#{@token}"/
|
78
78
|
|
79
79
|
}.to_return(:body => response_str, :status => 200)
|
80
80
|
|
81
|
-
response = @agent.register_agent(@manager_uri, @
|
81
|
+
response = @agent.register_agent(@manager_uri, @token)
|
82
82
|
assert response.status == "success"
|
83
83
|
|
84
84
|
key_file = Bixby.path("etc", "server.pub")
|
data/test/test_app.rb
CHANGED
@@ -15,8 +15,7 @@ class TestApp < TestCase
|
|
15
15
|
ARGV.clear
|
16
16
|
ARGV << "--register" << @manager_uri
|
17
17
|
ARGV << "-d" << @root_dir
|
18
|
-
ARGV << "--
|
19
|
-
ARGV << "--password" << "mypass"
|
18
|
+
ARGV << "--token" << "mytoken"
|
20
19
|
|
21
20
|
response_str = MultiJson.dump({
|
22
21
|
:data => {:server_key => "-----BEGIN RSA PUBLIC KEY-----",
|
@@ -63,8 +62,7 @@ class TestApp < TestCase
|
|
63
62
|
ARGV << "--register" # uri should default to bixby.io
|
64
63
|
ARGV << "--debug"
|
65
64
|
ARGV << "--directory" << @root_dir
|
66
|
-
ARGV << "--
|
67
|
-
ARGV << "--password" << "mypass"
|
65
|
+
ARGV << "--token" << "mytoken"
|
68
66
|
|
69
67
|
Bixby::WebSocket::Client.any_instance.expects(:start).once()
|
70
68
|
|
@@ -116,8 +114,7 @@ class TestApp < TestCase
|
|
116
114
|
ARGV << "--register" # uri should default to bixby.io
|
117
115
|
ARGV << "--debug"
|
118
116
|
ARGV << "--directory" << @root_dir
|
119
|
-
ARGV << "--
|
120
|
-
ARGV << "--password" << "mypass"
|
117
|
+
ARGV << "--token" << "mytoken"
|
121
118
|
|
122
119
|
stub_request(:get, "http://google.com/").to_return(:status => 200, :body => "", :headers => {"Date" => (Time.new+1).utc.to_s})
|
123
120
|
|
@@ -19,7 +19,10 @@ module WebSocket
|
|
19
19
|
class TestClient < TestCase
|
20
20
|
|
21
21
|
class FakeClient
|
22
|
-
|
22
|
+
class Event
|
23
|
+
attr_reader :code, :reason
|
24
|
+
end
|
25
|
+
attr_reader :types, :ready_state
|
23
26
|
def initialize
|
24
27
|
@types = {}
|
25
28
|
end
|
@@ -27,6 +30,7 @@ class TestClient < TestCase
|
|
27
30
|
@types[type] = block
|
28
31
|
end
|
29
32
|
def trigger(type, event)
|
33
|
+
event ||= Event.new
|
30
34
|
@types[type].call(event)
|
31
35
|
end
|
32
36
|
def close
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bixby-agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chetan Sarva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bixby-common
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.6'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bixby-client
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,20 +122,6 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '2.3'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: curb
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0.8'
|
132
|
-
type: :runtime
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0.8'
|
139
125
|
- !ruby/object:Gem::Dependency
|
140
126
|
name: facter
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,28 +156,14 @@ dependencies:
|
|
170
156
|
requirements:
|
171
157
|
- - "~>"
|
172
158
|
- !ruby/object:Gem::Version
|
173
|
-
version: '
|
174
|
-
type: :runtime
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - "~>"
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '1.6'
|
181
|
-
- !ruby/object:Gem::Dependency
|
182
|
-
name: highline
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
184
|
-
requirements:
|
185
|
-
- - "~>"
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '1.6'
|
159
|
+
version: '2.0'
|
188
160
|
type: :runtime
|
189
161
|
prerelease: false
|
190
162
|
version_requirements: !ruby/object:Gem::Requirement
|
191
163
|
requirements:
|
192
164
|
- - "~>"
|
193
165
|
- !ruby/object:Gem::Version
|
194
|
-
version: '
|
166
|
+
version: '2.0'
|
195
167
|
- !ruby/object:Gem::Dependency
|
196
168
|
name: uuidtools
|
197
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -550,7 +522,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
550
522
|
version: '0'
|
551
523
|
requirements: []
|
552
524
|
rubyforge_project:
|
553
|
-
rubygems_version: 2.4.
|
525
|
+
rubygems_version: 2.4.6
|
554
526
|
signing_key:
|
555
527
|
specification_version: 4
|
556
528
|
summary: Bixby Agent
|