class GemData
Constants
- MAX_THREADS
Attributes
gem_name[R]
Public Class Methods
new(gem_name)
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 10 def initialize(gem_name) @gem_name = gem_name end
Public Instance Methods
fetch_downloads_metadata(version, start_time, end_time, cache_hash)
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 37 def fetch_downloads_metadata(version, start_time, end_time, cache_hash) key = key_for(version, start_time, end_time) data_received = Gems.downloads(gem_name, version, start_time, end_time) @mutex1.synchronize do # shared hash cache_hash[key] ||= data_received end end
key_for(v,s,e)
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 76 def key_for(v,s,e) "#{v}-#{time_format_str_small(s)}-#{time_format_str_small(e)}" end
parallel_fetch_for(versions)
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 16 def parallel_fetch_for(versions) @mutex1 = Mutex.new @cached_downloads_metatada ||= {} smallest_version = versions.map{|v| ComparableVersion.new(v)}.sort.first.str start_t = time_built(smallest_version) end_t = Time.now puts "fetching #{versions.size} download data requests" threads = [] versions.map do |v| active_threads = threads.select{ |t| t.alive? } if active_threads.size > MAX_THREADS sleep 1 # busy wait thread pool redo else threads << Thread.new { fetch_downloads_metadata(v,start_t,end_t,@cached_downloads_metatada) } end end threads.map(&:join) end
prefetched_downloads_metadata(version, start_time, end_time)
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 46 def prefetched_downloads_metadata(version, start_time, end_time) key = key_for(version, start_time, end_time) @cached_downloads_metatada[key] end
time_built(v)
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 61 def time_built(v) versions_built_at[v] end
total_for_version(version)
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 80 def total_for_version(version) @total_for_version ||= {} key = "#{version}" return @total_for_version[key] if @total_for_version[key] @total_for_version[key] ||= Gems.total_downloads(gem_name, version) end
versions()
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 51 def versions versions_metadata.map{|v| v["number"]} end
versions_built_at()
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 55 def versions_built_at h = {} versions_metadata.map{|v| h.merge!(v["number"] => v["built_at"] )} h end
versions_metadata()
click to toggle source
# File lib/gem_velocity/gem_data.rb, line 65 def versions_metadata @versions_metadata ||= Gems.versions(gem_name) # it should be a hash if @versions_metadata.is_a?(String) if @versions_metadata.match(/This rubygem could not be found/) raise(NoSuchGem, "This rubygem #{gem_name} could not be found") end end @versions_metadata end