Class: Desiru::Core::TraceCollector
- Inherits:
-
Object
- Object
- Desiru::Core::TraceCollector
- Defined in:
- lib/desiru/core/trace.rb
Instance Attribute Summary collapse
-
#traces ⇒ Object
readonly
Returns the value of attribute traces.
Instance Method Summary collapse
- #add_filter(&block) ⇒ Object
- #by_module(module_name) ⇒ Object
- #clear ⇒ Object
- #clear_filters ⇒ Object
- #collect(trace) ⇒ Object
- #disable ⇒ Object
- #empty? ⇒ Boolean
- #enable ⇒ Object
- #enabled? ⇒ Boolean
- #export ⇒ Object
- #failed ⇒ Object
- #filter_by_module(module_name) ⇒ Object
- #filter_by_success(success: true) ⇒ Object
- #filter_by_time_range(start_time, end_time) ⇒ Object
-
#initialize ⇒ TraceCollector
constructor
A new instance of TraceCollector.
- #recent(count = 10) ⇒ Object
- #size ⇒ Object
- #statistics ⇒ Object
- #successful ⇒ Object
- #to_examples ⇒ Object
Constructor Details
#initialize ⇒ TraceCollector
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
#traces ⇒ Object (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 |
#clear ⇒ Object
101 102 103 |
# File 'lib/desiru/core/trace.rb', line 101 def clear @traces.clear end |
#clear_filters ⇒ Object
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 |
#disable ⇒ Object
93 94 95 |
# File 'lib/desiru/core/trace.rb', line 93 def disable @enabled = false end |
#empty? ⇒ Boolean
109 110 111 |
# File 'lib/desiru/core/trace.rb', line 109 def empty? @traces.empty? end |
#enable ⇒ Object
89 90 91 |
# File 'lib/desiru/core/trace.rb', line 89 def enable @enabled = true end |
#enabled? ⇒ Boolean
97 98 99 |
# File 'lib/desiru/core/trace.rb', line 97 def enabled? @enabled end |
#export ⇒ Object
133 134 135 |
# File 'lib/desiru/core/trace.rb', line 133 def export @traces.map(&:to_h) end |
#failed ⇒ Object
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..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 |
#size ⇒ Object
105 106 107 |
# File 'lib/desiru/core/trace.rb', line 105 def size @traces.size end |
#statistics ⇒ Object
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 |
#successful ⇒ Object
121 122 123 |
# File 'lib/desiru/core/trace.rb', line 121 def successful @traces.select(&:success?) end |
#to_examples ⇒ Object
129 130 131 |
# File 'lib/desiru/core/trace.rb', line 129 def to_examples @traces.map(&:to_example) end |