evt-telemetry 0.3.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 64d528c1d0aee032b31ce70cb9c0654a15f91f4d
4
+ data.tar.gz: bfebf4dfd53ec60390037c0f895647d202d2398c
5
+ SHA512:
6
+ metadata.gz: a7ba7a9f45369b9576a7c745a0bd6f87e664811f682edb4ca5e162100e0f3004d1d97e29c44012ff3a58bf3717218f62bfa23295d6fdcc182c2a5cd9070ae97f
7
+ data.tar.gz: b1d6087697ff851ca9666fdea0021370c449a1e1568b91157cc23f1e657a8bfc7ed673e368db4bb6734f9ac781beada5e179bd72332fe1a87e74db68c473bf7b
data/lib/telemetry.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'clock'
2
+ require 'dependency'; Dependency.activate
3
+
4
+ require 'telemetry/sink'
5
+ require 'telemetry/telemetry'
@@ -0,0 +1,4 @@
1
+ require 'clock/controls'
2
+
3
+ require 'telemetry/controls/sink'
4
+ require 'telemetry/controls/time'
@@ -0,0 +1,53 @@
1
+ class Telemetry
2
+ module Controls
3
+ module Sink
4
+ class Example
5
+ include Telemetry::Sink
6
+
7
+ record_any
8
+ end
9
+
10
+ def self.example
11
+ Example.new
12
+ end
13
+
14
+ module RecordsOther
15
+ class Example
16
+ include Telemetry::Sink
17
+
18
+ record :something_else
19
+ end
20
+
21
+ def self.example
22
+ Example.new
23
+ end
24
+ end
25
+
26
+ module Macro
27
+ class Example
28
+ include Telemetry::Sink
29
+
30
+ record :something
31
+ end
32
+
33
+ def self.example
34
+ Example.new
35
+ end
36
+
37
+ module RecordAny
38
+ class Example
39
+ include Telemetry::Sink
40
+
41
+ record_any
42
+
43
+ record :something
44
+ end
45
+
46
+ def self.example
47
+ Example.new
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,5 @@
1
+ class Telemetry
2
+ module Controls
3
+ Time = Clock::Controls::Time
4
+ end
5
+ end
@@ -0,0 +1,94 @@
1
+ class Telemetry
2
+ module Sink
3
+ def record_any?
4
+ false
5
+ end
6
+
7
+ def self.included(cls)
8
+ cls.extend RecordMacro
9
+ cls.extend RecordAnyMacro
10
+ end
11
+
12
+ module RecordMacro
13
+ def record_macro(signal)
14
+ record_method_name = "record_#{signal}"
15
+ send(:define_method, record_method_name) do |time, data|
16
+ record signal, time, data
17
+ end
18
+
19
+ subset_method_name = "#{signal}_records"
20
+ send(:define_method, subset_method_name) do |&blk|
21
+ subset = records.select { |r| r.signal == signal }
22
+
23
+ unless blk.nil?
24
+ subset = subset.select &blk
25
+ end
26
+
27
+ subset
28
+ end
29
+
30
+ detect_method_name = "recorded_#{signal}?"
31
+ send(:define_method, detect_method_name) do |&blk|
32
+ subset = send(subset_method_name)
33
+
34
+ if blk.nil?
35
+ return !subset.empty?
36
+ else
37
+ return subset.any? &blk
38
+ end
39
+ end
40
+ end
41
+ alias :record :record_macro
42
+ end
43
+
44
+ module RecordAnyMacro
45
+ def record_any_macro
46
+ send(:define_method, :record_any?) do
47
+ true
48
+ end
49
+ end
50
+ alias :record_any :record_any_macro
51
+ end
52
+
53
+ Record = Struct.new :signal, :time, :data
54
+
55
+ def records
56
+ @records ||= []
57
+ end
58
+
59
+ def records?(signal)
60
+ respond_to? "record_#{signal}"
61
+ end
62
+
63
+ def record?(signal)
64
+ record = false
65
+ if record_any?
66
+ record = true
67
+ else
68
+ if records? signal
69
+ record = true
70
+ end
71
+ end
72
+ record
73
+ end
74
+
75
+ def recorded?(&blk)
76
+ if blk.nil?
77
+ return !records.empty?
78
+ else
79
+ return records.any? &blk
80
+ end
81
+ end
82
+
83
+ def record(signal, time, data=nil, force: nil)
84
+ force ||= false
85
+
86
+ record = nil
87
+ if force || record?(signal)
88
+ record = Record.new signal, time, data
89
+ records << record
90
+ end
91
+ record
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,29 @@
1
+ class Telemetry
2
+ dependency :clock
3
+
4
+ def self.build
5
+ new.tap do |instance|
6
+ Clock::UTC.configure instance
7
+ end
8
+ end
9
+
10
+ def self.configure(receiver)
11
+ instance = build
12
+ receiver.telemetry = instance
13
+ instance
14
+ end
15
+
16
+ def sinks
17
+ @sinks ||= []
18
+ end
19
+
20
+ def register(sink)
21
+ sinks << sink
22
+ end
23
+
24
+ def record(signal, data=nil)
25
+ sinks.each do |s|
26
+ s.record signal, clock.iso8601(precision: 5), data
27
+ end
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evt-telemetry
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - The Eventide Project
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: evt-dependency
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: evt-clock
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: ntl-test_bench
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: " "
56
+ email: opensource@eventide-project.org
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/telemetry.rb
62
+ - lib/telemetry/controls.rb
63
+ - lib/telemetry/controls/sink.rb
64
+ - lib/telemetry/controls/time.rb
65
+ - lib/telemetry/sink.rb
66
+ - lib/telemetry/telemetry.rb
67
+ homepage: https://github.com/eventide-project/telemetry
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 2.3.3
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.5.2
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: In-process telemetry based on observers
91
+ test_files: []