Class: Sciosano::Breadcrumb

Inherits:
Object
  • Object
show all
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

Class Method Summary collapse

Instance Method Summary collapse

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 = message.to_s
  @data = data
  @timestamp = timestamp || Time.now.utc.iso8601(3)
end

Instance Attribute Details

#categoryObject (readonly)

Returns the value of attribute category.



8
9
10
# File 'lib/sciosano/breadcrumb.rb', line 8

def category
  @category
end

#dataObject (readonly)

Returns the value of attribute data.



8
9
10
# File 'lib/sciosano/breadcrumb.rb', line 8

def data
  @data
end

#messageObject (readonly)

Returns the value of attribute message.



8
9
10
# File 'lib/sciosano/breadcrumb.rb', line 8

def message
  @message
end

#timestampObject (readonly)

Returns the value of attribute timestamp.



8
9
10
# File 'lib/sciosano/breadcrumb.rb', line 8

def timestamp
  @timestamp
end

#typeObject (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

Parameters:

  • Log level

  • Log message

Returns:



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: message.to_s[0..500],
    data: { level: level }
  )
end

.http(method:, url:, status_code: nil, duration: nil) ⇒ Breadcrumb

Create HTTP request breadcrumb

Parameters:

  • HTTP method

  • Request URL

  • (defaults to: nil)

    Response status

  • (defaults to: nil)

    Request duration in ms

Returns:



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

Create navigation breadcrumb

Parameters:

  • Previous URL/path

  • New URL/path

Returns:



57
58
59
60
61
62
63
64
# File 'lib/sciosano/breadcrumb.rb', line 57

def self.navigation(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

Parameters:

  • SQL query

  • (defaults to: nil)

    Query name

  • (defaults to: nil)

    Query duration in ms

Returns:



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

Parameters:

  • Job class name

  • Job ID

  • Queue name

Returns:



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_hHash

Convert to hash for API

Returns:



21
22
23
24
25
26
27
28
29
# File 'lib/sciosano/breadcrumb.rb', line 21

def to_h
  {
    type: type,
    category: category,
    message: message,
    data: data,
    timestamp: timestamp
  }
end