Class: Julewire::Core::Execution::SummaryState

Inherits:
Object
  • Object
show all
Defined in:
lib/julewire/core/execution/summary_state.rb

Instance Method Summary collapse

Constructor Details

#initialize(event:, severity:, source:) ⇒ SummaryState

Returns a new instance of SummaryState.



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/julewire/core/execution/summary_state.rb', line 10

def initialize(event:, severity:, source:)
  @event = event
  @severity = severity
  @source = source
  @payload = {}
  @neutral = {}
  @attributes = {}
  @metrics = {}
  @errors = []
  @error_severity = nil
  @record_input = nil
end

Instance Method Details

#add(fields, owned: false) ⇒ Object



31
32
33
# File 'lib/julewire/core/execution/summary_state.rb', line 31

def add(fields, owned: false)
  merge_fields!(@payload, fields, owned: owned)
end

#add_attributes(fields, owned: false) ⇒ Object



35
36
37
# File 'lib/julewire/core/execution/summary_state.rb', line 35

def add_attributes(fields, owned: false)
  deep_merge_fields!(@attributes, fields, owned: owned)
end

#add_neutral(fields, owned: false) ⇒ Object



39
40
41
# File 'lib/julewire/core/execution/summary_state.rb', line 39

def add_neutral(fields, owned: false)
  deep_merge_fields!(@neutral, fields, owned: owned)
end

#append(key, value) ⇒ Object



61
62
63
64
65
66
67
# File 'lib/julewire/core/execution/summary_state.rb', line 61

def append(key, value)
  key = Fields::Internal.normalize_key(key)
  current = Fields::FieldSet.value_for(@payload, key, default: MISSING)
  values = array_value(current, existing: !current.equal?(MISSING))
  @payload[key] = values
  values << Fields::FieldSet.deep_dup(value)
end

#finalize_record_input(**fields) ⇒ Object



100
101
102
# File 'lib/julewire/core/execution/summary_state.rb', line 100

def finalize_record_input(**fields)
  @record_input = build_record_input(**fields)
end

#increment(key, by: 1) ⇒ Object



54
55
56
57
58
59
# File 'lib/julewire/core/execution/summary_state.rb', line 54

def increment(key, by: 1)
  key = Fields::Internal.normalize_key(key)
  value = Fields::FieldSet.value_for(@payload, key, default: MISSING)
  existing = !value.equal?(MISSING)
  @payload[key] = incremented_value(value, by, existing: existing)
end

#increment_attribute(path, by: 1) ⇒ Object

Raises:

  • (ArgumentError)


43
44
45
46
47
48
49
50
51
52
# File 'lib/julewire/core/execution/summary_state.rb', line 43

def increment_attribute(path, by: 1)
  path = Fields::Internal.normalize_path(path)
  raise ArgumentError, "attribute path is required" if path.empty?

  container = attribute_container(path)
  key = path.last
  value = Fields::FieldSet.value_for(container, key, default: MISSING)
  existing = !value.equal?(MISSING)
  container[Fields::Internal.normalize_key(key)] = incremented_value(value, by, existing: existing)
end

#measurement(key) ⇒ Object



82
83
84
85
# File 'lib/julewire/core/execution/summary_state.rb', line 82

def measurement(key)
  base = measurement_base(key)
  Measurement.new(:"#{base}_count", :"#{base}_duration_ms")
end

#metrics_hashObject



27
28
29
# File 'lib/julewire/core/execution/summary_state.rb', line 27

def metrics_hash
  Fields::FieldSet.deep_dup(@metrics)
end

#non_standard_exception?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/julewire/core/execution/summary_state.rb', line 74

def non_standard_exception?
  @errors.any? { !it.is_a?(StandardError) }
end

#owned_record_input(**fields) ⇒ Object



96
97
98
# File 'lib/julewire/core/execution/summary_state.rb', line 96

def owned_record_input(**fields)
  @record_input || build_record_input(**fields)
end

#payload_hashObject



23
24
25
# File 'lib/julewire/core/execution/summary_state.rb', line 23

def payload_hash
  Fields::FieldSet.deep_dup(@payload)
end

#record_duration(duration_ms) ⇒ Object



78
79
80
# File 'lib/julewire/core/execution/summary_state.rb', line 78

def record_duration(duration_ms)
  @metrics[:duration_ms] = duration_ms
end

#record_error(error, severity: nil) ⇒ Object



69
70
71
72
# File 'lib/julewire/core/execution/summary_state.rb', line 69

def record_error(error, severity: nil)
  @errors << error
  @error_severity = Records::Severity.normalize(severity) unless severity.nil?
end

#record_input(**fields) ⇒ Object



92
93
94
# File 'lib/julewire/core/execution/summary_state.rb', line 92

def record_input(**fields)
  Fields::FieldSet.deep_dup(owned_record_input(**fields))
end

#record_measurement(measurement, duration_ms) ⇒ Object



87
88
89
90
# File 'lib/julewire/core/execution/summary_state.rb', line 87

def record_measurement(measurement, duration_ms)
  increment(measurement.count_key)
  increment_metric(measurement.duration_key, by: duration_ms)
end