-
-
Save ryanbriones/314219 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
gemcutter => redis downloads spec | |
================================= | |
keys | |
---- | |
downloads => global counter for all gem downloads | |
downloads:today => sorted set for downloads from today | |
downloads:rubygem:rails => counter for all rails downloads | |
downloads:version:rails-2.3.5 => counter for all rails 2.3.5 downloads | |
downloads:rubygem_daily:rails => JSON daily download hash for this rubygem | |
downloads:version_daily:rails-2.3.5 => JSON daily download hash for this version | |
Daily download hash format: | |
{ | |
'2010-02-01' : 134, | |
'2010-02-02' : 289, | |
... | |
} | |
on a download | |
------------- | |
Let's say /gems/bundler-0.9.2.gem was hit... | |
INCR downloads | |
INCR downloads:rubygem:bundler | |
INCR downloads:version:bundler-0.9.2 | |
ZINCRBY downloads:today 1 bundler-0.9.2 | |
on a daily cron | |
--------------- | |
RENAME downloads:today downloads:yesterday | |
keys = ZRANGE downloads:yesterday 0 -1 | |
keys.each do |key| | |
version = Version.find_by_full_name(key) | |
downloads = ZSCORE downloads:yesterday key | |
version_downloads = JSON.parse( GET downloads:version_daily:#{version.full_name} ) | |
version_downloads[Date.today] = downloads | |
SET downloads:version_daily:#{version.full_name} JSON.dump( version_downloads ) | |
rubygem_downloads = JSON.parse( GET downloads:rubygem_daily:#{version.rubygem.name} ) | |
rubygem_downloads[Date.today] += downloads | |
SET downloads:rubygem_daily:#{version.rubygem.name} JSON.dump( rubygem_downloads ) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment