Class: Desiru::Core::TraceCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/desiru/core/trace.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTraceCollector

Returns a new instance of TraceCollector.



68
69
70
71
72
# File 'lib/desiru/core/trace.rb', line 68

def initialize
  @traces = []
  @enabled = true
  @filters = []
end

Instance Attribute Details

#tracesObject (readonly)

Returns the value of attribute traces.



66
67
68
# File 'lib/desiru/core/trace.rb', line 66

def traces
  @traces
end

Instance Method Details

#add_filter(&block) ⇒ Object



81
82
83
# File 'lib/desiru/core/trace.rb', line 81

def add_filter(&block)
  @filters << block if block_given?
end

#by_module(module_name) ⇒ Object



117
118
119
# File 'lib/desiru/core/trace.rb', line 117

def by_module(module_name)
  @traces.select { |trace| trace.module_name == module_name }
end

#clearObject



101
102
103
# File 'lib/desiru/core/trace.rb', line 101

def clear
  @traces.clear
end

#clear_filtersObject



85
86
87
# File 'lib/desiru/core/trace.rb', line 85

def clear_filters
  @filters.clear
end

#collect(trace) ⇒ Object



74
75
76
77
78
79
# File 'lib/desiru/core/trace.rb', line 74

def collect(trace)
  return unless @enabled && trace.is_a?(Trace)
  return if @filters.any? { |filter| !filter.call(trace) }

  @traces << trace
end

#disableObject



93
94
95
# File 'lib/desiru/core/trace.rb', line 93

def disable
  @enabled = false
end

#empty?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/desiru/core/trace.rb', line 109

def empty?
  @traces.empty?
end

#enableObject



89
90
91
# File 'lib/desiru/core/trace.rb', line 89

def enable
  @enabled = true
end

#enabled?Boolean

Returns:

  • (Boolean)


97
98
99
# File 'lib/desiru/core/trace.rb', line 97

def enabled?
  @enabled
end

#exportObject



133
134
135
# File 'lib/desiru/core/trace.rb', line 133

def export
  @traces.map(&:to_h)
end

#failedObject



125
126
127
# File 'lib/desiru/core/trace.rb', line 125

def failed
  @traces.reject(&:success?)
end

#filter_by_module(module_name) ⇒ Object



137
138
139
# File 'lib/desiru/core/trace.rb', line 137

def filter_by_module(module_name)
  @traces.select { |trace| trace.module_name == module_name }
end

#filter_by_success(success: true) ⇒ Object



141
142
143
144
145
146
147
# File 'lib/desiru/core/trace.rb', line 141

def filter_by_success(success: true)
  if success
    @traces.select(&:success?)
  else
    @traces.reject(&:success?)
  end
end

#filter_by_time_range(start_time, end_time) ⇒ Object



149
150
151
# File 'lib/desiru/core/trace.rb', line 149

def filter_by_time_range(start_time, end_time)
  @traces.select { |trace| trace.timestamp.between?(start_time, end_time) }
end

#recent(count = 10) ⇒ Object



113
114
115
# File 'lib/desiru/core/trace.rb', line 113

def recent(count = 10)
  @traces.last(count)
end

#sizeObject



105
106
107
# File 'lib/desiru/core/trace.rb', line 105

def size
  @traces.size
end

#statisticsObject



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/desiru/core/trace.rb', line 153

def statistics
  return default_statistics if @traces.empty?

  total = @traces.size
  successful = @traces.count(&:success?)

  # Group by module
  by_module = @traces.group_by(&:module_name).transform_values do |module_traces|
    durations = module_traces.map(&:duration_ms).compact
    {
      count: module_traces.size,
      avg_duration_ms: durations.empty? ? 0 : durations.sum / durations.size.to_f
    }
  end

  # Calculate average duration
  all_durations = @traces.map(&:duration_ms).compact
  avg_duration = all_durations.empty? ? 0 : all_durations.sum / all_durations.size.to_f

  {
    total_traces: total,
    success_rate: total.positive? ? successful.to_f / total : 0,
    average_duration_ms: avg_duration,
    by_module: by_module
  }
end

#successfulObject



121
122
123
# File 'lib/desiru/core/trace.rb', line 121

def successful
  @traces.select(&:success?)
end

#to_examplesObject



129
130
131
# File 'lib/desiru/core/trace.rb', line 129

def to_examples
  @traces.map(&:to_example)
end