rallytastic

Description

Do you use Rally? Every day? Do you use it enough that you’ve run out of ways to hack the site to get that last ounce of customization from it? The reports, for example, while very good, aren’t quite what you need to run your dev shop, are they? If you’ve taken a look at the RallyAPI longingly in the past, but written it off as too much work to do anything meaningful with, then Rallytastic is offering you a helping hand.

Rallytastic is a set of objects built on MongoDB and Mongoid, along with Thor tasks that pull data out of Rally and stuff it into those objects. Once there, Rallytastic tries to get out of your way and lets the data be your playground. Have at it with a platic shovel and Tonka Bulldozer if that’ll get you up in the morning. You were born to get down with your bad Rally self. Be Awesome.

Rallytastic is intended to be the foundation of a web app that reports User Story data back to Rally users. It augments Rally proper primarily as an extention to the reporting capabilities. For example, if you are more concerned with the throughput of your dev teams than their velocity, Rallytastic is going to help you build custom fit measuring tools for that. It has built in helpers to walk through the revision logs of your stories and identify key events in their lifecycle. You can track work in progress(WIP) levels over time, measure how long stories sit prioritized on your backlog before dev starts, identify queues and bottlenecks anywhere between story definition time and release, and much more.

Congiguration

In a file that is required from lib/rallytastic.rb, you can configure Rally authentication.

RallyAPI::configure do |config|
  config.user = "[email protected]"
  config.password = "password"
end

You also need to have Mongo running, and let your app know what database to use. Either do it the Rails .yml way, or put something like this in a config file and include it:

Mongoid.configure do |config|
  name = "rallytastic_dev"
  host = "localhost"
  config.master = Mongo::Connection.new.db(name)
  config.persist_in_safe_mode = false
end

You should also set mongo to use a testing database in spec/spec_helper.rb

Mongoid.configure do |config|
  name = "rallytastic_test"
  host = "localhost"
  config.master = Mongo::Connection.new.db(name)
  config.persist_in_safe_mode = false
end

Usage

Populating your MongoDB for the first time

> bundle exec thor scraper:projects
> bundle exec thor scraper:iterations
> bundle exec thor scraper:refresh

Revisions are pulled on request per iteration

> bundle exec thor scraper:revisions "Iteration Name"

On an ongoing basis, updating stories is quicker

> bundle exec thor scraper:refresh
# update the story revisions for the iteration you are interested in
> bundle exec thor scraper:revisions "Iteration Name"

Thor Tasks

scraper:help [TASK]

# Describe available tasks or one specific task

scraper:refresh

# Pulls down Rally stories since the last run, and creates Iterations and Projects as needed. This is the task you want to put in your job scheduler.

scraper:stories

# Walk Rally stories updated since last run

scraper:update_non_stories

# The scrape:stroies task creates shell iterations and projects for any that it doesn’t know about yet. This task looks for those, and pull their information down from Rally

scraper:revisions iteration_name

# Get the revisions for stories hanging off an iteration

scraper:projects

# Bootstrapping method that is primarily useful when you are setting up Rallytastic for the first time. It will walk Rally and pull down all projects. Technically, you don’t need to run this because using the scrape:stories; scrape:update_non_stories; will fill this information in for you. It may be a bit quicker though to run this first if you have a lot of projects because it does batch queries

scraper:iterations

# Bootstrapping method that is primarily useful when you are setting up Rallytastic for the first time. It will walk Rally and pull down all Iterations. Technically, you don’t need to run this because using the scrape:stories; scrape:update_non_stories; will fill this information in for you. It may be a bit quicker though to run this first if you have a lot of iterations because it does batch queries <End of Thor Tasks>

TODO

  • Add Releases

  • Taging stories

  • Reporting engine

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Copyright © 2010 Matt Clark. See LICENSE for details.