Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Crush your server
Ruby

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
lib
tmp
.gitignore
LICENSE
README.markdown
Rakefile
crusher.gemspec

README.markdown

Agent Framework

Use the Crusher::HttpLoadGenerator as a base class for defining new load generators:

  class WebUser < Crusher::HttpLoadGenerator

    def initialize(crush_session, email, password, options)
      super(crush_session, options)
    end

    def prepare!
      # Do any preparatory work before beginning the test
      log "Prepared!"
    end

    def start!
      # Do any work required when this agent has been commanded 
      # to start generating load
      log "Starting!"
    end

    def act!
      # Called ~ once per second during the test
      request(:get, "www.google.com"){|response, duration| log("RECIEVED: #{response[:status]}")} if rand < .01
    end

  end

Crushfile DSL

The Crushfile provides a ruby DSL for configuring Crusher with targets and load generation scenarios.

Here's an annotated example:

  target :test do |t|
    # Sets the base URI of the target to crush
    t.uri 'http://www.test.com'
  end

  scenario :normal do |s|

    # Launch commands create load generators; the blocks should return new 
    # load generator objects
    s.launch 250, 'test.com-user' do |target, scenario, options, job_id| do
      WebUser.new(...)
    end

    # Multiple launch commands can be used to launch other types of generators
    s.launch 3, 'test.com-admin' do |target, scenario, options, job_id| do
      AdminUser.new(...)
    end

    # Phase commands slowly iterate the set of launched load generators and issue commands
    s.phase :spinup, :over => 10.minutes do |load_generator|
      load_generator.prepare!
    end

    # Phase commands are executed sequentially in time, and can be used to inject
    # a scheduled period of inactivity.
    s.phase :cool, :wait => 1.minute

    s.phase :start, :over => 5.minutes do |load_generator|
      load_generator.start!
    end

    # Log entries are clearly marked with phase names for easy grepping
    s.phase :run, :wait => 20.minutes

    # Phases without timespans are executed as fast as possible
    s.phase :stop do |load_generator|
      load_generator.stop!
    end

  end

crush command

Reads the Crushfile in the CWD for targets and scenarios, invoke unleash like this:

$ crush target_name scenario_name [log_file]

Eventmachine dependency

Crusher currently requires a non-standard version of the eventmachine gem, as it depends on features which are not currently available in http://github.com/eventmachine/eventmachine

A pull request has been submitted: https://github.com/eventmachine/eventmachine/pull/173

In the meantime, check out "crusher-eventmachine" here: http://github.com/socialcast/eventmachine

Authors

Geoffrey Hichborn (phene) Mitch Williams (thatothermitch) Sean Cashin (scashin133)

Copyright

Copyright (c) 2011 Socialcast, Inc. See LICENSE for details.

Something went wrong with that request. Please try again.