stella 2.1.1.002 → 2.1.2.001
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/CHANGES.txt +9 -0
- data/VERSION.yml +2 -2
- data/bin/stella +1 -0
- data/lib/stella.rb +67 -28
- data/lib/stella/cli.rb +23 -16
- data/lib/stella/core_ext.rb +14 -0
- data/lib/stella/report.rb +3 -0
- data/stella.gemspec +1 -2
- metadata +1 -2
- data/lib/stella/api.rb +0 -75
data/CHANGES.txt
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
STELLA, CHANGES
|
|
2
2
|
|
|
3
|
+
#### 2.1.2 (2011-07-06) ###############################
|
|
4
|
+
|
|
5
|
+
* FIXED: Stella::Report#postprocess loads log from a hash.
|
|
6
|
+
* ADDED: Wait only up to 35 seconds for a remote checkup
|
|
7
|
+
* CHANGE: Move stella/api.rb content to stella.rb
|
|
8
|
+
* CHANGE: CLI output
|
|
9
|
+
* CHANGE: Removed Stella::Template and require 'erb'
|
|
10
|
+
|
|
11
|
+
|
|
3
12
|
#### 2.1.1 (2011-07-06) ###############################
|
|
4
13
|
|
|
5
14
|
* ADDED: Append more info URI to CLI output for remote checkups
|
data/VERSION.yml
CHANGED
data/bin/stella
CHANGED
|
@@ -39,6 +39,7 @@ class Stella::CLI::Definition
|
|
|
39
39
|
global :D, :debug, "Enable debug mode" do
|
|
40
40
|
Drydock.debug true
|
|
41
41
|
Stella.debug = true
|
|
42
|
+
Stella::API.debug_output $stdout
|
|
42
43
|
end
|
|
43
44
|
global :P, :pause, Integer, "Seconds to wait before starting test"
|
|
44
45
|
#global :H, :withheader, "Include X-Stella-ID request header"
|
data/lib/stella.rb
CHANGED
|
@@ -14,7 +14,7 @@ $:.unshift STELLA_LIB_HOME
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
require 'yajl'
|
|
17
|
-
require '
|
|
17
|
+
require 'httparty'
|
|
18
18
|
require 'storable'
|
|
19
19
|
require 'benelux'
|
|
20
20
|
require 'gibbler/aliases'
|
|
@@ -40,20 +40,6 @@ class Stella
|
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
class MatchData
|
|
44
|
-
include Gibbler::String
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
module Addressable
|
|
48
|
-
class URI
|
|
49
|
-
include Gibbler::String
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
class OpenStruct
|
|
54
|
-
include Gibbler::Object
|
|
55
|
-
end
|
|
56
|
-
|
|
57
43
|
#
|
|
58
44
|
# Any object that wants to be serialized to JSON
|
|
59
45
|
# ought to inherit from this class.
|
|
@@ -217,20 +203,73 @@ class Stella
|
|
|
217
203
|
end
|
|
218
204
|
end
|
|
219
205
|
|
|
220
|
-
class Stella
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
206
|
+
class Stella
|
|
207
|
+
class API
|
|
208
|
+
include HTTParty
|
|
209
|
+
ssl_ca_file Stella::Client::SSL_CERT_PATH
|
|
210
|
+
format :json
|
|
211
|
+
attr_reader :httparty_opts, :response, :account, :key
|
|
212
|
+
def initialize account=nil, key=nil, httparty_opts={}
|
|
213
|
+
self.class.base_uri ENV['STELLA_HOST'] || 'https://www.blamestella.com/api/v2'
|
|
214
|
+
@httparty_opts = httparty_opts
|
|
215
|
+
@account = account || ENV['STELLA_ACCOUNT']
|
|
216
|
+
@key = key || ENV['STELLA_KEY']
|
|
217
|
+
unless @account.to_s.empty? || @key.to_s.empty?
|
|
218
|
+
httparty_opts[:basic_auth] ||= { :username => @account, :password => @key }
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
def get path, params=nil
|
|
222
|
+
opts = httparty_opts
|
|
223
|
+
opts[:query] = params || {}
|
|
224
|
+
execute_request :get, path, opts
|
|
225
|
+
end
|
|
226
|
+
def post path, params=nil
|
|
227
|
+
opts = httparty_opts
|
|
228
|
+
opts[:body] = params || {}
|
|
229
|
+
execute_request :post, path, opts
|
|
230
|
+
end
|
|
231
|
+
def site_uri path
|
|
232
|
+
uri = Addressable::URI.parse self.class.base_uri
|
|
233
|
+
uri.path = uri_path(path)
|
|
234
|
+
uri.to_s
|
|
235
|
+
end
|
|
236
|
+
private
|
|
237
|
+
def uri_path *args
|
|
238
|
+
args.unshift '' # force leading slash
|
|
239
|
+
path = args.flatten.join('/')
|
|
240
|
+
path.gsub '//', '/'
|
|
241
|
+
end
|
|
242
|
+
def execute_request meth, path, opts
|
|
243
|
+
path = uri_path [path]
|
|
244
|
+
@response = self.class.send meth, path, opts
|
|
245
|
+
indifferent_params @response.parsed_response
|
|
246
|
+
end
|
|
247
|
+
# Enable string or symbol key access to the nested params hash.
|
|
248
|
+
def indifferent_params(params)
|
|
249
|
+
if params.is_a?(Hash)
|
|
250
|
+
params = indifferent_hash.merge(params)
|
|
251
|
+
params.each do |key, value|
|
|
252
|
+
next unless value.is_a?(Hash) || value.is_a?(Array)
|
|
253
|
+
params[key] = indifferent_params(value)
|
|
254
|
+
end
|
|
255
|
+
elsif params.is_a?(Array)
|
|
256
|
+
params.collect! do |value|
|
|
257
|
+
if value.is_a?(Hash) || value.is_a?(Array)
|
|
258
|
+
indifferent_params(value)
|
|
259
|
+
else
|
|
260
|
+
value
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
# Creates a Hash with indifferent access.
|
|
266
|
+
def indifferent_hash
|
|
267
|
+
Hash.new {|hash,key| hash[key.to_s] if Symbol === key }
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
class Unauthorized < RuntimeError
|
|
271
|
+
end
|
|
232
272
|
end
|
|
233
|
-
def to_s() src end
|
|
234
273
|
end
|
|
235
274
|
|
|
236
275
|
|
data/lib/stella/cli.rb
CHANGED
|
@@ -13,7 +13,6 @@ class Stella::CLI < Drydock::Command
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def checkup
|
|
16
|
-
require 'stella/api'
|
|
17
16
|
base_uri = Stella.canonical_uri(@argv.first)
|
|
18
17
|
run_opts = {
|
|
19
18
|
:repetitions => @option.repetitions || 1,
|
|
@@ -42,11 +41,15 @@ class Stella::CLI < Drydock::Command
|
|
|
42
41
|
STDERR.puts ret[:msg]
|
|
43
42
|
@exit_code = 1 and return
|
|
44
43
|
end
|
|
44
|
+
count = 0
|
|
45
45
|
begin
|
|
46
46
|
run_hash = @api.get "/checkup/#{ret[:runid]}"
|
|
47
47
|
@run = Stella::Testrun.from_hash run_hash if run_hash
|
|
48
|
+
STDERR.print '.' if @global.verbose > 0
|
|
48
49
|
sleep 1 if @run && !@run.done?
|
|
49
|
-
|
|
50
|
+
count += 1
|
|
51
|
+
end while @run && !@run.done? && count < 35
|
|
52
|
+
raise "Sorry, that took too long" if count >= 35
|
|
50
53
|
else
|
|
51
54
|
if @global.testplan
|
|
52
55
|
unless File.owned?(@global.testplan)
|
|
@@ -83,8 +86,16 @@ class Stella::CLI < Drydock::Command
|
|
|
83
86
|
when 'json', 'yaml'
|
|
84
87
|
puts @run.dump(@global.format)
|
|
85
88
|
else
|
|
89
|
+
if @global.verbose > 0 || @report.errors?
|
|
90
|
+
test_uri = @report.log.first ? @report.log.first.uri : '[unknown]'
|
|
91
|
+
Stella.li 'Checkup for %s' % [test_uri]
|
|
92
|
+
Stella.li
|
|
93
|
+
Stella.li ' %s' % [@report.headers.request_headers.split(/\n/).join("\n ")]
|
|
94
|
+
Stella.li
|
|
95
|
+
Stella.li ' %s' % [@report.headers.response_headers.split(/\n/).join("\n ")]
|
|
96
|
+
Stella.li ''
|
|
97
|
+
end
|
|
86
98
|
metrics = @report.metrics
|
|
87
|
-
# @run.planid.shorten(12), @run.runid.shorten(12),
|
|
88
99
|
args = [@report.statuses.values.first,
|
|
89
100
|
metrics.response_time.mean*1000,
|
|
90
101
|
metrics.socket_connect.mean*1000,
|
|
@@ -92,23 +103,19 @@ class Stella::CLI < Drydock::Command
|
|
|
92
103
|
metrics.last_byte.mean*1000,
|
|
93
104
|
@more_info]
|
|
94
105
|
Stella.li "[%3s] %7.2fms (%5.2fms + %6.2fms + %6.2fms) %s" % args
|
|
95
|
-
if @global.verbose > 0 || @report.errors?
|
|
96
|
-
Stella.li ''
|
|
97
|
-
Stella.li ' Headers:'
|
|
98
|
-
Stella.li ' %s' % [@report.headers.request_headers.split(/\n/).join("\n ")]
|
|
99
|
-
Stella.li
|
|
100
|
-
Stella.li ' %s' % [@report.headers.response_headers.split(/\n/).join("\n ")]
|
|
101
|
-
end
|
|
102
|
-
#puts @report.metrics_pack.dump(:json)
|
|
103
106
|
end
|
|
104
107
|
end
|
|
105
108
|
rescue Stella::API::Unauthorized => ex
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
STDERR.puts "
|
|
109
|
-
STDERR.puts "
|
|
109
|
+
accnt = @api.account || 'youraccount'
|
|
110
|
+
key = @api.key || 'yourapikey'
|
|
111
|
+
STDERR.puts "Specify your credentials"
|
|
112
|
+
STDERR.puts " export STELLA_ACCOUNT=#{accnt}"
|
|
113
|
+
STDERR.puts " export STELLA_KEY=#{key}"
|
|
110
114
|
STDERR.puts " OR "
|
|
111
|
-
STDERR.puts "
|
|
115
|
+
STDERR.puts " stella -A #{accnt} -K #{key} checkup #{@argv.first}"
|
|
116
|
+
STDERR.puts
|
|
117
|
+
STDERR.puts "Create an account, at no charge!"
|
|
118
|
+
STDERR.puts "https://www.blamestella.com/signup/free"
|
|
112
119
|
end
|
|
113
120
|
|
|
114
121
|
def example
|
data/lib/stella/core_ext.rb
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
$KCODE = "u" if RUBY_VERSION =~ /^1.8/
|
|
4
4
|
|
|
5
|
+
class MatchData
|
|
6
|
+
include Gibbler::String
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
module Addressable
|
|
10
|
+
class URI
|
|
11
|
+
include Gibbler::String
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class OpenStruct
|
|
16
|
+
include Gibbler::Object
|
|
17
|
+
end
|
|
18
|
+
|
|
5
19
|
|
|
6
20
|
# A hash with indifferent access and magic predicates.
|
|
7
21
|
#
|
data/lib/stella/report.rb
CHANGED
|
@@ -374,6 +374,9 @@ class Stella
|
|
|
374
374
|
val = klass.from_hash(self.send(name))
|
|
375
375
|
self.send("#{name}=", val)
|
|
376
376
|
end
|
|
377
|
+
# When we load a report from a hash, some plugin
|
|
378
|
+
# attributes need to be recontituted from a hash as well.
|
|
379
|
+
(self.content.log || []).collect! { |v| Stella::Log::HTTP.from_hash(v) }
|
|
377
380
|
end
|
|
378
381
|
def process
|
|
379
382
|
self.class.plugin_order.each do |name|
|
data/stella.gemspec
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{stella}
|
|
8
|
-
s.version = "2.1.
|
|
8
|
+
s.version = "2.1.2.001"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Delano Mandelbaum"]
|
|
@@ -41,7 +41,6 @@ Gem::Specification.new do |s|
|
|
|
41
41
|
"certs/startssl-sub.class1.server.ca.pem",
|
|
42
42
|
"certs/stella-master.crt",
|
|
43
43
|
"lib/stella.rb",
|
|
44
|
-
"lib/stella/api.rb",
|
|
45
44
|
"lib/stella/cli.rb",
|
|
46
45
|
"lib/stella/client.rb",
|
|
47
46
|
"lib/stella/core_ext.rb",
|
metadata
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: stella
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 2.1.
|
|
5
|
+
version: 2.1.2.001
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Delano Mandelbaum
|
|
@@ -144,7 +144,6 @@ files:
|
|
|
144
144
|
- certs/startssl-sub.class1.server.ca.pem
|
|
145
145
|
- certs/stella-master.crt
|
|
146
146
|
- lib/stella.rb
|
|
147
|
-
- lib/stella/api.rb
|
|
148
147
|
- lib/stella/cli.rb
|
|
149
148
|
- lib/stella/client.rb
|
|
150
149
|
- lib/stella/core_ext.rb
|
data/lib/stella/api.rb
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
require 'httparty'
|
|
2
|
-
require 'stella'
|
|
3
|
-
|
|
4
|
-
class Stella
|
|
5
|
-
class API
|
|
6
|
-
include HTTParty
|
|
7
|
-
ssl_ca_file Stella::Client::SSL_CERT_PATH
|
|
8
|
-
format :json
|
|
9
|
-
attr_reader :httparty_opts, :response
|
|
10
|
-
def initialize account=nil, key=nil, httparty_opts={}
|
|
11
|
-
self.class.base_uri ENV['STELLA_HOST'] || 'https://www.blamestella.com/api/v2'
|
|
12
|
-
@httparty_opts = httparty_opts
|
|
13
|
-
account ||= ENV['STELLA_ACCOUNT']
|
|
14
|
-
key ||= ENV['STELLA_KEY']
|
|
15
|
-
unless account.to_s.empty? || key.to_s.empty?
|
|
16
|
-
@httparty_opts[:basic_auth] ||= { :username => account, :password => key }
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
def get path, params=nil
|
|
20
|
-
opts = httparty_opts
|
|
21
|
-
opts[:query] = params || {}
|
|
22
|
-
execute_request :get, path, opts
|
|
23
|
-
end
|
|
24
|
-
def post path, params=nil
|
|
25
|
-
opts = httparty_opts
|
|
26
|
-
opts[:body] = params || {}
|
|
27
|
-
execute_request :post, path, opts
|
|
28
|
-
end
|
|
29
|
-
def site_uri path
|
|
30
|
-
uri = Addressable::URI.parse self.class.base_uri
|
|
31
|
-
uri.path = uri_path(path)
|
|
32
|
-
uri.to_s
|
|
33
|
-
end
|
|
34
|
-
private
|
|
35
|
-
def uri_path *args
|
|
36
|
-
args.unshift '' # force leading slash
|
|
37
|
-
path = args.flatten.join('/')
|
|
38
|
-
path.gsub '//', '/'
|
|
39
|
-
end
|
|
40
|
-
def execute_request meth, path, opts
|
|
41
|
-
path = uri_path [path]
|
|
42
|
-
@response = self.class.send meth, path, opts
|
|
43
|
-
indifferent_params @response.parsed_response
|
|
44
|
-
end
|
|
45
|
-
# Enable string or symbol key access to the nested params hash.
|
|
46
|
-
def indifferent_params(params)
|
|
47
|
-
if params.is_a?(Hash)
|
|
48
|
-
params = indifferent_hash.merge(params)
|
|
49
|
-
params.each do |key, value|
|
|
50
|
-
next unless value.is_a?(Hash) || value.is_a?(Array)
|
|
51
|
-
params[key] = indifferent_params(value)
|
|
52
|
-
end
|
|
53
|
-
elsif params.is_a?(Array)
|
|
54
|
-
params.collect! do |value|
|
|
55
|
-
if value.is_a?(Hash) || value.is_a?(Array)
|
|
56
|
-
indifferent_params(value)
|
|
57
|
-
else
|
|
58
|
-
value
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
# Creates a Hash with indifferent access.
|
|
64
|
-
def indifferent_hash
|
|
65
|
-
Hash.new {|hash,key| hash[key.to_s] if Symbol === key }
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
class Unauthorized < RuntimeError
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
#Stella::API.debug_output $stdout
|
|
74
|
-
#Stella::API.base_uri 'http://localhost:3000/api/v2'
|
|
75
|
-
#@api = Stella::API.new
|