2012-06-08 61 views
0

我最近發現約ActiveSupport::Notifications。我認爲這是一個很好的工具來監視你的應用程序。ActiveSupport ::通知訪問有效載荷從塊內

我目前在Rails之外使用它來監視我的Sinatra應用程序,它的工作效果很好。

但是我用了很多,儀器自定義查詢,並想以某種方式通知查詢的結果:

my_input = "some_query" 
ActiveSupport::Notifications.instrument("myapp.create", :input => my_input) do 
    #stuff 
    result = search_for my_input 
    #stuff 
    result 
end 

現在我可以訂閱這一點,還可以得到被執行的查詢(這在有效載荷散列中是可用的)。但我也希望看到我的訂閱者的結果。

那麼有沒有一種方法可以在執行塊時將任何自定義值添加到有效內容中?

回答

4

當我正在尋找同樣的東西時,偶然發現了你的問題。

你可以簡單地傳遞一個塊變量,它將代表你的有效載荷給你,而你在塊

my_input = "some_query" 
ActiveSupport::Notifications.instrument("myapp.create", :input => my_input) do |instrument| 
    #stuff 
    result = search_for my_input 
    instrument[:my_result] = result 
    #stuff 
    result 
end 

在你的用戶是創建從一個新的事件,你可以往裏面放通過論證:

ActiveSupport::Notifications.subscribe("myapp.create") do |*args| 
    event = ActiveSupport::Notifications::Event.new(*args) 
    Rails.logger.info event.payload 
end