Rails: Как я могу регистрировать все запросы, выполнение которых занимает более 4 секунд? - PullRequest
3 голосов
/ 06 июня 2010

У меня есть веб-приложение, размещенное в облачной среде, которое может быть расширено до нескольких веб-узлов для более высокой нагрузки.

Мне нужно уловить эту ситуацию, когда мы получаем все больше и больше HTTP-запросов (ресурсы хранятся удаленно). Как я могу это сделать?

Проблема, которую я вижу с этой точки зрения, заключается в том, что если у нас больше запросов, чем может обработать кластер mongrel, то очередь будет расти. А в нашем приложении Rails мы можем рассчитывать только после того, как монгрел получит запрос от балансировщика.

Любые рекомендации?

Ответы [ 2 ]

3 голосов
/ 06 июня 2010

Я бы начал с around_filter, может быть, что-то вроде:

around_filter :time_it

private
  def time_it
    now = DateTime.now
    yield # this is where the request gets made.
    time_span = DateTime.now - now

    # convert to double for better accuracy.
    # (i.e. 3.5 => 4 so you might not want to
    # work with integers here.
    if time_span * 86400.0 > 4.0  
      logger.debug "something is taking a little longer then expected here!"
    end
  end

Используйте это как отправную точку. Надеюсь, это поможет.

Редактировать: поместить этот код в ApplicationController, чтобы он мог использоваться каждым контроллером.

1 голос
/ 06 июня 2010

В дополнение к @DJTripleThreat вам следует взглянуть на RPM NewRelic, чтобы лучше понять производительность вашего кода.

...