Class: Observable::Persistence::SpanRepo
- Inherits:
-
Object
- Object
- Observable::Persistence::SpanRepo
- Includes:
- Enumerable
- Defined in:
- lib/observable/persistence/span_repo.rb
Instance Method Summary collapse
- #ai ⇒ Object
- #each ⇒ Object
- #empty? ⇒ Boolean
- #find_by!(name:) ⇒ Object
- #find_by_attrs!(attrs) ⇒ Object
- #find_one!(attrs: {}, &block) ⇒ Object
- #in_code_namespace(namespace) ⇒ Object
- #in_root_trace ⇒ Object
-
#initialize(spans:) ⇒ SpanRepo
constructor
A new instance of SpanRepo.
- #inspect ⇒ Object
- #one_and_only! ⇒ Object
- #raise_none_found ⇒ Object
- #raise_too_many_found ⇒ Object
- #to_block(query) ⇒ Object
- #where(criteria) ⇒ Object
Constructor Details
#initialize(spans:) ⇒ SpanRepo
Returns a new instance of SpanRepo.
8 9 10 |
# File 'lib/observable/persistence/span_repo.rb', line 8 def initialize(spans:) @spans = spans.map { |span_or_spandata| Span.from_span_or_spandata(span_or_spandata) } end |
Instance Method Details
#ai ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/observable/persistence/span_repo.rb', line 87 def ai grouped_spans = group_by(&:trace_id) output = [] grouped_spans.each do |trace_id, spans| output << colorize_trace_header(trace_id) spans.each do |span| output << span.ai end end output.join("\n") end |
#each ⇒ Object
12 13 14 |
# File 'lib/observable/persistence/span_repo.rb', line 12 def each(&) @spans.each(&) end |
#empty? ⇒ Boolean
49 50 51 |
# File 'lib/observable/persistence/span_repo.rb', line 49 def empty?(&) count(&).zero? end |
#find_by!(name:) ⇒ Object
62 63 64 65 |
# File 'lib/observable/persistence/span_repo.rb', line 62 def find_by!(name:) span = find { |s| s.name == name } span || raise(Observable::NotFound, "No spans found with name: #{name}\n\nSpans:\n#{ai}") end |
#find_by_attrs!(attrs) ⇒ Object
67 68 69 70 |
# File 'lib/observable/persistence/span_repo.rb', line 67 def find_by_attrs!(attrs) span = find { |s| matches_criteria?(s, attrs) } span || raise(Observable::NotFound, "No spans found with attributes: #{attrs}\n\nSpans:\n#{ai}") end |
#find_one!(attrs: {}, &block) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/observable/persistence/span_repo.rb', line 37 def find_one!(attrs: {}, &block) block = to_block(attrs) if attrs.any? && !block_given? if one?(&block) find(&block) elsif empty?(&block) raise_none_found else raise_too_many_found(&block) end end |
#in_code_namespace(namespace) ⇒ Object
16 17 18 |
# File 'lib/observable/persistence/span_repo.rb', line 16 def in_code_namespace(namespace) select { |span| span.code_namespace == namespace } end |
#in_root_trace ⇒ Object
20 21 22 23 24 25 26 27 |
# File 'lib/observable/persistence/span_repo.rb', line 20 def in_root_trace result = group_by(&:trace_id).find { |_trace_id, spans| spans.count > 1 } if result self.class.new(spans: result.last) else self.class.new(spans: []) end end |
#inspect ⇒ Object
83 84 85 |
# File 'lib/observable/persistence/span_repo.rb', line 83 def inspect ai end |
#one_and_only! ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/observable/persistence/span_repo.rb', line 29 def one_and_only! if one? first else raise ArgumentError, "Expected 1 span, but found #{count}: #{to_a}" end end |
#raise_none_found ⇒ Object
53 54 55 |
# File 'lib/observable/persistence/span_repo.rb', line 53 def raise_none_found raise ArgumentError, "No spans found" end |
#raise_too_many_found ⇒ Object
57 58 59 60 |
# File 'lib/observable/persistence/span_repo.rb', line 57 def raise_too_many_found(&) matched = select(&) raise ArgumentError, "Too many spans found:\n#{matched.inspect}" end |
#to_block(query) ⇒ Object
77 78 79 80 81 |
# File 'lib/observable/persistence/span_repo.rb', line 77 def to_block(query) lambda do |object| object.attrs.transform_keys(&:to_s).slice(*query.transform_keys(&:to_s).keys) == query.transform_keys(&:to_s) end end |
#where(criteria) ⇒ Object
72 73 74 75 |
# File 'lib/observable/persistence/span_repo.rb', line 72 def where(criteria) matching_spans = select { |span| matches_criteria?(span, criteria) } self.class.new(spans: matching_spans) end |