Class: Trifle::Traces::Tracer::Hash

Inherits:
Object
  • Object
show all
Defined in:
lib/trifle/traces/tracer/hash.rb

Overview

rubocop:disable Metrics/ClassLength

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key:, reference: nil, meta: nil, config: nil) ⇒ Hash

Returns a new instance of Hash.



9
10
11
12
13
14
15
16
17
# File 'lib/trifle/traces/tracer/hash.rb', line 9

def initialize(key:, reference: nil, meta: nil, config: nil)
  @key = key
  @meta = meta
  @config = config
  set_defaults!

  trace("Tracer has been initialized for #{key}")
  @reference = reference || liftoff.first
end

Instance Attribute Details

#artifactsObject

Returns the value of attribute artifacts.



7
8
9
# File 'lib/trifle/traces/tracer/hash.rb', line 7

def artifacts
  @artifacts
end

#dataObject

Returns the value of attribute data.



7
8
9
# File 'lib/trifle/traces/tracer/hash.rb', line 7

def data
  @data
end

#ignoreObject

Returns the value of attribute ignore.



7
8
9
# File 'lib/trifle/traces/tracer/hash.rb', line 7

def ignore
  @ignore
end

#keyObject

Returns the value of attribute key.



7
8
9
# File 'lib/trifle/traces/tracer/hash.rb', line 7

def key
  @key
end

#levelObject

Returns the value of attribute level.



7
8
9
# File 'lib/trifle/traces/tracer/hash.rb', line 7

def level
  @level
end

#metaObject

Returns the value of attribute meta.



7
8
9
# File 'lib/trifle/traces/tracer/hash.rb', line 7

def meta
  @meta
end

#referenceObject

Returns the value of attribute reference.



7
8
9
# File 'lib/trifle/traces/tracer/hash.rb', line 7

def reference
  @reference
end

#stateObject

Returns the value of attribute state.



7
8
9
# File 'lib/trifle/traces/tracer/hash.rb', line 7

def state
  @state
end

#tagsObject

Returns the value of attribute tags.



7
8
9
# File 'lib/trifle/traces/tracer/hash.rb', line 7

def tags
  @tags
end

Instance Method Details

#artifact(name, path) ⇒ Object



105
106
107
108
109
110
# File 'lib/trifle/traces/tracer/hash.rb', line 105

def artifact(name, path)
  @data << { at: now, message: name, state: :success, type: :media, size: File.size(path) }
  @artifacts << path
  bump
  path
end

#bumpObject



141
142
143
144
145
146
# File 'lib/trifle/traces/tracer/hash.rb', line 141

def bump
  return unless @bumped_at && @bumped_at <= now - config.bump_every

  @bumped_at = now
  config.on_bump(self)
end

#configObject



39
40
41
# File 'lib/trifle/traces/tracer/hash.rb', line 39

def config
  @config || Trifle::Traces.default
end

#decreaseObject



91
92
93
# File 'lib/trifle/traces/tracer/hash.rb', line 91

def decrease
  @level -= 1
end

#dump_message(message, type:, state:) ⇒ Object



70
71
72
# File 'lib/trifle/traces/tracer/hash.rb', line 70

def dump_message(message, type:, state:)
  @data << { at: now, message: message, state: state, type: type, level: level }
end

#dump_result(result) ⇒ Object



74
75
76
77
78
79
# File 'lib/trifle/traces/tracer/hash.rb', line 74

def dump_result(result)
  @data << {
    at: now, message: "#{@result_prefix}#{sanitize_result(result)}",
    state: :success, type: :raw, level: level
  }
end

#fail!Object



112
113
114
# File 'lib/trifle/traces/tracer/hash.rb', line 112

def fail!
  @state = :error
end

#ignore!Object



132
133
134
# File 'lib/trifle/traces/tracer/hash.rb', line 132

def ignore!
  @ignore = true
end

#increaseObject



87
88
89
# File 'lib/trifle/traces/tracer/hash.rb', line 87

def increase
  @level += 1
end

#keysObject



47
48
49
50
# File 'lib/trifle/traces/tracer/hash.rb', line 47

def keys
  parts = key.split('/')
  parts.count.times.map { |i| parts[0..i].join('/') }
end

#liftoffObject



136
137
138
139
# File 'lib/trifle/traces/tracer/hash.rb', line 136

def liftoff
  @bumped_at = now
  config.on_liftoff(self)
end

#nowObject



95
96
97
# File 'lib/trifle/traces/tracer/hash.rb', line 95

def now
  Time.now.to_i
end

#pop_all_artifactsObject



35
36
37
# File 'lib/trifle/traces/tracer/hash.rb', line 35

def pop_all_artifacts
  @artifacts.pop(@artifacts.count)
end

#pop_all_dataObject



31
32
33
# File 'lib/trifle/traces/tracer/hash.rb', line 31

def pop_all_data
  @data.pop(@data.count)
end

#result_serializerObject



43
44
45
# File 'lib/trifle/traces/tracer/hash.rb', line 43

def result_serializer
  @result_serializer ||= config.serializer_class.new
end

#running?Boolean

Returns:

  • (Boolean)


128
129
130
# File 'lib/trifle/traces/tracer/hash.rb', line 128

def running?
  @state == :running
end

#sanitize_result(result) ⇒ Object



81
82
83
84
85
# File 'lib/trifle/traces/tracer/hash.rb', line 81

def sanitize_result(result)
  result_serializer.sanitize(result)
rescue StandardError
  Trifle::Traces::Serializer::Inspect.sanitize(result)
end

#set_defaults!Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/trifle/traces/tracer/hash.rb', line 19

def set_defaults!
  @tags = []
  @data = []
  @artifacts = []
  @state = :running
  @ignore = false
  @result_prefix = "\u21B3 "
  @block_begin_suffix = " \u21B4"
  @block_end_suffix = " \u21B5"
  @level = 0
end

#success!Object



120
121
122
# File 'lib/trifle/traces/tracer/hash.rb', line 120

def success!
  @state = :success
end

#success?Boolean

Returns:

  • (Boolean)


124
125
126
# File 'lib/trifle/traces/tracer/hash.rb', line 124

def success?
  @state == :success
end

#tag(tag) ⇒ Object



99
100
101
102
103
# File 'lib/trifle/traces/tracer/hash.rb', line 99

def tag(tag)
  @tags << tag
  bump
  tag
end

#trace(message, state: :success, head: false) ⇒ Object

rubocop:disable Metrics/MethodLength



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/trifle/traces/tracer/hash.rb', line 52

def trace(message, state: :success, head: false) # rubocop:disable Metrics/MethodLength
  dump_message("#{message}#{@block_begin_suffix if block_given?}", type: head ? :head : :text, state: state)
  if block_given?
    increase
    result = yield
  end
rescue StandardError => e
  raise e
ensure
  if block_given?
    decrease
    dump_message("#{message}#{@block_end_suffix}", type: :text, state: e ? :error : state)
    dump_result(result)
  end
  bump
  result
end

#warn!Object



116
117
118
# File 'lib/trifle/traces/tracer/hash.rb', line 116

def warn!
  @state = :warning
end

#wrapupObject



148
149
150
151
# File 'lib/trifle/traces/tracer/hash.rb', line 148

def wrapup
  success! if running?
  config.on_wrapup(self)
end