我的第一种方法是使用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 – 如何计算每个请求统计信息的响应时间?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)