Skip to content

Instantly share code, notes, and snippets.

@crigor
Forked from qrush/gist:296921
Created February 7, 2010 03:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save crigor/297194 to your computer and use it in GitHub Desktop.
Save crigor/297194 to your computer and use it in GitHub Desktop.
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