Class: Sciosano::Breadcrumb
- Inherits:
-
Object
- Object
- Sciosano::Breadcrumb
- Defined in:
- lib/sciosano/breadcrumb.rb
Overview
Breadcrumb represents a single user action or event
Constant Summary collapse
- TYPES =
%i[default http navigation click console custom].freeze
Instance Attribute Summary collapse
-
#category ⇒ Object
readonly
Returns the value of attribute category.
-
#data ⇒ Object
readonly
Returns the value of attribute data.
-
#message ⇒ Object
readonly
Returns the value of attribute message.
-
#timestamp ⇒ Object
readonly
Returns the value of attribute timestamp.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Class Method Summary collapse
-
.console(level:, message:) ⇒ Breadcrumb
Create console/log breadcrumb.
-
.http(method:, url:, status_code: nil, duration: nil) ⇒ Breadcrumb
Create HTTP request breadcrumb.
-
.navigation(from:, to:) ⇒ Breadcrumb
Create navigation breadcrumb.
-
.query(sql:, name: nil, duration: nil) ⇒ Breadcrumb
Create ActiveRecord query breadcrumb.
-
.sidekiq_job(job_class:, job_id:, queue:) ⇒ Breadcrumb
Create Sidekiq job breadcrumb.
Instance Method Summary collapse
-
#initialize(type: :default, category:, message:, data: {}, timestamp: nil) ⇒ Breadcrumb
constructor
A new instance of Breadcrumb.
-
#to_h ⇒ Hash
Convert to hash for API.
Constructor Details
#initialize(type: :default, category:, message:, data: {}, timestamp: nil) ⇒ Breadcrumb
Returns a new instance of Breadcrumb.
10 11 12 13 14 15 16 |
# File 'lib/sciosano/breadcrumb.rb', line 10 def initialize(type: :default, category:, message:, data: {}, timestamp: nil) @type = TYPES.include?(type) ? type : :default @category = category.to_s @message = .to_s @data = data @timestamp = || Time.now.utc.iso8601(3) end |
Instance Attribute Details
#category ⇒ Object (readonly)
Returns the value of attribute category.
8 9 10 |
# File 'lib/sciosano/breadcrumb.rb', line 8 def category @category end |
#data ⇒ Object (readonly)
Returns the value of attribute data.
8 9 10 |
# File 'lib/sciosano/breadcrumb.rb', line 8 def data @data end |
#message ⇒ Object (readonly)
Returns the value of attribute message.
8 9 10 |
# File 'lib/sciosano/breadcrumb.rb', line 8 def @message end |
#timestamp ⇒ Object (readonly)
Returns the value of attribute timestamp.
8 9 10 |
# File 'lib/sciosano/breadcrumb.rb', line 8 def @timestamp end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
8 9 10 |
# File 'lib/sciosano/breadcrumb.rb', line 8 def type @type end |
Class Method Details
.console(level:, message:) ⇒ Breadcrumb
Create console/log breadcrumb
71 72 73 74 75 76 77 78 |
# File 'lib/sciosano/breadcrumb.rb', line 71 def self.console(level:, message:) new( type: :console, category: "console", message: .to_s[0..500], data: { level: level } ) end |
.http(method:, url:, status_code: nil, duration: nil) ⇒ Breadcrumb
Create HTTP request breadcrumb
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/sciosano/breadcrumb.rb', line 38 def self.http(method:, url:, status_code: nil, duration: nil) new( type: :http, category: "http", message: "#{method.upcase} #{url}", data: { method: method.upcase, url: url, status_code: status_code, duration: duration }.compact ) end |
.navigation(from:, to:) ⇒ Breadcrumb
Create navigation breadcrumb
57 58 59 60 61 62 63 64 |
# File 'lib/sciosano/breadcrumb.rb', line 57 def self.(from:, to:) new( type: :navigation, category: "navigation", message: "Navigated to #{to}", data: { from: from, to: to } ) end |
.query(sql:, name: nil, duration: nil) ⇒ Breadcrumb
Create ActiveRecord query breadcrumb
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/sciosano/breadcrumb.rb', line 86 def self.query(sql:, name: nil, duration: nil) # Truncate long queries truncated_sql = sql.to_s[0..500] truncated_sql += "..." if sql.to_s.length > 500 new( type: :default, category: "query", message: name || "SQL Query", data: { sql: truncated_sql, duration: duration }.compact ) end |
.sidekiq_job(job_class:, job_id:, queue:) ⇒ Breadcrumb
Create Sidekiq job breadcrumb
108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/sciosano/breadcrumb.rb', line 108 def self.sidekiq_job(job_class:, job_id:, queue:) new( type: :default, category: "job", message: "Processing #{job_class}", data: { job_class: job_class, job_id: job_id, queue: queue } ) end |
Instance Method Details
#to_h ⇒ Hash
Convert to hash for API
21 22 23 24 25 26 27 28 29 |
# File 'lib/sciosano/breadcrumb.rb', line 21 def to_h { type: type, category: category, message: , data: data, timestamp: } end |