Module: Errsight

Defined in:
lib/errsight.rb,
lib/errsight/client.rb,
lib/errsight/logger.rb,
lib/errsight/railtie.rb,
lib/errsight/version.rb,
lib/errsight/middleware.rb,
lib/errsight/configuration.rb,
lib/errsight/capture_middleware.rb

Defined Under Namespace

Classes: CaptureMiddleware, Client, Configuration, ConfigurationError, Error, Logger, Middleware, Railtie

Constant Summary collapse

50
VERSION =
"0.1.5"

Class Method Summary collapse

Class Method Details

.add_breadcrumb(category:, message:, level: :info, data: nil) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/errsight.rb', line 54

def add_breadcrumb(category:, message:, level: :info, data: nil)
  crumbs = Thread.current[:errsight_breadcrumbs] ||= []
  crumbs << {
    timestamp: Time.now.iso8601(3),
    category: category.to_s,
    level: level.to_s,
    message: message.to_s,
    data: data.is_a?(Hash) ? data : nil
  }.compact
  crumbs.shift while crumbs.size > BREADCRUMB_LIMIT
end

.capture_exception(exception, metadata: {}, fingerprint: nil, user: nil, tags: nil) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/errsight.rb', line 93

def capture_exception(exception, metadata: {}, fingerprint: nil, user: nil, tags: nil)
  return unless exception.is_a?(Exception)

  log(
    level: :error,
    message: "#{exception.class}: #{exception.message}",
    backtrace: exception.backtrace&.join("\n"),
    metadata: .merge(exception_class: exception.class.to_s),
    fingerprint: fingerprint,
    user: user,
    tags: tags
  )
end

.clear_breadcrumbsObject



66
67
68
# File 'lib/errsight.rb', line 66

def clear_breadcrumbs
  Thread.current[:errsight_breadcrumbs] = nil
end

.clear_tagsObject



50
51
52
# File 'lib/errsight.rb', line 50

def clear_tags
  Thread.current[:errsight_tags] = nil
end

.clear_userObject



35
36
37
# File 'lib/errsight.rb', line 35

def clear_user
  Thread.current[:errsight_user] = nil
end

.clientObject



27
28
29
# File 'lib/errsight.rb', line 27

def client
  @client ||= Client.new(configuration)
end

.configurationObject



17
18
19
# File 'lib/errsight.rb', line 17

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



21
22
23
24
25
# File 'lib/errsight.rb', line 21

def configure
  yield configuration
  configuration.validate!
  configuration
end

.log(level:, message:, backtrace: nil, environment: nil, metadata: {}, occurred_at: nil, fingerprint: nil, user: nil, tags: nil, release: nil) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/errsight.rb', line 70

def log(level:, message:, backtrace: nil, environment: nil, metadata: {},
        occurred_at: nil, fingerprint: nil, user: nil, tags: nil, release: nil)
  return unless configuration.enabled?
  return if level_below_threshold?(level)

  event = {
    ingestion_id: SecureRandom.uuid,
    level: level.to_s,
    message: message.to_s,
    backtrace: backtrace,
    environment: environment || configuration.environment,
    metadata: ,
    occurred_at: (occurred_at || Time.now).iso8601(3),
    release: release || configuration.release,
    user: user || Thread.current[:errsight_user],
    tags: merge_tags(tags),
    breadcrumbs: Thread.current[:errsight_breadcrumbs] || []
  }
  event[:fingerprint] = fingerprint if fingerprint
  event.compact!
  client.enqueue(event)
end

.set_tag(key, value) ⇒ Object



39
40
41
42
# File 'lib/errsight.rb', line 39

def set_tag(key, value)
  tags = Thread.current[:errsight_tags] ||= {}
  tags[key.to_s] = value.to_s
end

.set_tags(tags) ⇒ Object



44
45
46
47
48
# File 'lib/errsight.rb', line 44

def set_tags(tags)
  return unless tags.is_a?(Hash)
  store = Thread.current[:errsight_tags] ||= {}
  tags.each { |k, v| store[k.to_s] = v.to_s }
end

.set_user(user) ⇒ Object



31
32
33
# File 'lib/errsight.rb', line 31

def set_user(user)
  Thread.current[:errsight_user] = user.is_a?(Hash) ? user : nil
end