Module: Logister::ContextStore

Defined in:
lib/logister/context_store.rb

Constant Summary collapse

REQUEST_SCOPE_KEY =
:__logister_request_scope
MAX_REQUEST_SUMMARIES =
200

Class Method Summary collapse

Class Method Details

.add_breadcrumb(category:, message:, data: {}, level: "info", timestamp: Time.now.utc.iso8601) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/logister/context_store.rb', line 15

def add_breadcrumb(category:, message:, data: {}, level: "info", timestamp: Time.now.utc.iso8601)
  scope = request_scope
  breadcrumbs = scope[:breadcrumbs]
  breadcrumbs << {
    category: category.to_s,
    message: message.to_s,
    level: level.to_s,
    timestamp: timestamp,
    data: sanitize_hash(data)
  }.compact
  trim_collection!(breadcrumbs, max_breadcrumbs)
end

.add_dependency(name:, host: nil, method: nil, status: nil, duration_ms: nil, kind: nil, data: {}) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/logister/context_store.rb', line 32

def add_dependency(name:, host: nil, method: nil, status: nil, duration_ms: nil, kind: nil, data: {})
  scope = request_scope
  deps = scope[:dependencies]
  deps << sanitize_hash(
    {
      name: name.to_s.presence,
      host: host.to_s.presence,
      method: method.to_s.presence,
      status: status,
      durationMs: duration_ms && duration_ms.to_f.round(2),
      kind: kind.to_s.presence,
      data: sanitize_hash(data)
    }.compact
  )
  trim_collection!(deps, max_dependencies)
end

.add_manual_breadcrumb(**kwargs) ⇒ Object



75
76
77
# File 'lib/logister/context_store.rb', line 75

def add_manual_breadcrumb(**kwargs)
  add_breadcrumb(**kwargs)
end

.add_manual_dependency(**kwargs) ⇒ Object



71
72
73
# File 'lib/logister/context_store.rb', line 71

def add_manual_dependency(**kwargs)
  add_dependency(**kwargs)
end


28
29
30
# File 'lib/logister/context_store.rb', line 28

def breadcrumbs
  request_scope[:breadcrumbs].dup
end

.clear_request_summary(request_id) ⇒ Object



67
68
69
# File 'lib/logister/context_store.rb', line 67

def clear_request_summary(request_id)
  request_summaries.delete(request_id.to_s)
end

.dependenciesObject



49
50
51
# File 'lib/logister/context_store.rb', line 49

def dependencies
  request_scope[:dependencies].dup
end

.request_summary(request_id) ⇒ Object



61
62
63
64
65
# File 'lib/logister/context_store.rb', line 61

def request_summary(request_id)
  return nil if request_id.to_s.empty?

  request_summaries[request_id.to_s]
end

.reset_request_scope!Object



8
9
10
11
12
13
# File 'lib/logister/context_store.rb', line 8

def reset_request_scope!
  Thread.current[REQUEST_SCOPE_KEY] = {
    breadcrumbs: [],
    dependencies: []
  }
end

.store_request_summary(request_id, summary) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/logister/context_store.rb', line 53

def store_request_summary(request_id, summary)
  return if request_id.to_s.empty?

  cache = request_summaries
  cache[request_id.to_s] = sanitize_hash(summary)
  trim_hash!(cache, MAX_REQUEST_SUMMARIES)
end