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

问题描述 投票:2回答:2

我们使用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是相同的,所以我无法计算通话的持续时间。

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

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

ruby-on-rails ruby-on-rails-4 notifications activesupport
2个回答
0
投票

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

在我的情况下,事实证明使用travel_to是罪魁祸首。 travel_to似乎工作的方式(不幸的是),基本上是“冻结”时间......也就是说,一旦travel_to x被调用,Time.now将返回x的值,无论调用之间有多少时间。

解决方法可能涉及使用travel_back或避免travel_to调用。


-1
投票

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

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

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

start.to_f * 1000
end.to_f * 1000

然后你可以使用像1484216765256这样的值,以毫秒为单位,并通过从end中减去start来计算持续时间。

© www.soinside.com 2019 - 2024. All rights reserved.