A World of Warcraft log analysis site using data from the Warcraft Logs API
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
app
bin
config
db
lib
log
public
test
vendor/assets
.gitignore
Gemfile
Gemfile.lock
Procfile
Procfile.dev
README.md
Rakefile
config.ru

README.md

Check My Wow

This site is made for World of Warcraft players who want to improve by tracking their performance across raid encounters, based on key metrics for their spec.

It is designed primarily for those who want to improve their basic rotation. It probably will not provide enough information to be useful to advanced players who are already very comfortable with their classes and are now trying to maximize their output.

Running the site

To run the site you need ruby >= 2.2 and rails >= 4.2

Web server

gem install bundler
bundle install
bundle exec rake db:migrate
bundle exec rails s -p 3000

You can now see the site in your browser at http://localhost:3000

Visit http://localhost:3000/zones to get the latest list of raid zones and bosses from Warcraft Logs.

Worker queue

Check my Wow uses a pool of Resque threads to process fights in the background. Run the following command to start the processes:

TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 LOGGING=1 bundle exec resque-pool -E development

Now you should be able to process fights normally. Logs will be outputted to log/resque.log, and you can see a dashboard of the current running tasks at localhost:3000/resque

Site organization

Processing

app/jobs/ contains the Resque processes that do all of the parsing. parser.rb grabs entire reports from WCL and single_parser.rb parses a single fight/player. SingleParser takes each relevant event and passes it to the spec's FightParse class, which will perform any necessary calculations.

app/models/fight_parse.rb holds all of the common logic for all classes when parsing fights. Things like keeping track of DPS, the number of times each spell was cast, watching for buffs, are all contained here. app/models/healer_parse.rb has extra functions common to healers, and app/models/tank_parse.rb has extra functions common to healers. Class-specific logic is in app/models/fight_parse/{class}/{spec} where there is a class for each unique spec in the game.

Database tables

fight_parse_records will have one record for each person in each encounter, and has basic information about the player and the encounter. Once a fight is parsed, all of the numbers will saved in fp_{class}_{spec}. When tracking what happens during a certain buff's uptime, there will be one cooldown_parse record for each instance the buff was active. For simply tracking uptimes/downtimes throughout the fight, one record per ability will be created in buff_parses or debuff_parses.

Views

Previously, each spec had folders in app/views/bosses and app/views/fight_parses that defined the data that is shown in the completed analysis. I started migrating to a new model where app/models/display_section/{class}/{spec} will contain a list of methods that can populate a page template (app/views/show_data.html.erb) with the correct data. I didn't finish migrating all specs, so some logic is still in app/views/bosses and app/views/fight_parses.