class Workerholic::StatsAPI
Constants
- CATEGORIES
- POLLING_INTERVAL
Public Class Methods
active_proccesses()
click to toggle source
# File lib/workerholic/statistics_api.rb, line 66 def self.active_proccesses namespace = 'workerholic:stats:memory:processes' storage.hash_keys(namespace) end
history_for_period(options={})
click to toggle source
# File lib/workerholic/statistics_api.rb, line 71 def self.history_for_period(options={}) raise ArgumentError, 'Please provide a category namespace' unless options[:category] if options[:klass] namespace = "workerholic:stats:historical:#{options[:category]}:#{options[:klass]}" else namespace = "workerholic:stats:historical:#{options[:category]}" end period = options[:period] || 30 date_ranges = get_past_dates(period) job_counts = storage.hash_get_multiple_elements(namespace, date_ranges) combine_ranges(job_counts: job_counts, date_ranges: date_ranges) end
job_statistics(options={})
click to toggle source
# File lib/workerholic/statistics_api.rb, line 6 def self.job_statistics(options={}) raise ArgumentError, "Please specify one of the following categories: 'completed_jobs', 'failed_jobs'" unless CATEGORIES.include? options[:category] job_classes = storage.get_keys_for_namespace("workerholic:stats:#{options[:category]}:*") if options[:count_only] parse_job_classes(job_classes) else parse_job_classes(job_classes, false) end end
job_statistics_history(category)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 18 def self.job_statistics_history(category) raise ArgumentError, "Please specify one of the following categories: 'completed_jobs', 'failed_jobs'" unless CATEGORIES.include? category current_time = Time.now.to_i all_job_stats(category).reduce([]) do |result, job| completed_time = job.last.to_i index = (current_time - completed_time) / POLLING_INTERVAL result[index] = result[index] ? result[index] + 1 : 1 result end end
jobs_classes(historical)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 42 def self.jobs_classes(historical) base_namespace = historical ? 'workerholic:stats:historical:' : 'workerholic:stats:' completed_classes = storage.get_keys_for_namespace( base_namespace + 'completed_jobs:*') failed_classes = storage.get_keys_for_namespace(base_namespace + 'failed_jobs:*') combined_classes = completed_classes + failed_classes combined_classes.map { |klass| klass.split(':').last }.uniq end
process_stats()
click to toggle source
# File lib/workerholic/statistics_api.rb, line 61 def self.process_stats namespace = 'workerholic:stats:memory:processes' storage.hash_get_all(namespace) end
queued_jobs()
click to toggle source
# File lib/workerholic/statistics_api.rb, line 52 def self.queued_jobs fetched_queues = storage.fetch_queue_names parsed_queues = fetched_queues.map do |queue| [queue, storage.list_length(queue)] end parsed_queues end
scheduled_jobs(options={})
click to toggle source
# File lib/workerholic/statistics_api.rb, line 32 def self.scheduled_jobs(options={}) namespace = 'workerholic:scheduled_jobs' if options[:count_only] storage.sorted_set_size(namespace) else serialized_jobs = storage.sorted_set_all_members(namespace) parse_scheduled_jobs(serialized_jobs) end end
Private Class Methods
all_job_stats(category)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 151 def self.all_job_stats(category) current_time = Time.now.to_i jobs_classes(false).map do |klass| storage.sorted_set_range_members("workerholic:stats:#{category}:#{klass}", current_time - 100 * POLLING_INTERVAL, current_time) end.flatten(1) end
combine_ranges(options={})
click to toggle source
# File lib/workerholic/statistics_api.rb, line 90 def self.combine_ranges(options={}) job_counts = options[:job_counts] job_counts.map!(&:to_i) { date_ranges: options[:date_ranges], job_counts: job_counts } end
convert_klass_to_string(obj)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 137 def self.convert_klass_to_string(obj) obj[:klass] = obj[:klass].to_s obj[:wrapper] = nil obj end
get_jobs_for_class(job_class)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 123 def self.get_jobs_for_class(job_class) serialized_jobs = storage.sorted_set_all_members(job_class) deserialized_stats = serialized_jobs.map do |serialized_job| JobSerializer.deserialize_stats(serialized_job) end deserialized_stats << deserialized_stats.size end
get_past_dates(days)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 100 def self.get_past_dates(days) today = Time.now.utc.to_i - Time.now.utc.to_i % 86400 (0..days).map { |day| today - day * 86400 } end
jobs_per_class(job_class)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 132 def self.jobs_per_class(job_class) clean_class_name = job_class.split(':').last [clean_class_name, storage.sorted_set_size(job_class)] end
logger(message)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 147 def self.logger(message) @log ||= LogManager.new end
parse_job_classes(job_classes, count_only = true)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 113 def self.parse_job_classes(job_classes, count_only = true) job_classes.map do |job_class| if count_only jobs_per_class(job_class) else get_jobs_for_class(job_class) end end end
parse_scheduled_jobs(jobs)
click to toggle source
# File lib/workerholic/statistics_api.rb, line 106 def self.parse_scheduled_jobs(jobs) jobs.map do |job| deserialized_job = JobSerializer.deserialize_stats(job) convert_klass_to_string(deserialized_job) end end
storage()
click to toggle source
# File lib/workerholic/statistics_api.rb, line 143 def self.storage @storage ||= Storage::RedisWrapper.new end