Несколько EpochCounter в плагине

Я пытаюсь создать собственный плагин для отслеживания количества и скорости различных вещей. Я новичок в Ruby и NewRelic, поэтому я беру плагин wikimedia и взламываю его, чтобы учиться, поскольку он делает упрощенную версию того, что я пытаюсь. В моей настройке у меня есть это -

def setup_metrics
  @doc_creation_rate = NewRelic::Processor::EpochCounter.new
  @consumer_online_rate = NewRelic::Processor::EpochCounter.new
  @consumer_offline_rate = NewRelic::Processor::EpochCounter.new
  @event_rate = NewRelic::Processor::EpochCounter.new
  @task_queue_rate = NewRelic::Processor::EpochCounter.new
end

Я быстро обнаружил, что мои значения скорости были довольно непонятными, поэтому я добавил в процессор некоторый отладочный код, чтобы посмотреть, что он делает. Я быстро увидел, что значения last_value и last_time использовались при каждом последующем расчете ставки --

last value: 0.0, last time: Thu Aug 08 18:03:28 -0500 2013, cur value: 33.0, cur time; Thu Aug 08 18:04:27 -0500 2013, rate: 0.553659969226572
last value: 33.0, last time: Thu Aug 08 18:04:27 -0500 2013, cur value: 9.0, cur time; Thu Aug 08 18:04:27 -0500 2013, rate: -172661.870503597
last value: 9.0, last time: Thu Aug 08 18:04:27 -0500 2013, cur value: 9.0, cur time; Thu Aug 08 18:04:27 -0500 2013, rate: 0.0
last value: 9.0, last time: Thu Aug 08 18:04:27 -0500 2013, cur value: 0.0, cur time; Thu Aug 08 18:04:27 -0500 2013, rate: -94736.8421052632
last value: 0.0, last time: Thu Aug 08 18:04:27 -0500 2013, cur value: 4012.0, cur time; Thu Aug 08 18:04:27 -0500 2013, rate: 62687500.0
last value: 4012.0, last time: Thu Aug 08 18:04:27 -0500 2013, cur value: 0.0, cur time; Thu Aug 08 18:04:27 -0500 2013, rate: -42680851.0638298

Можно ли использовать EpochCounter так, как я пытаюсь его использовать? Если да, то как? Есть ли способ лучше?

Спасибо!

-- Марк


person Omeganon    schedule 08.08.2013    source источник
comment
@Marc Можете ли вы дать больше информации о том, что вы пытаетесь сделать? Теоретически было бы уместно создать новый счетчик для этих различных скоростей, которые вы пытаетесь зафиксировать в своем плагине, но на самом деле это зависит от того, что вы делаете с данными.   -  person Steven    schedule 09.08.2013
comment
Просто пытаюсь собрать около полдюжины счетчиков (на данный момент) и сохранить счетчики и скорость изменения в NewRelic. Я надеялся, что EpochCounter сделает волшебство сохранения последних значений/временных меток для части расчета скорости без необходимости делать это в моем коде.   -  person Omeganon    schedule 09.08.2013


Ответы (1)


Понятно. Глупая ошибка копирования-вставки, но в результате я многое узнал о рубиновых модулях и объектах =) Я повторно использовал одну и ту же переменную/пространство имен.

report_metric("Streaming/Rate/Online Consumers", "consumers/sec", @event_rate.process(total_consumers_online))
report_metric("Streaming/Rate/Offline Consumers", "consumers/sec", @event_rate.process(total_consumers_offline))
report_metric("Streaming/Rate/Events", "events/sec", @event_rate.process(total_events))

должны были быть --

report_metric("Streaming/Rate/Online Consumers", "consumers/sec", @consumer_online_rate.process(total_consumers_online))
report_metric("Streaming/Rate/Offline Consumers", "consumers/sec", @consumer_offline_rate.process(total_consumers_offline))
report_metric("Streaming/Rate/Events", "events/sec", @event_rate.process(total_events))
person Omeganon    schedule 09.08.2013