ActiveSupport通知没有持续时间(开始和结束时间完全相同)

时间:2016-08-08 08:12:44

标签: ruby-on-rails ruby-on-rails-4 notifications activesupport

我们使用ActiveSupport通知来记录特定的网络呼叫(使用法拉第制作)。只有一种类型的调用,当代码到达时......

ActiveSupport::Notifications.subscribe(notification[:name]) do |_name, starts, ends, _, env|
  handle_notification(starts, ends, env, notification[:service], env[:request_headers][notification[:header]])
end

... startsends相同,因此我无法计算通话的持续时间。

这只发生在一个特定的调用上,代码基本相同。但是,我注意到正常工作的调用被提取到了宝石,但是不工作的调用不在宝石中。不确定是否重要。

我该如何调试/解决这个问题?

2 个答案:

答案 0 :(得分:0)

在尝试使用factory_girl(现在称为factory_bot,因为我们在政治上都是正确的)来限制缓慢的工厂时,我遇到了同样的问题。

在我看来,应该归咎于使用travel_totravel_to的工作方式(不幸的是)实际上是通过冻结时间来实现的……也就是说,一旦调用travel_to xTime.now将返回{{1 }},无论通话之间经过了多长时间。

一种解决方法可能涉及使用x,或避免进行travel_back呼叫。

答案 1 :(得分:-1)

startend值是Time个对象。如果您只记录这些值的输出,它们就像时间/日期值2017-01-12 10:51:00 +0100一样。

您必须将这些转换为毫秒或微秒才能看到精细值。

您可以使用以下内容将Time对象转换为毫秒:

start.to_f * 1000
end.to_f * 1000

然后,您可以使用1484216765256之类的值(以毫秒为单位),并通过从end中减去start来计算持续时间。