stella 2.0.1.002 → 2.0.3.001

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.txt CHANGED
@@ -1,8 +1,16 @@
1
1
  STELLA, CHANGES
2
2
 
3
- #### 2.0.2 (2011-06-??) ###############################
3
+ #### 2.0.3 (2011-07-06) ###############################
4
4
 
5
+ * ADDED: Stella::API
6
+ * ADDED: --remote global for running checkups via www.blamestella.com (beta)
7
+
8
+
9
+ #### 2.0.2 (2011-06-09) ###############################
10
+
11
+ * FIXED: Gibbler ID fixes
5
12
  * ADDED: --wait option for checkup command
13
+ * CHANGE: Don't freeze testplan
6
14
 
7
15
 
8
16
  #### 2.0.1 (2011-06-08) ###############################
data/Gemfile CHANGED
@@ -17,4 +17,6 @@ gem 'ipaddress', '0.7.0'
17
17
  gem 'addressable', '2.2.2'
18
18
  gem 'redis', '2.2.0'
19
19
 
20
- gem 'rudy', '0.9.8.020'
20
+ gem 'rudy', '0.9.8.020'
21
+
22
+ gem 'httparty', '0.7.3'
data/Gemfile.lock CHANGED
@@ -17,6 +17,7 @@ GEM
17
17
  storable (>= 0.8.6)
18
18
  builder (3.0.0)
19
19
  caesars (0.7.4)
20
+ crack (0.1.8)
20
21
  drydock (0.6.9)
21
22
  familia (0.7.1)
22
23
  gibbler (>= 0.8.6)
@@ -27,6 +28,8 @@ GEM
27
28
  gibbler (0.8.9)
28
29
  attic (>= 0.4.0)
29
30
  highline (1.6.1)
31
+ httparty (0.7.3)
32
+ crack (= 0.1.8)
30
33
  ipaddress (0.7.0)
31
34
  mime-types (1.16)
32
35
  multi_json (0.0.5)
@@ -73,6 +76,7 @@ DEPENDENCIES
73
76
  drydock (= 0.6.9)
74
77
  familia (= 0.7.1)
75
78
  gibbler (= 0.8.9)
79
+ httparty (= 0.7.3)
76
80
  ipaddress (= 0.7.0)
77
81
  multi_json
78
82
  nokogiri (= 1.4.4)
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  :MAJOR: 2
2
2
  :MINOR: 0
3
- :PATCH: 1
4
- :BUILD: '002'
3
+ :PATCH: 3
4
+ :BUILD: '001'
data/bin/stella CHANGED
@@ -45,6 +45,7 @@ class Stella::CLI::Definition
45
45
  #global :P, :withparam, "Include __stella query parameter header"
46
46
  global :T, :timeout, Float, "HTTP request timeout (default: unlimited)"
47
47
  global :F, :format, String, "Output format (partial support)"
48
+ global :R, :remote, "Run command remotely (via blamestella.com)"
48
49
  global :f, :filter, String, "Only run usecases that match this filter"
49
50
  global :p, :testplan, String, "Path to testplan"
50
51
  global :n, :nocolor, "Disable output colors" do
data/lib/stella/api.rb ADDED
@@ -0,0 +1,65 @@
1
+ require 'httparty'
2
+ require 'stella'
3
+
4
+ class Stella
5
+ class API
6
+ include HTTParty
7
+
8
+ ssl_ca_file Stella::Client::SSL_CERT_PATH
9
+ format :json
10
+ attr_reader :httparty_opts, :response
11
+ def initialize user=nil, key=nil, httparty_opts={}
12
+ self.class.base_uri ENV['STELLA_HOST'] || 'https://www.blamestella.com/api/v2'
13
+ @httparty_opts = httparty_opts.merge({
14
+ :basic_auth => { :username => user || ENV['STELLA_USER'], :password => key || ENV['STELLA_KEY'] }
15
+ })
16
+ end
17
+ def get path, params=nil
18
+ opts = httparty_opts
19
+ opts[:query] = params || {}
20
+ execute_request :get, path, opts
21
+ end
22
+ def post path, params=nil
23
+ opts = httparty_opts
24
+ opts[:body] = params || {}
25
+ execute_request :post, path, opts
26
+ end
27
+ private
28
+ def uri_path *args
29
+ args.unshift '' # force leading slash
30
+ path = args.flatten.join('/')
31
+ path.gsub '//', '/'
32
+ end
33
+ def execute_request meth, path, opts
34
+ path = uri_path [path]
35
+ @response = self.class.send meth, path, opts
36
+ indifferent_params @response.parsed_response
37
+ end
38
+ # Enable string or symbol key access to the nested params hash.
39
+ def indifferent_params(params)
40
+ if params.is_a?(Hash)
41
+ params = indifferent_hash.merge(params)
42
+ params.each do |key, value|
43
+ next unless value.is_a?(Hash) || value.is_a?(Array)
44
+ params[key] = indifferent_params(value)
45
+ end
46
+ elsif params.is_a?(Array)
47
+ params.collect! do |value|
48
+ if value.is_a?(Hash) || value.is_a?(Array)
49
+ indifferent_params(value)
50
+ else
51
+ value
52
+ end
53
+ end
54
+ end
55
+ end
56
+ # Creates a Hash with indifferent access.
57
+ def indifferent_hash
58
+ Hash.new {|hash,key| hash[key.to_s] if Symbol === key }
59
+ end
60
+ end
61
+ end
62
+
63
+ #Stella::API.debug_output $stdout
64
+ #Stella::API.base_uri 'http://localhost:3000/api/v2'
65
+ #@api = Stella::API.new
data/lib/stella/cli.rb CHANGED
@@ -19,43 +19,52 @@ class Stella::CLI < Drydock::Command
19
19
  :concurrency => @option.concurrency || 1,
20
20
  :wait => @option.wait || 1
21
21
  }
22
- if @global.testplan
23
- unless File.owned?(@global.testplan)
24
- raise ArgumentError, "File not found #{@global.testplan}"
25
- end
26
- Stella.ld "Load #{@global.testplan}"
27
- load @global.testplan
28
- filter = @global.filter
29
- planname = Stella::Testplan.plans.keys.first
30
- @plan = Stella::Testplan.plan(planname)
31
- if filter
32
- @plan.usecases.reject! { |uc|
33
- ret = !uc.desc.to_s.downcase.match(filter.downcase)
34
- Stella.ld " rejecting #{uc.desc}" if ret
35
- ret
36
- }
37
- end
38
- Stella.ld "Running #{@plan.usecases.size} usecases"
22
+ if @global.remote
23
+ require 'stella/api'
24
+ @api = Stella::API.new
25
+ ret = @api.post :checkup, :uri => base_uri
26
+ begin
27
+ run_hash = @api.get "/checkup/#{ret[:runid]}"
28
+ @run = Stella::Testrun.from_hash run_hash if run_hash
29
+ end while @run && !@run.done?
39
30
  else
40
- @plan = Stella::Testplan.new base_uri
31
+ if @global.testplan
32
+ unless File.owned?(@global.testplan)
33
+ raise ArgumentError, "File not found #{@global.testplan}"
34
+ end
35
+ Stella.ld "Load #{@global.testplan}"
36
+ load @global.testplan
37
+ filter = @global.filter
38
+ planname = Stella::Testplan.plans.keys.first
39
+ @plan = Stella::Testplan.plan(planname)
40
+ if filter
41
+ @plan.usecases.reject! { |uc|
42
+ ret = !uc.desc.to_s.downcase.match(filter.downcase)
43
+ Stella.ld " rejecting #{uc.desc}" if ret
44
+ ret
45
+ }
46
+ end
47
+ Stella.ld "Running #{@plan.usecases.size} usecases"
48
+ else
49
+ @plan = Stella::Testplan.new base_uri
50
+ end
51
+ @run = @plan.checkup base_uri, run_opts
41
52
  end
42
- @run = @plan.checkup base_uri, run_opts
53
+
43
54
  @report = @run.report
55
+
44
56
  if Stella.quiet?
45
- @exit_code = report.error_count
57
+ @exit_code = @report.error_count
46
58
  else
47
59
  @global.format ||= 'json'
48
- if @global.verbose == 2
49
- if (@global.format == 'string' || @global.format == 'csv')
50
- metrics = @report.metrics_pack
51
- puts metrics.dump(@global.format)
52
- else
53
- puts @report.dump(@global.format)
54
- end
55
- elsif @global.verbose >= 3
60
+ if @global.verbose == 0
61
+ metrics = @report.metrics_pack
62
+ puts metrics.dump(@global.format)
63
+ elsif @global.verbose >= 1
56
64
  puts @run.dump(@global.format)
57
65
  end
58
66
  end
67
+
59
68
  end
60
69
 
61
70
  def example
data/lib/stella/report.rb CHANGED
@@ -362,8 +362,9 @@ class Stella
362
362
  end
363
363
 
364
364
  field :processed => Boolean
365
+ field :runid
365
366
 
366
- attr_reader :runid, :timeline, :filter
367
+ attr_reader :timeline, :filter
367
368
  def initialize(timeline=nil, runid=nil)
368
369
  @timeline, @runid = timeline, runid
369
370
  @processed = false
@@ -23,7 +23,7 @@ class Stella
23
23
  include Common::PrivacyMethods
24
24
  prefix :testplan
25
25
  index :id
26
- field :id, :class => Gibbler::Digest, :meth => :gibbler, &gibbler_id_processor
26
+ field :id, :class => Gibbler::Digest, :meth => :gibbler
27
27
  field :custid => String
28
28
  field :usecases => Array
29
29
  field :desc => String
@@ -44,6 +44,10 @@ class Stella
44
44
  @usecases << Stella::Usecase.new(req)
45
45
  end
46
46
  end
47
+ def id
48
+ @id ||= gibbler
49
+ @id
50
+ end
47
51
  alias_method :planid, :id
48
52
  def favicon?() !@favicon.nil? && !@favicon.empty? end
49
53
  def preprocess
@@ -167,7 +171,7 @@ class Stella
167
171
  end
168
172
  class Usecase < Storable
169
173
  include Gibbler::Complex
170
- field :id, :class => Gibbler::Digest, :meth => :gibbler, &gibbler_id_processor
174
+ field :id, :class => Gibbler::Digest, :meth => :gibbler
171
175
  field :desc => String
172
176
  field :ratio => Float
173
177
  field :requests => Array
@@ -178,6 +182,10 @@ class Stella
178
182
  preprocess
179
183
  @requests << req if req
180
184
  end
185
+ def id
186
+ @id ||= gibbler
187
+ @id
188
+ end
181
189
  alias_method :ucid, :id
182
190
  def preprocess
183
191
  @requests ||= []
@@ -274,6 +282,10 @@ class Stella
274
282
 
275
283
  class EventTemplate < Storable
276
284
  include Gibbler::Complex
285
+ def id
286
+ @id ||= gibbler
287
+ @id
288
+ end
277
289
  end
278
290
 
279
291
  class StringTemplate
@@ -290,7 +302,7 @@ class Stella
290
302
  end
291
303
 
292
304
  class RequestTemplate < EventTemplate
293
- field :id, :class => Gibbler::Digest, :meth => :gibbler, &gibbler_id_processor
305
+ field :id, :class => Gibbler::Digest, :meth => :gibbler
294
306
  field :protocol => Symbol
295
307
  field :http_method
296
308
  field :http_version
@@ -351,7 +363,7 @@ class Stella
351
363
  index :id
352
364
  include Familia::Stamps
353
365
  include Common::PrivacyMethods
354
- field :id, :class => Gibbler::Digest, :meth => :gibbler, &gibbler_id_processor
366
+ field :id, :class => Gibbler::Digest, :meth => :gibbler
355
367
  field :custid => String
356
368
  field :status => Symbol
357
369
  field :options => Hash
@@ -378,6 +390,10 @@ class Stella
378
390
  }.merge options
379
391
  preprocess
380
392
  end
393
+ def id
394
+ @id ||= gibbler
395
+ @id
396
+ end
381
397
  alias_method :runid, :id
382
398
  def duration
383
399
  return 0 unless @stime
@@ -400,7 +416,10 @@ class Stella
400
416
  @id &&= Gibbler::Digest.new(@id)
401
417
  # Calling plan calls Redis.
402
418
  #@privacy = plan.privacy if Stella::Testplan === plan
403
- @report = Stella::Report.from_hash @report if Hash === @report
419
+ if Hash === @report
420
+ @report = Stella::Report.from_hash @report
421
+ @report.runid = runid
422
+ end
404
423
  @planid &&= Gibbler::Digest.new(@planid)
405
424
  end
406
425
  def hostid
@@ -432,7 +451,7 @@ class Stella
432
451
  def plan
433
452
  if @plan.nil?
434
453
  @plan = Stella::Testplan.from_redis @planid
435
- @plan.freeze
454
+ #@plan.freeze
436
455
  end
437
456
  @plan
438
457
  end
data/stella.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{stella}
8
- s.version = "2.0.1.002"
8
+ s.version = "2.0.3.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"]
12
- s.date = %q{2011-06-08}
12
+ s.date = %q{2011-07-06}
13
13
  s.default_executable = %q{stella}
14
14
  s.description = %q{Define realistic testplans and run them against your webapps}
15
15
  s.email = %q{delano@solutious.com}
@@ -41,6 +41,7 @@ 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",
44
45
  "lib/stella/cli.rb",
45
46
  "lib/stella/client.rb",
46
47
  "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.0.1.002
5
+ version: 2.0.3.001
6
6
  platform: ruby
7
7
  authors:
8
8
  - Delano Mandelbaum
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-08 00:00:00 -04:00
13
+ date: 2011-07-06 00:00:00 -04:00
14
14
  default_executable: stella
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -144,6 +144,7 @@ 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
147
148
  - lib/stella/cli.rb
148
149
  - lib/stella/client.rb
149
150
  - lib/stella/core_ext.rb