Class: TestBench::Telemetry

Inherits:
Object
  • Object
show all
Defined in:
lib/test_bench/telemetry/sink.rb,
lib/test_bench/telemetry/event.rb,
lib/test_bench/telemetry/sink/file.rb,
lib/test_bench/telemetry/telemetry.rb,
lib/test_bench/telemetry/event_data.rb,
lib/test_bench/telemetry/substitute.rb,
lib/test_bench/telemetry/sink/handler.rb,
lib/test_bench/telemetry/controls/sink.rb,
lib/test_bench/telemetry/controls/time.rb,
lib/test_bench/telemetry/controls/event.rb,
lib/test_bench/telemetry/controls/random.rb,
lib/test_bench/telemetry/substitute/sink.rb,
lib/test_bench/telemetry/controls/handler.rb,
lib/test_bench/telemetry/controls/path/file.rb,
lib/test_bench/telemetry/controls/event_data.rb,
lib/test_bench/telemetry/controls/process_id.rb,
lib/test_bench/telemetry/controls/event/metadata.rb,
lib/test_bench/telemetry/event_data/serialization.rb,
lib/test_bench/telemetry/sink/handler/event_registry.rb

Direct Known Subclasses

Substitute::Telemetry

Defined Under Namespace

Modules: Controls, Event, Sink, Substitute Classes: EventData

Constant Summary collapse

RegistrationError =
Class.new(RuntimeError)
GetError =
Class.new(RuntimeError)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#sinksObject



6
7
8
# File 'lib/test_bench/telemetry/telemetry.rb', line 6

def sinks
  @sinks ||= []
end

Class Method Details

.build(*sinks) ⇒ Object



11
12
13
14
15
16
17
18
19
# File 'lib/test_bench/telemetry/telemetry.rb', line 11

def self.build(*sinks)
  instance = new

  sinks.each do |sink|
    instance.register(sink)
  end

  instance
end

.configure(receiver, *sinks, attr_name: nil) ⇒ Object



21
22
23
24
25
26
# File 'lib/test_bench/telemetry/telemetry.rb', line 21

def self.configure(receiver, *sinks, attr_name: nil)
  attr_name ||= :telemetry

  instance = build(*sinks)
  receiver.public_send(:"#{attr_name}=", instance)
end

Instance Method Details

#get_sink(sink_class) ⇒ Object



74
75
76
77
78
79
80
81
82
# File 'lib/test_bench/telemetry/telemetry.rb', line 74

def get_sink(sink_class)
  sink, *other_sinks = get_sinks(sink_class)

  if other_sinks.any?
    raise GetError, "Multiple sinks match: #{sink_class.inspect}"
  end

  sink
end

#get_sinks(sink_class) ⇒ Object



84
85
86
87
88
# File 'lib/test_bench/telemetry/telemetry.rb', line 84

def get_sinks(sink_class)
  sinks.select do |sink|
    sink.instance_of?(sink_class)
  end
end

#record(event) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/test_bench/telemetry/telemetry.rb', line 28

def record(event)
  if event.is_a?(Event)
    event. ||= Event::Metadata.new

    event_data = Event::Export.(event)
  else
    event_data = event
  end

  sinks.each do |sink|
    sink.receive(event_data)
  end

  event_data
end

#register(sink) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/test_bench/telemetry/telemetry.rb', line 44

def register(sink)
  if registered?(sink)
    raise RegistrationError, "Already registered #{sink.inspect}"
  end

  sinks.push(sink)
end

#registered?(sink_or_sink_class) ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/test_bench/telemetry/telemetry.rb', line 60

def registered?(sink_or_sink_class)
  if sink_or_sink_class.is_a?(Sink)
    sink = sink_or_sink_class

    sinks.include?(sink)
  else
    sink_class = sink_or_sink_class

    sink = get_sink(sink_class)

    !sink.nil?
  end
end

#unregister(sink) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/test_bench/telemetry/telemetry.rb', line 52

def unregister(sink)
  deleted_sink = sinks.delete(sink)

  if deleted_sink.nil?
    raise RegistrationError, "Not registered #{sink.inspect}"
  end
end