eventq 2.5.2 → 3.2.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 31eddc31f997ed63f4d4fa78994f72650530d3329094ed53a95fc624726a8233
4
- data.tar.gz: 67b7a029e4527f5266a6d4cd6d91b6ad8394d415254920e375aae3e2ea2b0114
3
+ metadata.gz: af4dcc4013d3c0d7014585d66a8a654eeedd5d922440129b6385bb6919ccd6db
4
+ data.tar.gz: 5d154230c47190662e5b3948ac2a3b14dc1816e214c66d7ca0d5bb8783d23d45
5
5
  SHA512:
6
- metadata.gz: 8e4179b1738e910c44a000089d207e9234d1350892b5612760f757dcb486e6163c50adf249cc4c1a02f312aa30ce98cc1fbc5b2b37c32fb4d068d8be8ed4d380
7
- data.tar.gz: 752895dbf0f9fc1defeee0f93725227d7d8a6cb2a8052643cd5c76b8259dc7c44c7699244a04c155d769c5c0f891530e25ec0fe46847ae096c826f72ddcca8a8
6
+ metadata.gz: 54dd8998c6e8486cf8a5bea1e226662a6e4fe969e223ef19f3ad74b57a11d81da02c1fa4e3a4b0000386c403db59fe500e212b3bdbb0bb6be109d925b2db7757
7
+ data.tar.gz: 002eb08667a497c17dda159799eafec2d45452757d95e635126014bdb45b5be28c29af70837541633e0100ccf871723de024d64fcb22d17ccce4cbbffe92734e
data/README.md CHANGED
@@ -1,6 +1,5 @@
1
1
  # EventQ
2
2
 
3
- [![Build Status](https://travis-ci.org/Sage/eventq.svg?branch=master)](https://travis-ci.org/Sage/eventq)
4
3
  [![Maintainability](https://api.codeclimate.com/v1/badges/87205b497059e2733bdc/maintainability)](https://codeclimate.com/github/Sage/eventq/maintainability)
5
4
  [![Test Coverage](https://api.codeclimate.com/v1/badges/87205b497059e2733bdc/test_coverage)](https://codeclimate.com/github/Sage/eventq/test_coverage)
6
5
 
@@ -15,25 +15,37 @@ module EventQ
15
15
  @serialization_manager = EventQ::SerializationProviders::Manager.new
16
16
  @signature_manager = EventQ::SignatureProviders::Manager.new
17
17
 
18
- # this array is used to record known event types
19
- @known_event_types = []
20
-
18
+ # this hash is used to record known event types:
19
+ # key = event_type / name
20
+ # value = topic arn
21
+ @known_event_types = {}
21
22
  end
22
23
 
24
+ # Returns true if the event has already been registerd, or false
25
+ # otherwise.
26
+ #
27
+ # @param [String] event_type
28
+ # @param [String] region
29
+ #
30
+ # @return [Boolean]
23
31
  def registered?(event_type, region = nil)
24
32
  topic_key = "#{region}:#{event_type}"
25
- @known_event_types.include?(topic_key)
33
+ @known_event_types.key?(topic_key)
26
34
  end
27
35
 
36
+ # Registers the event event_type and returns its topic arn.
37
+ #
38
+ # @param [String] event_type
39
+ # @param [String] region
40
+ #
41
+ # @return [String]
28
42
  def register_event(event_type, region = nil)
29
- if registered?(event_type, region)
30
- return true
31
- end
32
-
33
43
  topic_key = "#{region}:#{event_type}"
34
- @client.sns_helper(region).create_topic_arn(event_type, region)
35
- @known_event_types << topic_key
36
- true
44
+ return @known_event_types[topic_key] if registered?(event_type, region)
45
+
46
+ topic_arn = @client.sns_helper(region).create_topic_arn(event_type, region)
47
+ @known_event_types[topic_key] = topic_arn
48
+ topic_arn
37
49
  end
38
50
 
39
51
  def publish(topic:, event:, context: {}, region: nil)
@@ -88,6 +100,9 @@ module EventQ
88
100
  qm.type = event_type
89
101
  qm.context = context
90
102
  qm.content_type = event.class.to_s
103
+ if event.respond_to? :Correlation
104
+ qm.correlation_trace_id = event.Correlation['Trace']
105
+ end
91
106
 
92
107
  if EventQ::Configuration.signature_secret != nil
93
108
  provider = @signature_manager.get_provider(EventQ::Configuration.signature_provider)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'aws-sdk'
3
+ require 'aws-sdk-sns'
4
+ require 'aws-sdk-sqs'
4
5
 
5
6
  module EventQ
6
7
  module Amazon
@@ -32,6 +32,7 @@ module EventQ
32
32
  end
33
33
 
34
34
  # Check if a TopicArn exists. This will check with AWS if necessary and cache the results if one is found
35
+ #
35
36
  # @return TopicArn [String]
36
37
  def get_topic_arn(event_type, region = nil)
37
38
  _event_type = EventQ.create_event_type(event_type)
@@ -39,8 +40,7 @@ module EventQ
39
40
 
40
41
  arn = @@topic_arns[topic_key]
41
42
  unless arn
42
- response = sns.list_topics
43
- arn = response.topics.detect { |topic| topic.topic_arn.end_with?(":#{_event_type}") }&.topic_arn
43
+ arn = find_topic(_event_type)
44
44
 
45
45
  @@topic_arns[topic_key] = arn if arn
46
46
  end
@@ -62,6 +62,32 @@ module EventQ
62
62
  def aws_safe_name(name)
63
63
  return name[0..79].gsub(/[^a-zA-Z\d_\-]/,'')
64
64
  end
65
+
66
+ private
67
+
68
+ # Finds the given topic, or returns nil if the topic could not be found
69
+ #
70
+ # @note Responses to list_topics can be paged, so to check *all* topics
71
+ # we'll need to request each page of topics using response.next_token for
72
+ # until the response no longer contains a next_token. Requests to
73
+ # list_topics are throttled to 30 TPS, so in the future we may need to
74
+ # handle this if it becomes a problem.
75
+ #
76
+ # @param topic_name [String] the name of the topic to find
77
+ # @return [String]
78
+ def find_topic(topic_name)
79
+ response = sns.list_topics
80
+ topics = response.topics
81
+ arn = topics.detect { |topic| topic.topic_arn.end_with?(":#{topic_name}") }&.topic_arn
82
+
83
+ while arn.nil? && response.next_token
84
+ response = sns.list_topics(next_token: response.next_token)
85
+ topics = response.topics
86
+ arn = topics.detect { |topic| topic.topic_arn.end_with?(":#{topic_name}") }&.topic_arn
87
+ end
88
+
89
+ arn
90
+ end
65
91
  end
66
92
  end
67
93
  end
@@ -10,6 +10,7 @@ module EventQ
10
10
  attr_accessor_type :created, type: Float
11
11
  attr_accessor_type :signature, type: String
12
12
  attr_accessor_type :context, type: Hash
13
+ attr_accessor_type :correlation_trace_id, type: String
13
14
 
14
15
  def initialize
15
16
  @retry_attempts = 0
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eventq
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.2
4
+ version: 3.2.0.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - SageOne
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-21 00:00:00.000000000 Z
11
+ date: 2021-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,34 @@ dependencies:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
40
  version: '1.11'
41
+ - !ruby/object:Gem::Dependency
42
+ name: byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '11.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '11.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.9'
27
69
  - !ruby/object:Gem::Dependency
28
70
  name: rake
29
71
  requirement: !ruby/object:Gem::Requirement
@@ -53,7 +95,7 @@ dependencies:
53
95
  - !ruby/object:Gem::Version
54
96
  version: '0'
55
97
  - !ruby/object:Gem::Dependency
56
- name: simplecov
98
+ name: shoulda-matchers
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - ">="
@@ -67,49 +109,49 @@ dependencies:
67
109
  - !ruby/object:Gem::Version
68
110
  version: '0'
69
111
  - !ruby/object:Gem::Dependency
70
- name: shoulda-matchers
112
+ name: simplecov
71
113
  requirement: !ruby/object:Gem::Requirement
72
114
  requirements:
73
- - - ">="
115
+ - - "<"
74
116
  - !ruby/object:Gem::Version
75
- version: '0'
117
+ version: 0.18.0
76
118
  type: :development
77
119
  prerelease: false
78
120
  version_requirements: !ruby/object:Gem::Requirement
79
121
  requirements:
80
- - - ">="
122
+ - - "<"
81
123
  - !ruby/object:Gem::Version
82
- version: '0'
124
+ version: 0.18.0
83
125
  - !ruby/object:Gem::Dependency
84
- name: activesupport
126
+ name: aws-sdk-sqs
85
127
  requirement: !ruby/object:Gem::Requirement
86
128
  requirements:
87
129
  - - "~>"
88
130
  - !ruby/object:Gem::Version
89
- version: '4'
90
- type: :development
131
+ version: '1'
132
+ type: :runtime
91
133
  prerelease: false
92
134
  version_requirements: !ruby/object:Gem::Requirement
93
135
  requirements:
94
136
  - - "~>"
95
137
  - !ruby/object:Gem::Version
96
- version: '4'
138
+ version: '1'
97
139
  - !ruby/object:Gem::Dependency
98
- name: aws-sdk
140
+ name: aws-sdk-sns
99
141
  requirement: !ruby/object:Gem::Requirement
100
142
  requirements:
101
143
  - - "~>"
102
144
  - !ruby/object:Gem::Version
103
- version: '2.0'
145
+ version: '1'
104
146
  type: :runtime
105
147
  prerelease: false
106
148
  version_requirements: !ruby/object:Gem::Requirement
107
149
  requirements:
108
150
  - - "~>"
109
151
  - !ruby/object:Gem::Version
110
- version: '2.0'
152
+ version: '1'
111
153
  - !ruby/object:Gem::Dependency
112
- name: class_kit
154
+ name: bunny
113
155
  requirement: !ruby/object:Gem::Requirement
114
156
  requirements:
115
157
  - - ">="
@@ -123,7 +165,7 @@ dependencies:
123
165
  - !ruby/object:Gem::Version
124
166
  version: '0'
125
167
  - !ruby/object:Gem::Dependency
126
- name: redlock
168
+ name: class_kit
127
169
  requirement: !ruby/object:Gem::Requirement
128
170
  requirements:
129
171
  - - ">="
@@ -137,7 +179,7 @@ dependencies:
137
179
  - !ruby/object:Gem::Version
138
180
  version: '0'
139
181
  - !ruby/object:Gem::Dependency
140
- name: openssl
182
+ name: concurrent-ruby
141
183
  requirement: !ruby/object:Gem::Requirement
142
184
  requirements:
143
185
  - - ">="
@@ -151,7 +193,7 @@ dependencies:
151
193
  - !ruby/object:Gem::Version
152
194
  version: '0'
153
195
  - !ruby/object:Gem::Dependency
154
- name: concurrent-ruby
196
+ name: oj
155
197
  requirement: !ruby/object:Gem::Requirement
156
198
  requirements:
157
199
  - - ">="
@@ -165,7 +207,7 @@ dependencies:
165
207
  - !ruby/object:Gem::Version
166
208
  version: '0'
167
209
  - !ruby/object:Gem::Dependency
168
- name: oj
210
+ name: openssl
169
211
  requirement: !ruby/object:Gem::Requirement
170
212
  requirements:
171
213
  - - ">="
@@ -179,7 +221,7 @@ dependencies:
179
221
  - !ruby/object:Gem::Version
180
222
  version: '0'
181
223
  - !ruby/object:Gem::Dependency
182
- name: bunny
224
+ name: redlock
183
225
  requirement: !ruby/object:Gem::Requirement
184
226
  requirements:
185
227
  - - ">="
@@ -264,12 +306,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
264
306
  version: '0'
265
307
  required_rubygems_version: !ruby/object:Gem::Requirement
266
308
  requirements:
267
- - - ">="
309
+ - - ">"
268
310
  - !ruby/object:Gem::Version
269
- version: '0'
311
+ version: 1.3.1
270
312
  requirements: []
271
- rubyforge_project:
272
- rubygems_version: 2.7.7
313
+ rubygems_version: 3.1.2
273
314
  signing_key:
274
315
  specification_version: 4
275
316
  summary: EventQ is a pub/sub system that uses async notifications and message queues