如何从sidekiq获得工作执行时间?

时间:2017-07-07 16:47:03

标签: ruby-on-rails sidekiq rails-activejob

我想知道每次工作时的执行时间。好像有一个宝石sidekiq-statistic可以做我想要的,甚至有GUI,但遗憾的是它不适用于sidekiq 5.我可以从执行方法中获取此类信息不知何故?我宁愿避免手动编写基准测试代码,将我的方法包装到Benchmark块中

5 个答案:

答案 0 :(得分:0)

您可以从日志输出中删除它。

答案 1 :(得分:0)

你可以尝试这个Scout,这是一个很棒的工具,可以提供详细的方法指标。它也适用于Heroku,它们都有附加功能。

答案 2 :(得分:0)

您可以在perform方法中进行计算,然后将这些计算记录到rails日志中。

def preform(task,*params)
   ...start metric times...
   ... do your computations ...
   ...end metric times...
   Rails.logger.info "Your Metrics..."
end

我在heroku上使用Paper-trail取得了成功,只看工作人员的工作开始和完成时间。

答案 3 :(得分:0)

正如Mike says一样,它已经在日志中。

要快速查看某个工人昨天的平均完成时间:

from datetime import datetime     
from jinja2 import Template     
from email.utils import format_datetime     

def render_email(**data):         
    with open('email_template.eml') as f:
        template = Template(f.read())         
    return template.render(**data)

data = {'date': format_datetime(datetime.now()),
        'to': 'bob@example.com',
        'from': 'tarek@ziade.org', 
        'subject': "Your Tarek's Burger order", 
        'name': 'Bob',
        'items': [{'name': 'Cheeseburger', 'price': 4.5}, {'name': 'Fries', 'price': 2.}, {'name': 'Root Beer', 'price': 3.}]}     

print(render_email(**data))

答案 4 :(得分:0)

我有一个问题,找出哪个任务花费的时间最长,所以我写了一个分析日志的小任务 好消息:我找到了,所以我要分享我的代码 :-)

希望它不包含任何错误

  desc "sidekiq run statistics"
  task sidekiq_run_statistics: :environment do
    # 2021-02-19T06:04:23.088Z 20240 TID-ov75i75aw Importer::PriceJob JID-95245ccf3933fe1f5897d52b INFO: done: 193.952 sec
    file = File.open( Rails.root.join("log","sidekiq.log"))
    job_stats = {}
    file.each_line do |line|
      job_stat = line.split(" ")
      if job_stat[8] == "sec"
        time = job_stat[7].to_f
        job_stats[ job_stat[3] ] ||= {longest_run_time: 0, total_run_time:0, total_runs: 0 }
        job_stats[ job_stat[3] ][:longest_run_time] = time if  job_stats[ job_stat[3] ][:longest_run_time] < time 
        job_stats[ job_stat[3] ][:total_run_time]+=time 
        job_stats[ job_stat[3] ][:total_runs]+=1 
      end 
    end
    file.close
    puts %w(total_runs total_run_time longest_run_time job ).collect{|i| i.rjust(16) }.join(" ")
    puts "="*80
       
    job_stats.keys.each do |key| 
      puts( [job_stats[key][:total_runs],job_stats[key][:total_run_time].round(3), job_stats[key][:longest_run_time].round(3), key ].collect{|i| i.to_s.rjust(16) }.join(" "))
    end 
  end 

样本输出

total_runs       total_run_time   longest_run_time job             
==================================================================
56               68.909           7.641            Job1
56               98.9             11.599           Job2
47               193.909          13.795           Job3
234              1806.76          20.644           Job4