test_bench-telemetry 2.1.1.1 → 3.0.0.0.pre.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8c26aba757580bd5cf36df20a1ab973a8f877fa1aed09ccec87a62e65062653
4
- data.tar.gz: 26c24f89b92f84dd19d65f7f8fafe58aac4cfe37ecdfe4f5ed426a502a75f01c
3
+ metadata.gz: 554962ce7f2d4b3942e7c2a5eb8a155f1d68801bf88d6c5ae28411949eb0295e
4
+ data.tar.gz: ae674e5ddb59572c797e2384f460ac750b46a798f9b7a3ab82a8ae8f103c4406
5
5
  SHA512:
6
- metadata.gz: 9055f7d991af3b61a910213c35029843aec9b03be5788291700ab8dc78d50e2ab22b7ce48cd61769c6d0538ba91a04919bce007a53b9c6634c0a2c4938af8e59
7
- data.tar.gz: a9b235f248a975c175e6e00d778a1d87604fa0d5aef554f5e1d6fce8c9440893567b93ea05820babc26ed446a808d897420f50cd4613322939cbe4e029c261c8
6
+ metadata.gz: '09574fab865fcad0ba8e2d095721501a067ad50e727ce538e360d15f9e1b1449c2c0b1138248855e7d78641f0f526af34eaa60ded327aaf4f2dfd4a98e378817'
7
+ data.tar.gz: c2627c079ef9035c0cea001ff7e1055d4854131b07612c0525925d6d244c1c611f4a9b1fffab709666a0731c30dc97f722ed6b52dc1d9a434c4c122f55dd35b5
@@ -31,11 +31,11 @@ module TestBench
31
31
  end
32
32
 
33
33
  def self.process_id
34
- Controls::ProcessID.example
34
+ ProcessID.example
35
35
  end
36
36
 
37
37
  def self.time
38
- Controls::Time.example
38
+ Time.example
39
39
  end
40
40
 
41
41
  module Other
@@ -47,17 +47,17 @@ module TestBench
47
47
  end
48
48
 
49
49
  def self.process_id
50
- Controls::ProcessID.other_example
50
+ ProcessID.other_example
51
51
  end
52
52
 
53
53
  def self.time
54
- Controls::Time.other_example
54
+ Time.other_example
55
55
  end
56
56
  end
57
57
 
58
58
  module Random
59
59
  def self.example(process_id: nil, time: nil)
60
- process_id ||= Controls::ProcessID.random
60
+ process_id ||= ProcessID.random
61
61
  time ||= Controls::Time.random
62
62
 
63
63
  Metadata.example(process_id:, time:)
@@ -2,8 +2,6 @@ module TestBench
2
2
  class Telemetry
3
3
  module Controls
4
4
  module Event
5
- extend EventData
6
-
7
5
  def self.example(some_attribute: nil, some_other_attribute: nil, event_class: nil, metadata: nil, process_id: nil, time: nil)
8
6
  some_attribute ||= self.some_attribute
9
7
  some_other_attribute ||= self.some_other_attribute
@@ -18,6 +16,11 @@ module TestBench
18
16
  event
19
17
  end
20
18
 
19
+ def self.event_data
20
+ event = self.example
21
+ Telemetry::Event::Export.(event)
22
+ end
23
+
21
24
  def self.other_example
22
25
  Other.example
23
26
  end
@@ -39,19 +42,24 @@ module TestBench
39
42
  end
40
43
 
41
44
  def self.process_id
42
- Controls::EventData.process_id
45
+ EventData.process_id
43
46
  end
44
47
 
45
48
  def self.time
46
- Controls::EventData.time
49
+ EventData.time
47
50
  end
48
51
 
49
- SomeEvent = TestBench::Telemetry::Event.define(:some_attribute, :some_other_attribute)
50
- SomeOtherEvent = TestBench::Telemetry::Event.define(:some_attribute, :some_other_attribute)
52
+ SomeEvent = Telemetry::Event.define(
53
+ :some_attribute,
54
+ :some_other_attribute
55
+ )
51
56
 
52
- module Other
53
- extend EventData
57
+ SomeOtherEvent = Telemetry::Event.define(
58
+ :some_attribute,
59
+ :some_other_attribute
60
+ )
54
61
 
62
+ module Other
55
63
  def self.example(some_attribute: nil, some_other_attribute: nil, metadata: nil, process_id: nil, time: nil)
56
64
  some_attribute ||= self.some_attribute
57
65
  some_other_attribute ||= self.some_other_attribute
@@ -71,11 +79,14 @@ module TestBench
71
79
  def self.some_other_attribute
72
80
  'some-other-alternate-value'
73
81
  end
82
+
83
+ def self.event_data
84
+ event = self.example
85
+ Telemetry::Event::Export.(event)
86
+ end
74
87
  end
75
88
 
76
89
  module Random
77
- extend EventData
78
-
79
90
  def self.example(some_attribute: nil, some_other_attribute: nil, event_class: nil, metadata: nil, process_id: nil, time: nil)
80
91
  some_attribute ||= self.some_attribute
81
92
  some_other_attribute ||= self.some_other_attribute
@@ -104,6 +115,11 @@ module TestBench
104
115
 
105
116
  "#{Event.some_other_attribute}-#{suffix}"
106
117
  end
118
+
119
+ def self.event_data
120
+ event = self.example
121
+ Telemetry::Event::Export.(event)
122
+ end
107
123
  end
108
124
 
109
125
  module Data
@@ -4,10 +4,20 @@ module TestBench
4
4
  module EventData
5
5
  def self.example(type: nil, process_id: nil, time: nil, data: nil)
6
6
  type ||= self.type
7
- process_id ||= self.process_id
8
- time ||= self.time
9
7
  data ||= self.data
10
8
 
9
+ if process_id == :none
10
+ process_id = nil
11
+ else
12
+ process_id ||= self.process_id
13
+ end
14
+
15
+ if time == :none
16
+ time = nil
17
+ else
18
+ time ||= self.time
19
+ end
20
+
11
21
  event_data = Telemetry::EventData.new
12
22
  event_data.type = type
13
23
  event_data.process_id = process_id
@@ -68,8 +78,7 @@ module TestBench
68
78
  true,
69
79
  false,
70
80
  11,
71
- 'some-string',
72
- Time.example
81
+ 'some-string'
73
82
  ]
74
83
  end
75
84
 
@@ -79,8 +88,7 @@ module TestBench
79
88
  Controls::Random.boolean,
80
89
  Controls::Random.boolean,
81
90
  Controls::Random.integer,
82
- Controls::Random.string,
83
- Time.random
91
+ Controls::Random.string
84
92
  ]
85
93
  end
86
94
  end
@@ -93,34 +101,8 @@ module TestBench
93
101
 
94
102
  time_iso8601 = Time::ISO8601.example(time)
95
103
 
96
- "#{type}\t#{process_id}\t#{time_iso8601}\t\ttrue\tfalse\t11\t\"some-string\"\t#{time_iso8601}\r\n"
97
- end
98
-
99
- module Malformed
100
- module Empty
101
- def self.example
102
- ''
103
- end
104
- end
105
-
106
- module IncorrectEventType
107
- def self.example
108
- Text.example(type:)
109
- end
110
-
111
- def self.type
112
- :not_pascal_cased
113
- end
114
- end
115
-
116
- module IncorrectNewlines
117
- def self.example
118
- text = Text.example
119
- text.chomp!("\r\n")
120
- text << "\n"
121
- text
122
- end
123
- end
104
+ json_text = JSON.generate([type, process_id, time_iso8601, [nil, true, false, 11, "some-string"]])
105
+ "#{json_text}\n"
124
106
  end
125
107
  end
126
108
  end
@@ -64,7 +64,7 @@ module TestBench
64
64
  def self.example(event_type=nil)
65
65
  event_type ||= Event::SomeEvent.event_type
66
66
 
67
- event_name = TestBench::Telemetry::Event::EventName.get(event_type)
67
+ event_name = Telemetry::Event::EventName.get(event_type)
68
68
 
69
69
  :"handle_#{event_name}"
70
70
  end
@@ -0,0 +1,37 @@
1
+ module TestBench
2
+ class Telemetry
3
+ module Controls
4
+ module Path
5
+ module File
6
+ def self.example(basename: nil, extension: nil)
7
+ basename ||= self.basename
8
+ extension ||= self.extension
9
+
10
+ filename = "#{basename}#{extension}"
11
+
12
+ tempfile = Tempfile.create(filename)
13
+ tempfile.close
14
+
15
+ ::File.unlink(tempfile)
16
+
17
+ tempfile.path
18
+ end
19
+
20
+ def self.basename
21
+ "some-basename"
22
+ end
23
+
24
+ def self.extension
25
+ ".some-extension"
26
+ end
27
+
28
+ module Read
29
+ def self.call(file_path)
30
+ ::File.read(file_path)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -13,6 +13,10 @@ module TestBench
13
13
  def self.random
14
14
  Random.integer
15
15
  end
16
+
17
+ def self.current_process
18
+ ::Process.pid
19
+ end
16
20
  end
17
21
  end
18
22
  end
@@ -1,7 +1,9 @@
1
1
  module TestBench
2
2
  class Telemetry
3
3
  module Controls
4
- Random = TestBench::Random.build
4
+ module Random
5
+ extend TestBench::Random
6
+ end
5
7
  end
6
8
  end
7
9
  end
@@ -2,55 +2,34 @@ module TestBench
2
2
  class Telemetry
3
3
  module Controls
4
4
  module Time
5
- def self.example(offset_milliseconds: nil, offset_nanoseconds: nil)
6
- if offset_nanoseconds.nil?
7
- offset_milliseconds ||= 0
5
+ def self.example(offset_seconds: nil, offset_milliseconds: nil, offset_nanoseconds: nil)
6
+ offset_nanoseconds ||= 0
7
+
8
+ if not offset_seconds.nil?
9
+ offset_milliseconds = offset_seconds * 1_000
10
+ return example(offset_milliseconds:)
11
+ elsif not offset_milliseconds.nil?
8
12
  offset_nanoseconds = offset_milliseconds * 1_000_000
13
+ return example(offset_nanoseconds:)
9
14
  end
10
15
 
11
16
  nanoseconds = 111_111_111
12
- remaining_offset, additional_nanoseconds = offset_nanoseconds.divmod(1_000_000_000 - nanoseconds)
13
- nanoseconds += additional_nanoseconds
14
- microseconds = Rational(nanoseconds, 1_000)
15
-
16
- if remaining_offset.zero?
17
- seconds = 11
18
- else
19
- remaining_offset, seconds = remaining_offset.divmod(60)
20
- end
17
+ seconds = 11
18
+ minutes = 11
19
+ hours = 11
20
+ day = 1
21
+ month = 1
22
+ year = 2000
21
23
 
22
- if remaining_offset.zero?
23
- minutes = 11
24
- else
25
- remaining_offset, minutes = remaining_offset.divmod(60)
26
- end
24
+ nanoseconds += offset_nanoseconds
27
25
 
28
- if remaining_offset.zero?
29
- hours = 11
30
- else
31
- remaining_offset, hours = remaining_offset.divmod(24)
32
- end
26
+ remaining_offset_seconds, nanoseconds = nanoseconds.divmod(1_000_000_000)
33
27
 
34
- if remaining_offset.zero?
35
- day = 1
36
- else
37
- remaining_offset, day = remaining_offset.divmod(28)
38
- day += 1
39
- end
40
-
41
- if remaining_offset.zero?
42
- month = 1
43
- else
44
- remaining_offset, month = remaining_offset.divmod(12)
45
- month += 1
46
- end
28
+ microseconds = Rational(nanoseconds, 1_000)
47
29
 
48
- year = 2000
49
- if not remaining_offset.zero?
50
- year += remaining_offset
51
- end
30
+ time = ::Time.utc(year, month, day, hours, minutes, seconds, microseconds)
52
31
 
53
- ::Time.utc(year, month, day, hours, minutes, seconds, microseconds)
32
+ time + remaining_offset_seconds
54
33
  end
55
34
 
56
35
  def self.other_example
@@ -1,17 +1,16 @@
1
- require 'test_bench/telemetry/controls/random'
1
+ require 'tempfile'
2
2
 
3
- require 'test_bench/telemetry/controls/file'
3
+ require 'test_bench/telemetry/controls/random'
4
4
 
5
5
  require 'test_bench/telemetry/controls/process_id'
6
6
  require 'test_bench/telemetry/controls/time'
7
7
 
8
+ require 'test_bench/telemetry/controls/path/file'
9
+
8
10
  require 'test_bench/telemetry/controls/event_data'
9
11
 
10
- require 'test_bench/telemetry/controls/event/event_data'
11
12
  require 'test_bench/telemetry/controls/event'
12
13
  require 'test_bench/telemetry/controls/event/metadata'
13
14
 
14
15
  require 'test_bench/telemetry/controls/sink'
15
16
  require 'test_bench/telemetry/controls/handler'
16
- require 'test_bench/telemetry/controls/projection'
17
- require 'test_bench/telemetry/controls/projection/receiver'
@@ -15,7 +15,10 @@ module TestBench
15
15
  cls.class_exec do
16
16
  extend EventType
17
17
  extend EventName
18
+
18
19
  extend Build
20
+
21
+ extend CaseEquality
19
22
  end
20
23
  end
21
24
 
@@ -76,9 +79,28 @@ module TestBench
76
79
 
77
80
  module Build
78
81
  def build(*attributes, process_id: nil, time: nil)
82
+ time ||= ::Time.now
83
+ process_id ||= ::Process.pid
84
+
79
85
  metadata = Metadata.new(process_id, time)
80
86
 
81
- new(*attributes, metadata)
87
+ instance = new(*attributes)
88
+ instance.metadata = metadata
89
+ instance
90
+ end
91
+ end
92
+
93
+ module CaseEquality
94
+ def ===(object)
95
+ case object
96
+ in EventData => event_data
97
+ type = event_data.type
98
+
99
+ type == self.event_type
100
+
101
+ else
102
+ super(object)
103
+ end
82
104
  end
83
105
  end
84
106
 
@@ -2,167 +2,80 @@ module TestBench
2
2
  class Telemetry
3
3
  class EventData
4
4
  module Serialization
5
- Error = Class.new(RuntimeError)
6
-
7
5
  def self.dump(event_data)
8
- type = event_data.type.to_s
9
- process_id = dump_value(event_data.process_id)
10
- time = dump_value(event_data.time)
11
- data = event_data.data
12
-
13
- text = String.new(encoding: 'BINARY')
14
-
15
- text << type
16
-
17
- text << "\t"
18
- text << process_id
19
-
20
- text << "\t"
21
- text << time
22
-
23
- data.each do |value|
24
- text << "\t"
25
- text << dump_value(value)
6
+ data = event_data.data.map do |value|
7
+ case value
8
+ in Time => time
9
+ timestamp(time)
10
+ else
11
+ value
12
+ end
26
13
  end
27
14
 
28
- text << "\r\n"
29
- text
30
- end
15
+ type = event_data.type
16
+ process_id = event_data.process_id
31
17
 
32
- def self.dump_value(value)
33
- case value
34
- when Integer
35
- value.to_s
36
- when Time
37
- value.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
38
- when NilClass
39
- ''
40
- when TrueClass, FalseClass
41
- value.to_s
42
- when String
43
- value.dump
18
+ time = event_data.time
19
+ if not time.nil?
20
+ timestamp = timestamp(time)
44
21
  end
22
+
23
+ json_text = JSON.generate([type, process_id, timestamp, data])
24
+ json_text << "\n"
25
+ json_text
45
26
  end
46
27
 
47
28
  def self.load(text)
48
- match_data = Pattern.match(text)
49
- if match_data.nil?
50
- raise Error, "Cannot deserialize #{text.inspect}"
51
- end
29
+ type, process_id, timestamp, data = JSON.parse(text)
52
30
 
53
- type = match_data['type'].to_sym
54
- process_id = load_value(match_data['process_id'])
55
- time = load_value(match_data['time_attribute'])
31
+ type = type.to_sym
32
+
33
+ if not timestamp.nil?
34
+ time = time(timestamp)
35
+ end
56
36
 
57
37
  event_data = EventData.new
58
38
  event_data.type = type
59
39
  event_data.process_id = process_id
60
40
  event_data.time = time
61
- event_data.data = []
62
-
63
- data_text = match_data['data']
64
-
65
- data_text.insert(0, "\t")
66
- data_text.scan(/\t([^\t]*)/) do |(value_text)|
67
- value = load_value(value_text)
68
- event_data.data << value
69
- end
41
+ event_data.data = data
70
42
 
71
43
  event_data
72
44
  end
73
45
 
74
- def self.load_value(value_text)
75
- match_data = Pattern.match_value(value_text)
76
-
77
- if match_data['integer']
78
- Integer(value_text)
79
- elsif match_data['time']
80
- year = match_data['year'].to_i
81
- month = match_data['month'].to_i
82
- day = match_data['day'].to_i
83
- hour = match_data['hour'].to_i
84
- minute = match_data['minute'].to_i
85
- second = match_data['second'].to_i
86
-
87
- nanosecond = match_data['nanosecond'].to_i
88
- usec = Rational(nanosecond, 1_000)
89
-
90
- Time.utc(year, month, day, hour, minute, second, usec)
91
- elsif match_data['nil']
92
- nil
93
- elsif match_data['true']
94
- true
95
- elsif match_data['false']
96
- false
97
- elsif match_data['string']
98
- value_text.undump
99
- end
46
+ def self.timestamp(time)
47
+ time.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
100
48
  end
101
49
 
102
- module Pattern
103
- def self.match(data)
104
- event_data.match(data)
105
- end
50
+ def self.time(timestamp)
51
+ match_data = time_pattern.match(timestamp)
106
52
 
107
- def self.match_value(value_text)
108
- value_pattern.match(value_text)
109
- end
53
+ year = match_data['year'].to_i
54
+ month = match_data['month'].to_i
55
+ day = match_data['day'].to_i
56
+ hour = match_data['hour'].to_i
57
+ minute = match_data['minute'].to_i
58
+ second = match_data['second'].to_i
110
59
 
111
- def self.event_data
112
- @event_data ||= %r{\A#{type}\t#{process_id}\t#{time_attribute}\t#{data}\r\n\z}
113
- end
60
+ nanosecond = match_data['nanosecond'].to_i
61
+ usec = Rational(nanosecond, 1_000)
114
62
 
115
- def self.type
116
- %r{(?<type>[A-Z][[:alnum:]]+)}
117
- end
118
-
119
- def self.process_id
120
- %r{(?<process_id>#{integer})}
121
- end
122
-
123
- def self.value_pattern
124
- @value_pattern ||= %r{\A#{value}\z}
125
- end
126
-
127
- def self.time_attribute
128
- %r{(?<time_attribute>#{time})}
129
- end
130
-
131
- def self.data
132
- %r{(?<data>#{value}(?:\t#{value})*)}
133
- end
134
-
135
- def self.value
136
- %r{#{integer}|#{time}|#{self.nil}|#{boolean}|#{string}}
137
- end
138
-
139
- def self.integer
140
- %r{(?<integer>[[:digit:]]+)}
141
- end
142
-
143
- def self.time
144
- year = %r{(?<year>[[:digit:]]{4})}
145
- month = %r{(?<month>[[:digit:]]{2})}
146
- day = %r{(?<day>[[:digit:]]{2})}
147
- hour = %r{(?<hour>[[:digit:]]{2})}
148
- minute = %r{(?<minute>[[:digit:]]{2})}
149
- second = %r{(?<second>[[:digit:]]{2})}
150
- nanosecond = %r{(?<nanosecond>[[:digit:]]{9})}
151
-
152
- %r{(?<time>#{year}-#{month}-#{day}T#{hour}:#{minute}:#{second}\.#{nanosecond}Z)}
153
- end
154
-
155
- def self.nil
156
- %r{(?<nil>(?=[\t\r\z])?)}
157
- end
158
-
159
- def self.boolean
160
- %r{(?<true>true)|(?<false>false)}
161
- end
63
+ Time.utc(year, month, day, hour, minute, second, usec)
64
+ end
162
65
 
163
- def self.string
164
- %r{(?<string>".*")}
165
- end
66
+ def self.time_pattern
67
+ @time_pattern ||=
68
+ begin
69
+ year = %r{(?<year>[[:digit:]]{4})}
70
+ month = %r{(?<month>[[:digit:]]{2})}
71
+ day = %r{(?<day>[[:digit:]]{2})}
72
+ hour = %r{(?<hour>[[:digit:]]{2})}
73
+ minute = %r{(?<minute>[[:digit:]]{2})}
74
+ second = %r{(?<second>[[:digit:]]{2})}
75
+ nanosecond = %r{(?<nanosecond>[[:digit:]]{9})}
76
+
77
+ %r{\A#{year}-#{month}-#{day}T#{hour}:#{minute}:#{second}\.#{nanosecond}Z\z}
78
+ end
166
79
  end
167
80
  end
168
81
  end
@@ -4,17 +4,23 @@ module TestBench
4
4
  class File
5
5
  include Sink
6
6
 
7
- attr_reader :io
7
+ attr_reader :file
8
8
 
9
- def initialize(io)
10
- @io = io
9
+ def initialize(file)
10
+ @file = file
11
11
  end
12
12
 
13
- def self.open(path, &block)
14
- ::File.open(path, 'w') do |io|
15
- instance = new(io)
13
+ def self.build(file_path)
14
+ file = ::File.open(file_path, 'w')
16
15
 
17
- block.(instance, io)
16
+ new(file)
17
+ end
18
+
19
+ def self.open(file_path, &block)
20
+ ::File.open(file_path, 'w') do |file|
21
+ instance = new(file)
22
+
23
+ block.(instance, file)
18
24
 
19
25
  return instance
20
26
  end
@@ -23,7 +29,7 @@ module TestBench
23
29
  def receive(event_data)
24
30
  text = event_data.dump
25
31
 
26
- io.write(text)
32
+ file.write(text)
27
33
  end
28
34
  end
29
35
  end
@@ -6,20 +6,6 @@ module TestBench
6
6
 
7
7
  include Telemetry::Sink
8
8
 
9
- def self.read(path)
10
- file_text = ::File.read(path)
11
-
12
- instance = new
13
-
14
- file_text.each_line do |event_data_text|
15
- event_data = Telemetry::EventData.load(event_data_text)
16
-
17
- instance.receive(event_data)
18
- end
19
-
20
- instance
21
- end
22
-
23
9
  def received_events
24
10
  @received_events ||= []
25
11
  end
@@ -25,7 +25,16 @@ module TestBench
25
25
  def any_event?(...) = sink.any_event?(...)
26
26
  alias :event? :any_event?
27
27
  def events(...) = sink.events(...)
28
- def recorded?(...) = sink.received?(...)
28
+
29
+ def recorded?(event_or_event_data)
30
+ case event_or_event_data
31
+ in Event => event
32
+ event_data = Event::Export.(event)
33
+ in EventData => event_data
34
+ end
35
+
36
+ sink.received?(event_data)
37
+ end
29
38
  end
30
39
  end
31
40
  end
@@ -34,9 +34,6 @@ module TestBench
34
34
  event_data = event
35
35
  end
36
36
 
37
- event_data.process_id ||= process_id
38
- event_data.time ||= current_time
39
-
40
37
  sinks.each do |sink|
41
38
  sink.receive(event_data)
42
39
  end
@@ -44,22 +41,6 @@ module TestBench
44
41
  event_data
45
42
  end
46
43
 
47
- def current_time
48
- self.class.current_time
49
- end
50
-
51
- def process_id
52
- self.class.process_id
53
- end
54
-
55
- def self.current_time
56
- ::Time.now
57
- end
58
-
59
- def self.process_id
60
- ::Process.pid
61
- end
62
-
63
44
  def register(sink)
64
45
  if registered?(sink)
65
46
  raise RegistrationError, "Already registered #{sink.inspect}"
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  require 'test_bench/random'
2
4
 
3
5
  require 'test_bench/telemetry/event_data'
@@ -9,7 +11,6 @@ require 'test_bench/telemetry/sink'
9
11
  require 'test_bench/telemetry/sink/file'
10
12
  require 'test_bench/telemetry/sink/handler/event_registry'
11
13
  require 'test_bench/telemetry/sink/handler'
12
- require 'test_bench/telemetry/sink/projection'
13
14
 
14
15
  require 'test_bench/telemetry/telemetry'
15
16
 
metadata CHANGED
@@ -1,14 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_bench-telemetry
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1.1
4
+ version: 3.0.0.0.pre.1
5
5
  platform: ruby
6
6
  authors:
7
- - Nathan Ladd
8
- autorequire:
7
+ - Brightworks Digital
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date:
12
10
  dependencies:
13
11
  - !ruby/object:Gem::Dependency
14
12
  name: test_bench-random
@@ -25,7 +23,7 @@ dependencies:
25
23
  - !ruby/object:Gem::Version
26
24
  version: '0'
27
25
  - !ruby/object:Gem::Dependency
28
- name: test_bench-isolated
26
+ name: test_bench-bootstrap
29
27
  requirement: !ruby/object:Gem::Requirement
30
28
  requirements:
31
29
  - - ">="
@@ -38,8 +36,8 @@ dependencies:
38
36
  - - ">="
39
37
  - !ruby/object:Gem::Version
40
38
  version: '0'
41
- description:
42
- email: nathanladd+github@gmail.com
39
+ description: Telemetry publication and subscription for TestBench.
40
+ email: development@bright.works
43
41
  executables: []
44
42
  extensions: []
45
43
  extra_rdoc_files: []
@@ -48,16 +46,13 @@ files:
48
46
  - lib/test_bench/telemetry
49
47
  - lib/test_bench/telemetry/controls
50
48
  - lib/test_bench/telemetry/controls/event
51
- - lib/test_bench/telemetry/controls/event/event_data.rb
52
49
  - lib/test_bench/telemetry/controls/event/metadata.rb
53
50
  - lib/test_bench/telemetry/controls/event.rb
54
51
  - lib/test_bench/telemetry/controls/event_data.rb
55
- - lib/test_bench/telemetry/controls/file.rb
56
52
  - lib/test_bench/telemetry/controls/handler.rb
53
+ - lib/test_bench/telemetry/controls/path
54
+ - lib/test_bench/telemetry/controls/path/file.rb
57
55
  - lib/test_bench/telemetry/controls/process_id.rb
58
- - lib/test_bench/telemetry/controls/projection
59
- - lib/test_bench/telemetry/controls/projection/receiver.rb
60
- - lib/test_bench/telemetry/controls/projection.rb
61
56
  - lib/test_bench/telemetry/controls/random.rb
62
57
  - lib/test_bench/telemetry/controls/sink.rb
63
58
  - lib/test_bench/telemetry/controls/time.rb
@@ -71,18 +66,20 @@ files:
71
66
  - lib/test_bench/telemetry/sink/handler
72
67
  - lib/test_bench/telemetry/sink/handler/event_registry.rb
73
68
  - lib/test_bench/telemetry/sink/handler.rb
74
- - lib/test_bench/telemetry/sink/projection.rb
75
69
  - lib/test_bench/telemetry/sink.rb
76
70
  - lib/test_bench/telemetry/substitute
77
71
  - lib/test_bench/telemetry/substitute/sink.rb
78
72
  - lib/test_bench/telemetry/substitute.rb
79
73
  - lib/test_bench/telemetry/telemetry.rb
80
74
  - lib/test_bench/telemetry.rb
81
- homepage: https://github.com/test-bench/test-bench-telemetry
75
+ homepage: http://test-bench.software
82
76
  licenses:
83
77
  - MIT
84
- metadata: {}
85
- post_install_message:
78
+ metadata:
79
+ homepage_uri: http://test-bench.software
80
+ source_code_uri: https://github.com/test-bench-demo/test-bench-telemetry
81
+ allowed_push_host: https://rubygems.org
82
+ namespace: TestBench::Telemetry
86
83
  rdoc_options: []
87
84
  require_paths:
88
85
  - lib
@@ -97,8 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
94
  - !ruby/object:Gem::Version
98
95
  version: '0'
99
96
  requirements: []
100
- rubygems_version: 3.4.10
101
- signing_key:
97
+ rubygems_version: 3.6.9
102
98
  specification_version: 4
103
- summary: Telemetry subsystem for TestBench
99
+ summary: Telemetry publication and subscription for TestBench
104
100
  test_files: []
@@ -1,15 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Controls
4
- module Event
5
- module EventData
6
- def event_data
7
- event = self.example
8
-
9
- Telemetry::Event::Export.(event)
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,84 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Controls
4
- module File
5
- def self.example(...)
6
- Temporary.example(...)
7
- end
8
-
9
- def self.random
10
- Random.example
11
- end
12
-
13
- module Random
14
- def self.example(...)
15
- Temporary::Random.example(...)
16
- end
17
- end
18
-
19
- module Name
20
- def self.example(basename: nil, extension: nil)
21
- basename ||= self.basename
22
- extension ||= self.extension
23
-
24
- "#{basename}#{extension}"
25
- end
26
-
27
- def self.random
28
- Random.example
29
- end
30
-
31
- def self.basename
32
- 'some-file'
33
- end
34
-
35
- def self.extension
36
- '.some-ext'
37
- end
38
-
39
- module Random
40
- def self.example(basename: nil, extension: nil)
41
- extension ||= self.extension
42
-
43
- basename = Basename.example(basename:)
44
-
45
- Name.example(basename:, extension:)
46
- end
47
-
48
- def self.extension
49
- suffix = Controls::Random.string[0..4]
50
-
51
- "#{Name.extension}-#{suffix}"
52
- end
53
-
54
- module Basename
55
- def self.example(basename: nil)
56
- basename ||= Name.basename
57
-
58
- suffix = Controls::Random.string
59
-
60
- "#{basename}-#{suffix}"
61
- end
62
- end
63
- end
64
- end
65
-
66
- module Temporary
67
- def self.example(...)
68
- filename = Name.example(...)
69
-
70
- ::File.join('tmp', filename)
71
- end
72
-
73
- module Random
74
- def self.example(...)
75
- filename = Name::Random.example(...)
76
-
77
- ::File.join('tmp', filename)
78
- end
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
@@ -1,31 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Controls
4
- module Projection
5
- module Receiver
6
- def self.example
7
- Example.new
8
- end
9
-
10
- class Example
11
- def events
12
- @events ||= []
13
- end
14
-
15
- def event(event)
16
- events << event
17
- end
18
-
19
- def event?(event=nil)
20
- if not event.nil?
21
- events.include?(event)
22
- else
23
- events.any?
24
- end
25
- end
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,84 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Controls
4
- module Projection
5
- def self.example(receiver=nil)
6
- receiver ||= Receiver.example
7
-
8
- Example.new(receiver)
9
- end
10
-
11
- class Example
12
- include Telemetry::Sink::Projection
13
-
14
- attr_accessor :applied_event_data
15
-
16
- receiver_name :some_receiver
17
-
18
- apply Event::SomeEvent do |some_event|
19
- receiver.event(some_event)
20
- end
21
-
22
- def apply_event_data(event_data)
23
- self.applied_event_data = event_data
24
- end
25
-
26
- def applied?(event=nil)
27
- receiver.event?(event)
28
- end
29
-
30
- def applied_event_data?(event_data)
31
- self.applied_event_data == event_data
32
- end
33
- end
34
-
35
- module NoApplyMethod
36
- def self.example(receiver=nil)
37
- receiver ||= Receiver.example
38
-
39
- Example.new(receiver)
40
- end
41
-
42
- class Example
43
- include Telemetry::Sink::Projection
44
- end
45
- end
46
-
47
- module NoArgument
48
- def self.example(receiver=nil)
49
- receiver ||= Receiver.example
50
-
51
- Example.new(receiver)
52
- end
53
-
54
- class Example
55
- include Telemetry::Sink::Projection
56
-
57
- attr_accessor :applied_event
58
- def applied? = !!applied_event
59
-
60
- apply Event::SomeEvent do
61
- self.applied_event = true
62
- end
63
- end
64
- end
65
-
66
- module ApplyMethod
67
- def self.example(event_type=nil)
68
- event_type ||= Event::SomeEvent.event_type
69
-
70
- event_name = TestBench::Telemetry::Event::EventName.get(event_type)
71
-
72
- :"apply_#{event_name}"
73
- end
74
-
75
- def self.other_example
76
- event_type = Event::SomeOtherEvent.event_type
77
-
78
- example(event_type)
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
@@ -1,132 +0,0 @@
1
- module TestBench
2
- class Telemetry
3
- module Sink
4
- module Projection
5
- def self.included(cls)
6
- cls.class_exec do
7
- include Sink
8
- include Receive
9
-
10
- extend ReceiverNameMacro
11
-
12
- extend ApplyMethod
13
- extend ApplyMacro
14
- end
15
- end
16
-
17
- attr_accessor :receiver
18
-
19
- def initialize(receiver)
20
- @receiver = receiver
21
- end
22
-
23
- module Receive
24
- def receive(event_data)
25
- apply(event_data)
26
- end
27
- end
28
-
29
- def apply(event_or_event_data)
30
- applies = apply?(event_or_event_data)
31
-
32
- if applies
33
- if event_or_event_data.is_a?(Event)
34
- event = event_or_event_data
35
- else
36
- event_data = event_or_event_data
37
- event_type = event_data.type
38
- event_class = self.class.event_registry.get(event_type)
39
-
40
- event = Event::Import.(event_data, event_class)
41
- end
42
-
43
- apply_method = apply_method(event)
44
-
45
- if method(apply_method).parameters.any?
46
- __send__(apply_method, event)
47
- else
48
- __send__(apply_method)
49
- end
50
-
51
- event
52
- elsif respond_to?(:apply_event_data)
53
- if event_or_event_data.is_a?(Event)
54
- event_data = Event::Export.(event_or_event_data)
55
- else
56
- event_data = event_or_event_data
57
- end
58
-
59
- apply_event_data(event_data)
60
-
61
- event_data
62
- else
63
- nil
64
- end
65
- end
66
- alias :call :apply
67
-
68
- def apply?(...)
69
- apply_method = apply_method(...)
70
-
71
- not apply_method.nil?
72
- end
73
-
74
- def apply_method(event_or_event_data)
75
- apply_method = self.class.apply_method(event_or_event_data)
76
-
77
- if respond_to?(apply_method)
78
- apply_method
79
- else
80
- nil
81
- end
82
- end
83
-
84
- module ReceiverNameMacro
85
- def receiver_name_macro(receiver_name)
86
- define_method(receiver_name) do
87
- receiver
88
- end
89
- end
90
- alias :receiver_name :receiver_name_macro
91
- end
92
-
93
- module ApplyMacro
94
- def apply_macro(event_class, &block)
95
- event_registry.register(event_class)
96
-
97
- event_type = event_class.event_type
98
-
99
- apply_method = ApplyMethod.get(event_type)
100
-
101
- define_method(apply_method, &block)
102
- end
103
- alias :apply :apply_macro
104
-
105
- def event_registry
106
- @event_registry ||= Handler::EventRegistry.new
107
- end
108
- end
109
-
110
- module ApplyMethod
111
- def apply_method(event_or_event_data)
112
- if event_or_event_data.is_a?(Event)
113
- event = event_or_event_data
114
- event_type = event.event_type
115
- else
116
- event_data = event_or_event_data
117
- event_type = event_data.type
118
- end
119
-
120
- ApplyMethod.get(event_type)
121
- end
122
-
123
- def self.get(event_type)
124
- event_name = Event::EventName.get(event_type)
125
-
126
- :"apply_#{event_name}"
127
- end
128
- end
129
- end
130
- end
131
- end
132
- end