evt-consumer 0.0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1d47d76ca72a1690d983e55f05254d16a7020586
4
+ data.tar.gz: 30e729d41f0db67cc91f1703cfa6e18e3c82988d
5
+ SHA512:
6
+ metadata.gz: c82b2f96df0c299d64e05c264d4a1193fa91768da0b79bdee5ff7fb852bbd0b5e1ed526b5a2c436bb3844b0ddb2a2276a8a36b5a34061d6d45aeec1f8eef3c5b
7
+ data.tar.gz: 1e6372fb092c037a2581e4890614a8858f3b71ffddf6a555cb71c6870539e67787b650006baca0d2661fec04bd67a93396bbeee1f00a864f04013749ede15a5f
data/lib/consumer.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'actor'
2
+
3
+ require 'configure'; Configure.activate
4
+ require 'messaging'
5
+ require 'log'
6
+
7
+ require 'consumer/log'
8
+
9
+ require 'consumer/consumer'
10
+ require 'consumer/position_store'
11
+ require 'consumer/position_store/telemetry'
@@ -0,0 +1,18 @@
1
+ module Consumer
2
+ def self.included(cls)
3
+ cls.class_exec do
4
+ extend StreamMacro
5
+ end
6
+ end
7
+
8
+ module StreamMacro
9
+ def stream_macro(stream_name)
10
+ stream = EventSource::Stream.new stream_name
11
+
12
+ define_method :stream do
13
+ stream
14
+ end
15
+ end
16
+ alias_method :stream, :stream_macro
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ require 'messaging/controls'
2
+
3
+ require 'consumer/controls/category'
4
+ require 'consumer/controls/event_data'
5
+ require 'consumer/controls/id'
6
+ require 'consumer/controls/position'
7
+ require 'consumer/controls/stream'
8
+ require 'consumer/controls/stream_name'
9
+
10
+ require 'consumer/controls/position_store'
11
+
12
+ require 'consumer/controls/consumer'
@@ -0,0 +1,5 @@
1
+ module Consumer
2
+ module Controls
3
+ Category = EventSource::Controls::Category
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Consumer
2
+ module Controls
3
+ module Consumer
4
+ def self.example
5
+ Example.new
6
+ end
7
+
8
+ class Example
9
+ include ::Consumer
10
+
11
+ stream StreamName.example
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module Consumer
2
+ module Controls
3
+ module EventData
4
+ def self.example(stream_name: nil, position: nil, global_position: nil)
5
+ event_data = EventSource::Controls::EventData::Read.example
6
+ event_data.stream_name = stream_name unless stream_name.nil?
7
+ event_data.position = position unless position.nil?
8
+ event_data.global_position unless global_position.nil?
9
+ event_data
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module Consumer
2
+ module Controls
3
+ ID = Messaging::Controls::ID
4
+ end
5
+ end
@@ -0,0 +1,17 @@
1
+ module Consumer
2
+ module Controls
3
+ module Position
4
+ module Stream
5
+ def self.example
6
+ EventSource::Controls::EventData.position
7
+ end
8
+ end
9
+
10
+ module Global
11
+ def self.example
12
+ EventSource::Controls::EventData::Read.global_position
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,30 @@
1
+ module Consumer
2
+ module Controls
3
+ module PositionStore
4
+ def self.example
5
+ stream_name = StreamName.example
6
+
7
+ Example.build stream_name
8
+ end
9
+
10
+ class Example
11
+ include ::Consumer::PositionStore
12
+
13
+ attr_accessor :telemetry_sink
14
+
15
+ def configure
16
+ self.telemetry_sink = ::Consumer::PositionStore::Telemetry::Sink.new
17
+
18
+ telemetry.register telemetry_sink
19
+ end
20
+
21
+ def get
22
+ Position::Global.example
23
+ end
24
+
25
+ def put(_)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,5 @@
1
+ module Consumer
2
+ module Controls
3
+ Stream = Messaging::Controls::Stream
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Consumer
2
+ module Controls
3
+ StreamName = Messaging::Controls::StreamName
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ module Consumer
2
+ class Log < ::Log
3
+ include Log::Dependency
4
+
5
+ def tag!(tags)
6
+ tags << :consumer
7
+ tags << :library
8
+ tags << :verbose
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,69 @@
1
+ module Consumer
2
+ module PositionStore
3
+ def self.included(cls)
4
+ cls.class_exec do
5
+ include Log::Dependency
6
+
7
+ extend Build
8
+
9
+ prepend Get
10
+ prepend Put
11
+
12
+ configure :position_store
13
+
14
+ initializer :stream
15
+
16
+ dependency :telemetry, ::Telemetry
17
+ end
18
+ end
19
+
20
+ Virtual::Method.define self, :configure
21
+
22
+ module Get
23
+ def self.prepended(cls)
24
+ Virtual::PureMethod.define cls, :get
25
+ end
26
+
27
+ def get
28
+ logger.trace { "Get position (Stream: #{stream.name})" }
29
+
30
+ position = super
31
+
32
+ logger.debug { "Get position done (Stream: #{stream.name}, Position: #{position})" }
33
+
34
+ telemetry.record :get, Telemetry::Get.new(position, stream)
35
+
36
+ position
37
+ end
38
+ end
39
+
40
+ module Put
41
+ def self.prepended(cls)
42
+ Virtual::Method.define cls, :put
43
+ end
44
+
45
+ def put(position)
46
+ logger.trace { "Put position (Stream: #{stream.name}, Position: #{position})" }
47
+
48
+ super
49
+
50
+ logger.debug { "Put position done (Stream: #{stream.name}, Position: #{position})" }
51
+
52
+ telemetry.record :put, Telemetry::Put.new(position, stream)
53
+
54
+ nil
55
+ end
56
+ end
57
+
58
+ module Build
59
+ def build(stream)
60
+ stream = EventSource::Stream.canonize stream
61
+
62
+ instance = new stream
63
+ ::Telemetry.configure instance
64
+ instance.configure
65
+ instance
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,15 @@
1
+ module Consumer
2
+ module PositionStore
3
+ module Telemetry
4
+ class Sink
5
+ include ::Telemetry::Sink
6
+
7
+ record :get
8
+ record :put
9
+ end
10
+
11
+ Get = Struct.new :position, :stream
12
+ Put = Struct.new :position, :stream
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evt-consumer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - The Eventide Project
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ntl-actor
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-configure
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: evt-messaging
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: test_bench
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: " "
70
+ email: opensource@eventide-project.org
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - lib/consumer.rb
76
+ - lib/consumer/consumer.rb
77
+ - lib/consumer/controls.rb
78
+ - lib/consumer/controls/category.rb
79
+ - lib/consumer/controls/consumer.rb
80
+ - lib/consumer/controls/event_data.rb
81
+ - lib/consumer/controls/id.rb
82
+ - lib/consumer/controls/position.rb
83
+ - lib/consumer/controls/position_store.rb
84
+ - lib/consumer/controls/stream.rb
85
+ - lib/consumer/controls/stream_name.rb
86
+ - lib/consumer/log.rb
87
+ - lib/consumer/position_store.rb
88
+ - lib/consumer/position_store/telemetry.rb
89
+ homepage: https://github.com/eventide-project/consumer
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: 2.3.3
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.6.8
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: Consumer library that maintains a long running subscription to an event stream
113
+ test_files: []