engineyard-visualvm 0.5.1 → 0.5.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.
- data/ChangeLog +10 -0
- data/README.md +2 -0
- data/Rakefile +12 -0
- data/lib/engineyard-visualvm/cli.rb +17 -7
- data/lib/engineyard-visualvm/version.rb +1 -1
- data/spec/engineyard-visualvm_spec.rb +22 -2
- data/spec/spec_helper.rb +19 -0
- metadata +2 -2
data/ChangeLog
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
2011-12-13 Nick Sieger <nick@nicksieger.com>
|
2
|
+
|
3
|
+
* (Changes): Release 0.5.2
|
4
|
+
|
5
|
+
* lib/engineyard-visualvm/cli.rb (EngineYard::VisualVM::Helpers#fetch_public_ip):
|
6
|
+
Use public hostname from environment's single instance
|
7
|
+
|
8
|
+
* lib/engineyard-visualvm/cli.rb (EngineYard::VisualVM::CLI#start):
|
9
|
+
Ensure host is in known_hosts file before launching visual vm
|
10
|
+
|
1
11
|
2011-12-08 Nick Sieger <nick@nicksieger.com>
|
2
12
|
|
3
13
|
* (Changes): Release 0.5.1
|
data/README.md
CHANGED
@@ -97,6 +97,8 @@ To try it yourself, do the following:
|
|
97
97
|
|
98
98
|
- Prompt for a JVM to connect to if more than one JVM process is
|
99
99
|
running on the server
|
100
|
+
- Prompt for an instance to connect to if the environment has multiple
|
101
|
+
instances
|
100
102
|
- Data collected by `jstatd` is not yet supported, so things like the
|
101
103
|
Visual GC tab are not supported yet.
|
102
104
|
- Additional utilities to make use of the JMX connection remotely
|
data/Rakefile
CHANGED
@@ -45,6 +45,18 @@ RSpec::Core::RakeTask.new
|
|
45
45
|
|
46
46
|
task :spec => :jar
|
47
47
|
|
48
|
+
# Override push to use engineyard key
|
49
|
+
class Bundler::GemHelper
|
50
|
+
def rubygem_push(path)
|
51
|
+
if Gem.configuration.api_keys.key? :engineyard
|
52
|
+
sh("gem push -k engineyard '#{path}'")
|
53
|
+
Bundler.ui.confirm "Pushed #{name} #{version} to rubygems.org"
|
54
|
+
else
|
55
|
+
raise ":engineyard key not set in ~/.gem/credentials"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
48
60
|
begin
|
49
61
|
require 'childprocess'
|
50
62
|
require 'jmx'
|
@@ -122,15 +122,21 @@ module EngineYard
|
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
|
-
# Return the public IP assigned to an
|
126
|
-
# may not be a booted cluster of
|
127
|
-
# exits if no public IP assigned
|
125
|
+
# Return the public IP or instance hostname assigned to an
|
126
|
+
# environment (which may or may not be a booted cluster of
|
127
|
+
# instances) Displays error and exits if no public IP assigned
|
128
|
+
# to the environment
|
128
129
|
def fetch_public_ip(environment)
|
129
|
-
|
130
|
-
|
130
|
+
if environment.load_balancer_ip_address
|
131
|
+
return environment.load_balancer_ip_address
|
131
132
|
end
|
132
133
|
|
133
|
-
environment.
|
134
|
+
if environment.instances.length == 1 && environment.instances.first.public_hostname
|
135
|
+
return environment.instances.first.public_hostname
|
136
|
+
end
|
137
|
+
|
138
|
+
warn "#{environment.account.name}/#{environment.name} has no assigned public IP address or hostname."
|
139
|
+
nil
|
134
140
|
end
|
135
141
|
end
|
136
142
|
|
@@ -173,6 +179,10 @@ module EngineYard
|
|
173
179
|
|
174
180
|
if ssh?
|
175
181
|
ssh_dest = ssh_host
|
182
|
+
unless system "ssh #{ssh_dest} true"
|
183
|
+
warn "Error establishing ssh connection; make sure you can `ssh #{ssh_dest}'."
|
184
|
+
exit 3
|
185
|
+
end
|
176
186
|
|
177
187
|
if socks_proxy?
|
178
188
|
proxy_port = next_free_port
|
@@ -181,7 +191,7 @@ module EngineYard
|
|
181
191
|
else
|
182
192
|
server_host, server_port = host, port
|
183
193
|
@host, @port = "localhost", next_free_port
|
184
|
-
@ssh_process = ChildProcess.build("ssh", "-NL", "#{@port}:#{@host}:#{server_port}",
|
194
|
+
@ssh_process = ChildProcess.build("ssh", "-NL", "#{@port}:#{@host}:#{server_port}", ssh_dest)
|
185
195
|
end
|
186
196
|
|
187
197
|
@ssh_process.start
|
@@ -23,7 +23,7 @@ describe EngineYard::VisualVM::Helpers do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
describe EngineYard::VisualVM::CLI do
|
26
|
-
let(:script) { Class.new(EngineYard::VisualVM::CLI) }
|
26
|
+
let(:script) { Class.new(EngineYard::VisualVM::CLI) { include SystemDouble } }
|
27
27
|
|
28
28
|
context "#help" do
|
29
29
|
it "prints the default port" do
|
@@ -42,6 +42,7 @@ describe EngineYard::VisualVM::CLI do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
context "#start" do
|
45
|
+
let(:system_double) { double("system").tap {|d| script.system_double = d } }
|
45
46
|
let(:ssh_process) { double("ssh process double").tap {|d| d.should_receive(:start) } }
|
46
47
|
let(:visualvm_process) do
|
47
48
|
double("visualvm process double").tap {|d|
|
@@ -83,6 +84,7 @@ describe EngineYard::VisualVM::CLI do
|
|
83
84
|
end
|
84
85
|
|
85
86
|
it "sets up an ssh tunnel if the user@host format is used" do
|
87
|
+
system_double.should_receive(:system).with("ssh user@example.com true").ordered.and_return true
|
86
88
|
ChildProcess.should_receive(:build).ordered.and_return do |*args|
|
87
89
|
args.join(' ').should =~ /ssh -NL.*user@example.com/
|
88
90
|
ssh_process
|
@@ -97,6 +99,7 @@ describe EngineYard::VisualVM::CLI do
|
|
97
99
|
end
|
98
100
|
|
99
101
|
it "allows an ssh tunnel to be forced" do
|
102
|
+
system_double.should_receive(:system).ordered.and_return true
|
100
103
|
ChildProcess.should_receive(:build).ordered.and_return do |*args|
|
101
104
|
args.join(' ').should =~ /ssh -NL/
|
102
105
|
ssh_process
|
@@ -122,6 +125,7 @@ describe EngineYard::VisualVM::CLI do
|
|
122
125
|
end
|
123
126
|
|
124
127
|
it "finds an open port for the local side of the ssh tunnel" do
|
128
|
+
system_double.should_receive(:system).ordered.and_return true
|
125
129
|
ChildProcess.should_receive(:build).ordered.and_return do |*args|
|
126
130
|
args.join(' ').should =~ /ssh -NL #{@next_port}:localhost:#{@port}/
|
127
131
|
ssh_process
|
@@ -139,7 +143,6 @@ describe EngineYard::VisualVM::CLI do
|
|
139
143
|
context "with --environment specified" do
|
140
144
|
let(:environment) do
|
141
145
|
double(:environment).tap {|e|
|
142
|
-
e.stub!(:load_balancer_ip_address).and_return "0.0.0.0"
|
143
146
|
e.stub!(:username).and_return "deploy"
|
144
147
|
}
|
145
148
|
end
|
@@ -151,6 +154,7 @@ describe EngineYard::VisualVM::CLI do
|
|
151
154
|
end
|
152
155
|
|
153
156
|
it "sets the user to 'deploy' and the host to the load balancer IP address" do
|
157
|
+
environment.stub!(:load_balancer_ip_address).and_return "0.0.0.0"
|
154
158
|
ChildProcess.should_receive(:build).ordered.and_return do |*args|
|
155
159
|
args.join(' ').should =~ /ssh -NL.* deploy@0.0.0.0/
|
156
160
|
ssh_process
|
@@ -163,6 +167,22 @@ describe EngineYard::VisualVM::CLI do
|
|
163
167
|
|
164
168
|
script.start(["start", "--environment=jruby"])
|
165
169
|
end
|
170
|
+
|
171
|
+
it "uses the public hostname of the first instance if no load balancer" do
|
172
|
+
environment.stub!(:load_balancer_ip_address).and_return nil
|
173
|
+
environment.stub!(:instances).and_return [double("instance").tap{|d| d.stub!(:public_hostname).and_return "example.com" }]
|
174
|
+
ChildProcess.should_receive(:build).ordered.and_return do |*args|
|
175
|
+
args.join(' ').should =~ /ssh -NL.* deploy@example.com/
|
176
|
+
ssh_process
|
177
|
+
end
|
178
|
+
ChildProcess.should_receive(:build).ordered.and_return do |*args|
|
179
|
+
args[2].should =~ /service:jmx:rmi.*localhost:/
|
180
|
+
visualvm_process
|
181
|
+
end
|
182
|
+
ssh_process.should_receive(:stop)
|
183
|
+
|
184
|
+
script.start(["start", "--environment=jruby"])
|
185
|
+
end
|
166
186
|
end
|
167
187
|
end
|
168
188
|
|
data/spec/spec_helper.rb
CHANGED
@@ -25,6 +25,25 @@ module EYVisualVMSpecHelpers
|
|
25
25
|
alias capture silence
|
26
26
|
end
|
27
27
|
|
28
|
+
module SystemDouble
|
29
|
+
def self.included(base)
|
30
|
+
def base.system_double
|
31
|
+
@@double
|
32
|
+
end
|
33
|
+
def base.system_double=(d)
|
34
|
+
@@double = d
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def system_double
|
39
|
+
@@double
|
40
|
+
end
|
41
|
+
|
42
|
+
def system(*args)
|
43
|
+
system_double.system(*args)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
28
47
|
RSpec.configure do |config|
|
29
48
|
config.include EYVisualVMSpecHelpers
|
30
49
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: engineyard-visualvm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.5.
|
5
|
+
version: 0.5.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Nick Sieger
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-12-
|
13
|
+
date: 2011-12-13 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: childprocess
|