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
# 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 = []
end

Instance Method Details

#add(fields, owned:) ⇒ Object



29
30
31
# File 'lib/julewire/core/execution/summary_state.rb', line 29

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

#add_attributes(fields, owned:) ⇒ Object



33
34
35
# File 'lib/julewire/core/execution/summary_state.rb', line 33

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

#add_neutral(fields, owned:) ⇒ Object



37
38
39
# File 'lib/julewire/core/execution/summary_state.rb', line 37

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

#append(key, value) ⇒ Object



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

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



98
99
100
# File 'lib/julewire/core/execution/summary_state.rb', line 98

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

#increment(key, by: 1) ⇒ Object



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

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:) ⇒ Object

Raises:

  • (ArgumentError)


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

def increment_attribute(path, by:)
  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[key] = incremented_value(value, by, existing: existing)
end

#measurement(key) ⇒ Object



80
81
82
83
# File 'lib/julewire/core/execution/summary_state.rb', line 80

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

#metrics_hashObject



25
26
27
# File 'lib/julewire/core/execution/summary_state.rb', line 25

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

#non_standard_exception?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/julewire/core/execution/summary_state.rb', line 72

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

#owned_record_input(**fields) ⇒ Object



94
95
96
# File 'lib/julewire/core/execution/summary_state.rb', line 94

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

#payload_hashObject



21
22
23
# File 'lib/julewire/core/execution/summary_state.rb', line 21

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

#record_duration(duration_ms) ⇒ Object



76
77
78
# File 'lib/julewire/core/execution/summary_state.rb', line 76

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

#record_error(error, severity:) ⇒ Object



67
68
69
70
# File 'lib/julewire/core/execution/summary_state.rb', line 67

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

#record_input(**fields) ⇒ Object



90
91
92
# File 'lib/julewire/core/execution/summary_state.rb', line 90

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

#record_measurement(measurement, duration_ms) ⇒ Object



85
86
87
88
# File 'lib/julewire/core/execution/summary_state.rb', line 85

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