API สำหรับ instrumentation ที่ Active Support ให้เป็นการให้นักพัฒนาสามารถให้ตัวเก้าอี้ที่นักพัฒนาคนอื่นสามารถเชื่อมต่อได้ มี หลายอย่าง ในเฟรมเวิร์ก Rails ด้วย ด้วย API นี้นักพัฒนาสามารถเลือกที่จะได้รับการแจ้งเตือนเมื่อเหตุการณ์บางอย่างเกิดขึ้นภายในแอปพลิเคชันของพวกเขาหรือรหัส Ruby อื่น ๆ
ตัวอย่างเช่น มี ตัวเก้าอี้ ที่ให้ใน Active Record ที่เรียกใช้ทุกครั้งที่ Active Record ใช้คำสั่ง SQL ในฐานข้อมูล ตัวเก้าอี้นี้สามารถ สมัครใช้ และใช้เพื่อติดตามจำนวนคำสั่งที่ใช้ในการกระทำบางอย่างได้ เช่น มี ตัวเก้าอี้อื่น รอบการประมวลผลของการกระทำของคอนโทรลเลอร์ สามารถใช้เพื่อติดตามเวลาที่การกระทำเฉพาะนั้นใช้เวลานานเท่าไหร่
คุณยังสามารถ สร้างเหตุการณ์ที่กำหนดเอง ภายในแอปพลิเคชันของคุณซึ่งคุณสามารถสมัครใช้งานได้ในภายหลัง
การสมัครใช้งานกับเหตุการณ์เป็นเรื่องง่าย ใช้ ActiveSupport::Notifications.subscribe
พร้อมกับบล็อกเพื่อฟังการแจ้งเตือนใด ๆ
บล็อกจะได้รับอาร์กิวเมนต์ต่อไปนี้:
ชื่อเหตุการณ์
เวลาที่เริ่มต้น
เวลาที่สิ้นสุด
รหัสประจำตัวที่ไม่ซ้ำกันสำหรับตัวเครื่องมือที่เปิดเหตุการณ์
ข้อมูลสำหรับเหตุการณ์
ActiveSupport :: Notifications . subscribe "process_action.action_controller" do | name , started , finished , unique_id , data |
# สิ่งที่คุณกำหนดเอง
Rails . logger . info " #{ name } Received! (started: #{ started } , finished: #{ finished } )" # process_action.action_controller Received (started: 2019-05-05 13:43:57 -0800, finished: 2019-05-05 13:43:58 -0800)
end
Copy
หากคุณกังวลเกี่ยวกับความแม่นยำของ started
และ finished
เพื่อคำนวณเวลาที่ใช้ได้อย่างแม่นยำ ให้ใช้ ActiveSupport::Notifications.monotonic_subscribe
บล็อกที่กำหนดจะได้รับอาร์กิวเมนต์เดียวกันกับข้างต้น แต่ started
และ finished
จะมีค่าที่แม่นยำเป็นเวลาโมโนโทนิกแทนเวลานาฬิกาตามผนวก
ActiveSupport :: Notifications . monotonic_subscribe "process_action.action_controller" do | name , started , finished , unique_id , data |
# สิ่งที่คุณกำหนดเอง
Rails . logger . info " #{ name } Received! (started: #{ started } , finished: #{ finished } )" # process_action.action_controller Received (started: 1560978.425334, finished: 1560979.429234)
end
Copy
การกำหนดอาร์กิวเมนต์บล็อกเหล่านั้นทุกครั้งอาจเป็นเรื่องน่าเบื่อ คุณสามารถสร้าง ActiveSupport::Notifications::Event
จากอาร์กิวเมนต์บล็อกได้อย่างง่ายดายเช่นนี้:
ActiveSupport :: Notifications . subscribe "process_action.action_controller" do |* args |
event = ActiveSupport :: Notifications :: Event . new ( * args )
event . name # => "process_action.action_controller"
event . duration # => 10 (ในหน่วยมิลลิวินาที)
event . payload # => {:extra=>information}
Rails . logger . info " #{ event } Received!"
end
Copy
คุณยังสามารถส่งบล็อกที่ยอมรับอาร์กิวเมนต์เพียงอย่างเดียวและจะได้รับออบเจกต์เหตุการณ์:
ActiveSupport :: Notifications . subscribe "process_action.action_controller" do | event |
event . name # => "process_action.action_controller"
event . duration # => 10 (ในหน่วยมิลลิวินาที)
event . payload # => {:extra=>information}
Rails . logger . info " #{ event } ได้รับแล้ว!"
end
Copy
คุณยังสามารถสมัครสมาชิกกับเหตุการณ์ที่ตรงกันกับ regular expression นี้ได้ เพื่อให้คุณสามารถสมัครสมาชิกกับเหตุการณ์หลายอย่างในครั้งเดียว นี่คือวิธีการสมัครสมาชิกกับทุกอย่างจาก ActionController
:
ActiveSupport :: Notifications . subscribe ( /action_controller/ ) do |* args |
# ตรวจสอบเหตุการณ์ ActionController ทั้งหมด
end
Copy
Rails นำเสนอมาตรฐาน Server Timing เพื่อทำให้ข้อมูลเวลาทำงานสามารถใช้ได้ในเบราว์เซอร์เว็บ ในการเปิดใช้งาน คุณสามารถแก้ไขการกำหนดค่าสภาพแวดล้อม (โดยปกติคือ development.rb
เนื่องจากมักจะใช้ในการพัฒนามากที่สุด) เพื่อรวมการกำหนดค่าต่อไปนี้:
config . server_timing = true
Copy
เมื่อกำหนดค่าแล้ว (รวมถึงการรีสตาร์ทเซิร์ฟเวอร์ของคุณ) คุณสามารถไปที่แถบ Developer Tools ของเบราว์เซอร์ของคุณ จากนั้นเลือกเครือข่ายและโหลดหน้าของคุณอีกครั้ง คุณจะสามารถเลือกคำขอใดคำขอหนึ่งไปยังเซิร์ฟเวอร์ Rails ของคุณและจะเห็นเวลาการทำงานของเซิร์ฟเวอร์ในแท็บเวลา สำหรับตัวอย่างการทำเช่นนี้ ดูเอกสาร Firefox ได้
ภายในเฟรมเวิร์ก Ruby on Rails มีการให้ hooks หลายอย่างสำหรับเหตุการณ์ที่พบบ่อย เหตุการณ์เหล่านี้และข้อมูลเพิ่มเติมสามารถดูได้ด้านล่าง
คีย์
ค่า
:controller
ชื่อคอนโทรลเลอร์
:action
แอ็กชัน
:params
แฮชของพารามิเตอร์ของคำขอโดยไม่มีพารามิเตอร์ที่ถูกกรอง
:headers
ส่วนหัวของคำขอ
:format
html/js/json/xml เป็นต้น
:method
คำขอ HTTP
:path
เส้นทางของคำขอ
{
controller: "PostsController" ,
action: "new" ,
params: { "action" => "new" , "controller" => "posts" },
headers: #<ActionDispatch::Http::Headers:0x0055a67a519b88>,
format: :html ,
method: "GET" ,
path: "/posts/new"
}
Copy
คีย์
ค่า
:controller
ชื่อคอนโทรลเลอร์
:action
แอ็กชัน
:params
แฮชของพารามิเตอร์ของคำขอโดยไม่มีพารามิเตอร์ที่ถูกกรอง
:headers
ส่วนหัวของคำขอ
:format
html/js/json/xml เป็นต้น
:method
คำขอ HTTP
:path
เส้นทางของคำขอ
:request
ออบเจกต์ ActionDispatch::Request
:response
ออบเจกต์ ActionDispatch::Response
:status
รหัสสถานะ HTTP
:view_runtime
เวลาที่ใช้ในการแสดงผลในหน่วยมิลลิวินาที
:db_runtime
เวลาที่ใช้ในการดำเนินการคิวรีฐานข้อมูลในหน่วยมิลลิวินาที
{
controller: "PostsController" ,
action: "index" ,
params: { "action" => "index" , "controller" => "posts" },
headers: #<ActionDispatch::Http::Headers:0x0055a67a519b88>,
format: :html ,
method: "GET" ,
path: "/posts" ,
request: #<ActionDispatch::Request:0x00007ff1cb9bd7b8>,
response: #<ActionDispatch::Response:0x00007f8521841ec8>,
status: 200 ,
view_runtime: 46.848 ,
db_runtime: 0.157
}
Copy
คีย์
ค่า
:path
เส้นทางสมบูรณ์ไปยังไฟล์
คีย์เพิ่มเติมอาจถูกเพิ่มโดยผู้เรียกใช้งาน
ActionController
ไม่เพิ่มข้อมูลเฉพาะใดๆเข้าไปใน payload ทั้งหมด ตัวเลือกทั้งหมดจะถูกส่งผ่านไปยัง payload
คีย์
ค่า
:status
รหัสการตอบสนอง HTTP
:location
URL ที่จะเปลี่ยนเส้นทางไปยัง
:request
ออบเจกต์ ActionDispatch::Request
{
status: 302 ,
location: "http://localhost:3000/posts/new" ,
request: < ActionDispatch :: Request : 0x00007ff1cb9bd7b8 >
}
Copy
คีย์
ค่า
:filter
ตัวกรองที่หยุดการทำงาน
{
filter: ":halting_filter"
}
Copy
คีย์
ค่า
:keys
คีย์ที่ไม่ได้รับอนุญาต
:context
แฮชที่มีคีย์ต่อไปนี้: :controller
, :action
, :params
, :request
คีย์
ค่า
:key
คีย์ทั้งหมด
{
key: 'posts/1-dashboard-view'
}
Copy
คีย์
ค่า
:key
คีย์ทั้งหมด
{
key: 'posts/1-dashboard-view'
}
Copy
คีย์
ค่า
:key
คีย์ทั้งหมด
{
key: 'posts/1-dashboard-view'
}
Copy
คีย์
ค่า
:key
คีย์ทั้งหมด
{
key: 'posts/1-dashboard-view'
}
Copy
คีย์
ค่า
:middleware
ชื่อของ middleware
คีย์
ค่า
:status
รหัสการตอบสนอง HTTP
:location
URL ที่จะเปลี่ยนเส้นทางไปยัง
:request
อ็อบเจกต์ ActionDispatch::Request
คีย์
ค่า
:identifier
เส้นทางเต็มไปยังเทมเพลต
:layout
เลเอาท์ที่ใช้ได้
:locals
ตัวแปรท้องถิ่นที่ส่งไปยังเทมเพลต
{
identifier: "/Users/adam/projects/notifications/app/views/posts/index.html.erb" ,
layout: "layouts/application" ,
locals: { foo: "bar" }
}
Copy
คีย์
ค่า
:identifier
เส้นทางเต็มไปยังเทมเพลต
:locals
ตัวแปรท้องถิ่นที่ส่งไปยังเทมเพลต
{
identifier: "/Users/adam/projects/notifications/app/views/posts/_form.html.erb" ,
locals: { foo: "bar" }
}
Copy
คีย์
ค่า
:identifier
เส้นทางเต็มไปยังเทมเพลต
:count
ขนาดของคอลเลกชัน
:cache_hits
จำนวนพาร์ทเชียลที่เรียกจากแคช
คีย์ :cache_hits
เพิ่มเข้ามาเมื่อคอลเลกชันถูกแสดงผลด้วย cached: true
เท่านั้น.
{
identifier: "/Users/adam/projects/notifications/app/views/posts/_post.html.erb" ,
count: 3 ,
cache_hits: 0
}
Copy
คีย์
ค่า
:identifier
เส้นทางเต็มไปยังเทมเพลต
{
identifier: "/Users/adam/projects/notifications/app/views/layouts/application.html.erb"
}
Copy
คีย์
ค่า
:sql
คำสั่ง SQL
:name
ชื่อของการดำเนินการ
:connection
อ็อบเจกต์การเชื่อมต่อ
:binds
พารามิเตอร์ที่ผูก
:type_casted_binds
พารามิเตอร์ที่ผูกแปลงชนิด
:statement_name
ชื่อคำสั่ง SQL
:cached
true
เพิ่มเข้ามาเมื่อใช้คิวรีแคช
แอดาปเตอร์อาจเพิ่มข้อมูลของตนเองเข้าไปด้วย
ruby
{
sql: "SELECT \"posts\".* FROM \"posts\" ",
name: "Post Load",
connection: <ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x00007f9f7a838850>,
binds: [<ActiveModel::Attribute::WithCastValue:0x00007fe19d15dc00>],
type_casted_binds: [11],
statement_name: nil
}
เหตุการณ์นี้เกิดขึ้นเมื่อ config.active_record.action_on_strict_loading_violation
ถูกตั้งค่าเป็น :log
เท่านั้น
คีย์
ค่า
:owner
โมเดลที่เปิดใช้งาน strict_loading
:reflection
Reflection ของความสัมพันธ์ที่พยายามโหลดข้อมูล
คีย์
ค่า
:record_count
จำนวนเรคคอร์ดที่ถูกสร้างขึ้น
:class_name
ชื่อคลาสของเรคคอร์ด
{
record_count: 1 ,
class_name: "User"
}
Copy
คีย์
ค่า
:mailer
ชื่อคลาสเมลเลอร์
:message_id
ID ของข้อความที่สร้างขึ้นโดย Mail gem
:subject
หัวข้อของอีเมล
:to
ที่อยู่ผู้รับอีเมล
:from
ที่อยู่ผู้ส่งอีเมล
:bcc
ที่อยู่ผู้รับแบบลับ
:cc
ที่อยู่ผู้รับแบบสำเนา
:date
วันที่ของอีเมล
:mail
รูปแบบของอีเมลที่ถูกเข้ารหัส
:perform_deliveries
บอกว่าการส่งข้อความนี้ถูกดำเนินการหรือไม่
คีย์
ค่า
:mailer
ชื่อคลาสเมลเลอร์
:action
แอ็กชัน
:args
อาร์กิวเมนต์
{
mailer: "Notification" ,
action: "welcome_email" ,
args: []
}
Copy
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
:hit
ถ้าการอ่านนี้เป็นการตอบรับ
:super_operation
:fetch
ถ้าการอ่านทำกับ fetch
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
:hits
คีย์ของการอ่านที่ตอบรับ
:super_operation
:fetch_multi
ถ้าการอ่านทำกับ fetch_multi
เหตุการณ์นี้เกิดขึ้นเมื่อ fetch
ถูกเรียกใช้งานพร้อมกับบล็อก
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
ตัวเลือกที่ถูกส่งผ่านไปยัง fetch
จะถูกผสมกับข้อมูลเมื่อเขียนลงในสโตร์
{
key: "name-of-complicated-computation" ,
store: "ActiveSupport::Cache::MemCacheStore"
}
Copy
เหตุการณ์นี้เกิดขึ้นเมื่อ fetch
ถูกเรียกใช้งานพร้อมกับบล็อก
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
ตัวเลือกที่ถูกส่งผ่านไปยัง fetch
จะถูกผสมกับข้อมูล
ruby
{
key: "name-of-complicated-computation",
store: "ActiveSupport::Cache::MemCacheStore"
}
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
สโตร์แคชอาจเพิ่มข้อมูลของตัวเองเข้าไปด้วย
{
key: "name-of-complicated-computation" ,
store: "ActiveSupport::Cache::MemCacheStore"
}
Copy
คีย์
ค่า
:key
คีย์และค่าที่เขียนลงในสโตร์
:store
ชื่อคลาสสโตร์
เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ MemCacheStore
หรือ RedisCacheStore
.
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
:amount
จำนวนการเพิ่มขึ้น
{
key: "bottles-of-beer" ,
store: "ActiveSupport::Cache::RedisCacheStore" ,
amount: 99
}
Copy
เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ Memcached หรือ Redis cache stores.
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
:amount
จำนวนการลดลง
{
key: "bottles-of-beer" ,
store: "ActiveSupport::Cache::RedisCacheStore" ,
amount: 1
}
Copy
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
{
key: "name-of-complicated-computation" ,
store: "ActiveSupport::Cache::MemCacheStore"
}
Copy
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ RedisCacheStore
,
FileStore
, หรือ MemoryStore
.
คีย์
ค่า
:key
รูปแบบคีย์ที่ใช้
:store
ชื่อคลาสสโตร์
{
key: "posts/*" ,
store: "ActiveSupport::Cache::RedisCacheStore"
}
Copy
เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ MemoryStore
.
คีย์
ค่า
:store
ชื่อคลาสสโตร์
:size
จำนวนรายการในแคชก่อนทำความสะอาด
{
store: "ActiveSupport::Cache::MemoryStore" ,
size: 9001
}
Copy
เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้ MemoryStore
.
คีย์
ค่า
:store
ชื่อคลาสสโตร์
:key
ขนาดเป้าหมาย (ในไบต์) สำหรับแคช
:from
ขนาด (ในไบต์) ของแคชก่อนการตัดทอน
{
store: "ActiveSupport::Cache::MemoryStore" ,
key: 5000 ,
from: 9001
}
Copy
คีย์
ค่า
:key
คีย์ที่ใช้ในสโตร์
:store
ชื่อคลาสสโตร์
{
key: "name-of-complicated-computation" ,
store: "ActiveSupport::Cache::MemCacheStore"
}
Copy
คีย์
ค่า
:serializer
ซีเรียลไรเซอร์หลัก (ที่ตั้งใจ)
:fallback
ซีเรียลไรเซอร์สำรอง (จริง)
:serialized
สตริงที่ถูกซีเรียลไรซ์
:deserialized
ค่าที่ถูกแปลงกลับให้กลับมา
{
serializer: :json_allow_marshal ,
fallback: :marshal ,
serialized: " \x04\b { \x06 I \"\n สวัสดี \x06 : \x06 ETI \"\n โลก \x06 ; \x00 T" ,
deserialized: { "สวัสดี" => "โลก" },
}
Copy
คีย์
ค่า
:adapter
ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job
ออบเจ็กต์งาน
คีย์
ค่า
:adapter
ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job
ออบเจ็กต์งาน
คีย์
ค่า
:job
ออบเจ็กต์งาน
:adapter
ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:error
ข้อผิดพลาดที่ทำให้ต้องลองใหม่
:wait
ค่าความล่าช้าของการลองใหม่
คีย์
ค่า
:adapter
ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:jobs
อาร์เรย์ของออบเจ็กต์งาน
คีย์
ค่า
:adapter
ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job
ออบเจ็กต์งาน
คีย์
ค่า
:adapter
ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job
ออบเจ็กต์งาน
:db_runtime
จำนวนเวลาที่ใช้ในการดำเนินการคิวรีฐานข้อมูลในหน่วยเวลา (มิลลิวินาที)
คีย์
ค่า
:adapter
ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job
ออบเจ็กต์งาน
:error
ข้อผิดพลาดที่ทำให้ต้องลองใหม่
คีย์
ค่า
:adapter
ออบเจ็กต์ QueueAdapter ที่ประมวลผลงาน
:job
ออบเจ็กต์งาน
:error
ข้อผิดพลาดที่ทำให้ต้องละทิ้ง
คีย์
ค่า
:channel_class
ชื่อคลาสช่องสื่อสาร
:action
การกระทำ
:data
แฮชของข้อมูล
คีย์
ค่า
:channel_class
ชื่อคลาสช่องสื่อสาร
:data
แฮชของข้อมูล
:via
ผ่าน
คีย์
ค่า
:channel_class
ชื่อคลาสช่องสื่อสาร
คีย์
ค่า
:channel_class
ชื่อคลาสช่องสื่อสาร
คีย์
ค่า
:broadcasting
การกระจายชื่อ
:message
แฮชของข้อความ
:coder
โคเดอร์
คีย์
ค่า
:key
โทเค็นความปลอดภัย
คีย์
ค่า
:analyzer
ชื่อตัววิเคราะห์ เช่น ffprobe
คีย์
ค่า
:key
โทเค็นความปลอดภัย
:service
ชื่อของบริการ
:checksum
เช็คซัมเพื่อให้แน่ใจว่าคงสภาพ
คีย์
ค่า
:key
โทเค็นที่ปลอดภัย
:service
ชื่อบริการ
คีย์
ค่า
:key
โทเค็นที่ปลอดภัย
:service
ชื่อบริการ
:range
ช่วงไบต์ที่พยายามอ่าน
คีย์
ค่า
:key
โทเค็นที่ปลอดภัย
:service
ชื่อบริการ
คีย์
ค่า
:key
โทเค็นที่ปลอดภัย
:service
ชื่อบริการ
คีย์
ค่า
:prefix
คำนำหน้าคีย์
:service
ชื่อบริการ
คีย์
ค่า
:key
โทเค็นที่ปลอดภัย
:service
ชื่อบริการ
:exist
ไฟล์หรือบล็อบมีหรือไม่มี
คีย์
ค่า
:key
โทเค็นที่ปลอดภัย
:service
ชื่อบริการ
:url
URL ที่สร้างขึ้น
เหตุการณ์นี้เกิดขึ้นเฉพาะเมื่อใช้บริการ Google Cloud Storage
คีย์
ค่า
:key
โทเค็นที่ปลอดภัย
:service
ชื่อบริการ
:content_type
ฟิลด์ HTTP Content-Type
:disposition
ฟิลด์ HTTP Content-Disposition
คีย์
ค่า
:mailbox
อินสแตนซ์ของคลาส Mailbox ที่สืบทอดมาจาก ActionMailbox::Base
:inbound_email
แฮชที่มีข้อมูลเกี่ยวกับอีเมลที่เข้ารับการประมวลผล
{
mailbox: #<RepliesMailbox:0x00007f9f7a8388>,
inbound_email: {
id: 1 ,
message_id: "[email protected] " ,
status: "processing"
}
}
Copy
คีย์
ค่า
:initializer
เส้นทางของไฟล์เริ่มต้นที่โหลดใน config/initializers
คีย์
ค่า
:message
ข้อความเตือนการเลิกใช้งาน
:callstack
ตำแหน่งที่เกิดการเลิกใช้งาน
:gem_name
ชื่อเจ็มที่รายงานการเลิกใช้งาน
:deprecation_horizon
เวอร์ชันที่พฤติกรรมที่เลิกใช้งานจะถูกลบออก
หากเกิดข้อยกเว้นขึ้นในระหว่างการใช้งานเครื่องมือวัด ข้อมูลในเครื่องมือวัดจะรวมข้อมูลเกี่ยวกับข้อยกเว้นด้วย
คีย์
ค่า
:exception
อาร์เรย์ที่มีสองสมาชิก ชื่อคลาสของข้อยกเว้นและข้อความ
:exception_object
ออบเจกต์ข้อยกเว้น
การเพิ่มเหตุการณ์ที่กำหนดเองง่ายเช่นกัน Active Support จะดูแลการทำงานหนักให้คุณ คุณเพียงแค่เรียกใช้ ActiveSupport::Notifications.instrument
พร้อมกับ name
, payload
, และบล็อก การแจ้งเตือนจะถูกส่งหลังจากที่บล็อกสิ้นสุดลง Active Support จะสร้างเวลาเริ่มต้นและเวลาสิ้นสุด และเพิ่ม ID ของเครื่องมือวัดที่ไม่ซ้ำกัน ข้อมูลทั้งหมดที่ส่งเข้าไปในการเรียกใช้ instrument
จะถูกส่งไปยังเครื่องมือวัด
นี่คือตัวอย่าง:
ActiveSupport :: Notifications . instrument "my.custom.event" , this: :data do
# ทำสิ่งที่คุณต้องการทำที่นี่
end
Copy
ตอนนี้คุณสามารถฟังก์ชันเหตุการณ์นี้ได้ด้วย:
ActiveSupport :: Notifications . subscribe "my.custom.event" do | name , started , finished , unique_id , data |
puts data . inspect # {:this=>:data}
end
Copy
คุณยังสามารถเรียกใช้ instrument
โดยไม่ต้องส่งบล็อกได้เช่นกัน ซึ่งจะช่วยให้คุณใช้โครงสร้างการใช้เครื่องมือสื่อสารอื่นได้
ActiveSupport :: Notifications . instrument "my.custom.event" , this: :data
ActiveSupport :: Notifications . subscribe "my.custom.event" do | name , started , finished , unique_id , data |
puts data . inspect # {:this=>:data}
end
Copy
คุณควรปฏิบัติตามคำแนะนำของ Rails เมื่อกำหนดเหตุการณ์ของคุณเอง รูปแบบคือ: event.library
ถ้าแอปพลิเคชันของคุณกำลังส่งทวีต คุณควรสร้างเหตุการณ์ที่ชื่อว่า tweet.twitter
ข้อเสนอแนะ
คุณสามารถช่วยปรับปรุงคุณภาพของคู่มือนี้ได้
กรุณาช่วยเพิ่มเติมหากพบข้อผิดพลาดหรือข้อผิดพลาดทางความจริง
เพื่อเริ่มต้นคุณสามารถอ่านส่วน การสนับสนุนเอกสาร ของเราได้
คุณอาจพบเนื้อหาที่ไม่สมบูรณ์หรือเนื้อหาที่ไม่ได้อัปเดต
กรุณาเพิ่มเอกสารที่ขาดหายไปสำหรับเนื้อหาหลัก โปรดตรวจสอบ
Edge Guides ก่อนเพื่อตรวจสอบ
ว่าปัญหาได้รับการแก้ไขหรือไม่ในสาขาหลัก
ตรวจสอบ คู่มือแนวทาง Ruby on Rails
เพื่อดูรูปแบบและกฎเกณฑ์
หากคุณพบข้อผิดพลาดแต่ไม่สามารถแก้ไขได้เอง กรุณา
เปิดปัญหา .
และสุดท้าย การสนทนาใด ๆ เกี่ยวกับ Ruby on Rails
เอกสารยินดีต้อนรับที่สุดใน เว็บบอร์ดอย่างเป็นทางการของ Ruby on Rails .