小编Ale*_*ini的帖子

Sinatra-如何为统计目的计算每个请求的响应时间?

我想测量每个Sinatra路由的执行时间,包括完整的请求/响应周期持续时间,然后将此指标发送到Graphite服务器。

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

因此,不仅我无法访问该after块中的许多响应信息,而且也无法使用该块以任何其他方式将指标发送给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, headers, body]
  end
end
Run Code Online (Sandbox Code Playgroud)

我可以加入其中,config.ru并且看起来工作正常。

但是我担心此代码会与核心的Rack请求链混淆,并且我担心我没有正确使用Sinatra公共API。

哪种方法可以获取Sinatra请求的完整响应时间?

ruby rack sinatra

5
推荐指数
1
解决办法
586
查看次数

标签 统计

rack ×1

ruby ×1

sinatra ×1