ruby – Sinatra – 如何计算每个请求统计信息的响应时间?

ruby – Sinatra – 如何计算每个请求统计信息的响应时间?,第1张

概述我想测量每个Sinatra路由的执行时间,包括完整的请求/响应周期持续时间,然后将此指标发送到Graphite服务器. 我的第一种方法是使用Rack :: Runtime,然后在过滤后从Sinatra的响应头中获取我需要的值,但我发现这个过滤器实际上是在响应完全发送到客户端之前执行的. 因此,我不仅无法在后块中访问许多响应信息,我也无法使用此块以任何其他方式将指标发送到Graphite,因为它们不 我想测量每个Sinatra路由的执行时间,包括完整的请求/响应周期持续时间,然后将此指标发送到Graphite服务器.

我的第一种方法是使用Rack :: Runtime,然后在过滤后从Sinatra的响应头中获取我需要的值,但我发现这个过滤器实际上是在响应完全发送到客户端之前执行的.

因此,我不仅无法在后块中访问许多响应信息,我也无法使用此块以任何其他方式将指标发送到Graphite,因为它们不会反映真实的响应时间.

我已经在其他主题中读过,可能的方法是创建一个Rack中间件来包装应用程序并执行基准测试,我结束了这样的事情:

class GraphiteRoutesReporter  def initialize(app)    @app = app  end  def call(env)    start_time = Time.Now    status,headers,body  = @app.call(env)    time_taken = (1000 * (Time.Now - start_time))    # send #{time_taken} to my stats server    [status,body]  endend

我可以在config.ru中包含它,似乎它工作正常.

但我担心的是这个代码搞乱了核心Rack请求链,我担心我错误地使用了Sinatra公共API.

获取Sinatra请求的完整响应时间的正确方法是什么?

解决方法 如果我找到一个非商业关键原因的解决方案(所以我们谈论一个“有趣的” – 场景)我会经常“解析”(awk)sinatra的默认日志输出,其中包含响应时间(at最后:示例中的0.1093秒 – 如果我没错的话)

179.24.226.1 - Felixb [22/Aug/2016:13:30:46 +0200] "GET /index http/1.0" 200 11546 0.1093

这可能会让我想到实现一个简单的Logger,它会对输出做任何事情(是的,那就是黑客攻击).

但是那样说,你的方法对我来说很好,只要确保将#send#{time_taken}卸载到我的统计服务器上 – 你不想让你的用户等待,因为你的Graphite太难以快速掌握.

此外,如果是关于分析您的网络应用程序/服务器,请查看https://github.com/MiniProfiler/rack-mini-profiler.

总结

以上是内存溢出为你收集整理的ruby – Sinatra – 如何计算每个请求统计信息的响应时间?全部内容,希望文章能够帮你解决ruby – Sinatra – 如何计算每个请求统计信息的响应时间?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1265044.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存