phobos 1.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.
@@ -0,0 +1,3 @@
1
+ module Phobos
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,59 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'phobos/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'phobos'
8
+ spec.version = Phobos::VERSION
9
+ spec.authors = [
10
+ 'Túlio Ornelas',
11
+ 'Mathias Klippinge',
12
+ 'Sergey Evstifeev',
13
+ 'Thiago R. Colucci',
14
+ 'Martin Svalin',
15
+ 'Francisco Juan'
16
+ ]
17
+ spec.email = [
18
+ 'ornelas.tulio@gmail.com',
19
+ 'mathias.klippinge@gmail.com',
20
+ 'sergey.evstifeev@gmail.com',
21
+ 'ticolucci@gmail.com',
22
+ 'martin@lite.nu',
23
+ 'francisco.juan@gmail.com'
24
+ ]
25
+
26
+ spec.summary = %q{Simplifying Kafka for ruby apps}
27
+ spec.description = %q{Phobos is a microframework and library for kafka based applications, it wraps commons behaviors needed by consumers/producers in an easy an convenient API. It uses ruby-kafka as it's kafka client and core component.}
28
+ spec.homepage = 'https://github.com/klarna/phobos'
29
+ spec.license = 'Apache License Version 2.0'
30
+
31
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
32
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
33
+ if spec.respond_to?(:metadata)
34
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
35
+ else
36
+ raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
37
+ end
38
+
39
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
40
+ spec.bindir = 'bin'
41
+ spec.executables = spec.files.grep(%r{^bin/phobos}) { |f| File.basename(f) }
42
+ spec.require_paths = ['lib']
43
+ spec.required_ruby_version = '>= 2.3'
44
+
45
+ spec.add_development_dependency 'bundler', '~> 1.12'
46
+ spec.add_development_dependency 'rake', '~> 10.0'
47
+ spec.add_development_dependency 'rspec', '~> 3.0'
48
+ spec.add_development_dependency 'pry-byebug', '~> 3.4.0'
49
+ spec.add_development_dependency 'rspec_junit_formatter', '0.2.2'
50
+
51
+ spec.add_dependency 'ruby-kafka', '>= 0.3.13.beta4'
52
+ spec.add_dependency 'concurrent-ruby', '>= 1.0.2'
53
+ spec.add_dependency 'concurrent-ruby-ext', '>= 1.0.2'
54
+ spec.add_dependency 'activesupport', '>= 4.0.0'
55
+ spec.add_dependency 'hashie'
56
+ spec.add_dependency 'logging'
57
+ spec.add_dependency 'exponential-backoff'
58
+ spec.add_dependency 'thor'
59
+ end
@@ -0,0 +1,17 @@
1
+ #!/bin/bash
2
+ set -eu
3
+
4
+ UTILS_DIR=$(dirname $0)
5
+ source ${UTILS_DIR}/env.sh
6
+
7
+ ZK_IP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' zookeeper)
8
+ TOPIC=${TOPIC:='test'}
9
+ PARTITIONS=${PARTITIONS:=2}
10
+
11
+ echo "creating topic ${TOPIC}, partitions ${PARTITIONS}"
12
+ docker run --rm $KAFKA_IMAGE:$KAFKA_IMAGE_VERSION kafka-topics.sh \
13
+ --create \
14
+ --topic $TOPIC \
15
+ --replication-factor 1 \
16
+ --partitions $PARTITIONS \
17
+ --zookeeper $ZK_IP:2181
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+ set -eu
3
+
4
+ DOCKER_HOSTNAME='localhost'
5
+ FORCE_PULL=${FORCE_PULL:='false'}
6
+ APPS=(zk kafka)
7
+
8
+ ZK_IMAGE=jplock/zookeeper
9
+ ZK_IMAGE_VERSION=3.4.6
10
+ KAFKA_IMAGE=ches/kafka
11
+ KAFKA_IMAGE_VERSION=0.9.0.1
@@ -0,0 +1,43 @@
1
+ #!/bin/bash
2
+ set -eu
3
+
4
+ source $(dirname $0)/env.sh
5
+
6
+ start() {
7
+ [ $FORCE_PULL = 'true' ] && docker pull $KAFKA_IMAGE:$KAFKA_IMAGE_VERSION
8
+ ZK_IP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' zookeeper)
9
+
10
+ docker run \
11
+ -d \
12
+ -p 9092:9092 \
13
+ --name kafka \
14
+ -e KAFKA_BROKER_ID=0 \
15
+ -e KAFKA_ADVERTISED_HOST_NAME=localhost \
16
+ -e KAFKA_ADVERTISED_PORT=9092 \
17
+ -e ZOOKEEPER_CONNECTION_STRING=zookeeper:2181 \
18
+ --link zookeeper:zookeeper \
19
+ $KAFKA_IMAGE:$KAFKA_IMAGE_VERSION
20
+
21
+ # The following statement waits until kafka is up and running
22
+ docker exec kafka bash -c "JMX_PORT=9998 ./bin/kafka-topics.sh --zookeeper $ZK_IP:2181 --list 2> /dev/null"
23
+ [ $? != '0' ] && echo "[kafka] failed to start"
24
+ }
25
+
26
+ stop() {
27
+ docker stop kafka > /dev/null 2>&1 || true
28
+ docker rm kafka > /dev/null 2>&1 || true
29
+ }
30
+
31
+ case "$1" in
32
+ start)
33
+ echo "[kafka] starting $KAFKA_IMAGE:$KAFKA_IMAGE_VERSION"
34
+ stop
35
+ start
36
+ echo "[kafka] started"
37
+ ;;
38
+ stop)
39
+ printf "[kafka] stopping... "
40
+ stop
41
+ echo "Done"
42
+ ;;
43
+ esac
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+ set -eu
3
+
4
+ UTILS_DIR=$(dirname $0)
5
+ source ${UTILS_DIR}/env.sh
6
+
7
+ for (( i=0 ; i<${#APPS[@]} ; i++ )) ; do
8
+ ${UTILS_DIR}/${APPS[i]}.sh start
9
+ done
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+ set -eu
3
+
4
+ UTILS_DIR=$(dirname $0)
5
+ source ${UTILS_DIR}/env.sh
6
+
7
+ for (( i=${#APPS[@]}-1 ; i>=0 ; i-- )) ; do
8
+ ${UTILS_DIR}/${APPS[i]}.sh stop
9
+ done
@@ -0,0 +1,36 @@
1
+ #!/bin/bash
2
+ set -eu
3
+
4
+ UTILS_DIR=$(dirname $0)
5
+ source ${UTILS_DIR}/env.sh
6
+
7
+ start() {
8
+ [ $FORCE_PULL = 'true' ] && docker pull $ZK_IMAGE:$ZK_IMAGE_VERSION
9
+
10
+ docker run \
11
+ -d \
12
+ -p 2181:2181 \
13
+ --name zookeeper \
14
+ $ZK_IMAGE:$ZK_IMAGE_VERSION
15
+
16
+ sleep 3
17
+ }
18
+
19
+ stop() {
20
+ docker stop zookeeper > /dev/null 2>&1 || true
21
+ docker rm zookeeper > /dev/null 2>&1 || true
22
+ }
23
+
24
+ case "$1" in
25
+ start)
26
+ echo "[zookeeper] starting $ZK_IMAGE:$ZK_IMAGE_VERSION"
27
+ stop
28
+ start
29
+ echo "[zookeeper] started"
30
+ ;;
31
+ stop)
32
+ printf "[zookeeper] stopping... "
33
+ stop
34
+ echo "Done"
35
+ ;;
36
+ esac
metadata ADDED
@@ -0,0 +1,275 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: phobos
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Túlio Ornelas
8
+ - Mathias Klippinge
9
+ - Sergey Evstifeev
10
+ - Thiago R. Colucci
11
+ - Martin Svalin
12
+ - Francisco Juan
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+ date: 2016-08-18 00:00:00.000000000 Z
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
19
+ name: bundler
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - "~>"
23
+ - !ruby/object:Gem::Version
24
+ version: '1.12'
25
+ type: :development
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - "~>"
30
+ - !ruby/object:Gem::Version
31
+ version: '1.12'
32
+ - !ruby/object:Gem::Dependency
33
+ name: rake
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - "~>"
37
+ - !ruby/object:Gem::Version
38
+ version: '10.0'
39
+ type: :development
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "~>"
44
+ - !ruby/object:Gem::Version
45
+ version: '10.0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '3.0'
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '3.0'
60
+ - !ruby/object:Gem::Dependency
61
+ name: pry-byebug
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: 3.4.0
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: 3.4.0
74
+ - !ruby/object:Gem::Dependency
75
+ name: rspec_junit_formatter
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '='
79
+ - !ruby/object:Gem::Version
80
+ version: 0.2.2
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - '='
86
+ - !ruby/object:Gem::Version
87
+ version: 0.2.2
88
+ - !ruby/object:Gem::Dependency
89
+ name: ruby-kafka
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 0.3.13.beta4
95
+ type: :runtime
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: 0.3.13.beta4
102
+ - !ruby/object:Gem::Dependency
103
+ name: concurrent-ruby
104
+ requirement: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 1.0.2
109
+ type: :runtime
110
+ prerelease: false
111
+ version_requirements: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: 1.0.2
116
+ - !ruby/object:Gem::Dependency
117
+ name: concurrent-ruby-ext
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 1.0.2
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 1.0.2
130
+ - !ruby/object:Gem::Dependency
131
+ name: activesupport
132
+ requirement: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 4.0.0
137
+ type: :runtime
138
+ prerelease: false
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: 4.0.0
144
+ - !ruby/object:Gem::Dependency
145
+ name: hashie
146
+ requirement: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ type: :runtime
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: logging
160
+ requirement: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ type: :runtime
166
+ prerelease: false
167
+ version_requirements: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ - !ruby/object:Gem::Dependency
173
+ name: exponential-backoff
174
+ requirement: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ type: :runtime
180
+ prerelease: false
181
+ version_requirements: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ - !ruby/object:Gem::Dependency
187
+ name: thor
188
+ requirement: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ type: :runtime
194
+ prerelease: false
195
+ version_requirements: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ description: Phobos is a microframework and library for kafka based applications,
201
+ it wraps commons behaviors needed by consumers/producers in an easy an convenient
202
+ API. It uses ruby-kafka as it's kafka client and core component.
203
+ email:
204
+ - ornelas.tulio@gmail.com
205
+ - mathias.klippinge@gmail.com
206
+ - sergey.evstifeev@gmail.com
207
+ - ticolucci@gmail.com
208
+ - martin@lite.nu
209
+ - francisco.juan@gmail.com
210
+ executables:
211
+ - phobos
212
+ extensions: []
213
+ extra_rdoc_files: []
214
+ files:
215
+ - ".gitignore"
216
+ - ".rspec"
217
+ - ".ruby-version"
218
+ - Dockerfile
219
+ - Gemfile
220
+ - LICENSE.txt
221
+ - README.md
222
+ - Rakefile
223
+ - bin/console
224
+ - bin/phobos
225
+ - bin/setup
226
+ - circle.yml
227
+ - config/phobos.yml.example
228
+ - examples/handler_saving_events_database.rb
229
+ - examples/handler_using_async_producer.rb
230
+ - examples/publishing_messages_without_consumer.rb.rb
231
+ - lib/phobos.rb
232
+ - lib/phobos/cli.rb
233
+ - lib/phobos/cli/runner.rb
234
+ - lib/phobos/cli/start.rb
235
+ - lib/phobos/echo_handler.rb
236
+ - lib/phobos/errors.rb
237
+ - lib/phobos/executor.rb
238
+ - lib/phobos/handler.rb
239
+ - lib/phobos/instrumentation.rb
240
+ - lib/phobos/listener.rb
241
+ - lib/phobos/producer.rb
242
+ - lib/phobos/version.rb
243
+ - phobos.gemspec
244
+ - utils/create-topic.sh
245
+ - utils/env.sh
246
+ - utils/kafka.sh
247
+ - utils/start-all.sh
248
+ - utils/stop-all.sh
249
+ - utils/zk.sh
250
+ homepage: https://github.com/klarna/phobos
251
+ licenses:
252
+ - Apache License Version 2.0
253
+ metadata:
254
+ allowed_push_host: https://rubygems.org
255
+ post_install_message:
256
+ rdoc_options: []
257
+ require_paths:
258
+ - lib
259
+ required_ruby_version: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ version: '2.3'
264
+ required_rubygems_version: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - ">="
267
+ - !ruby/object:Gem::Version
268
+ version: '0'
269
+ requirements: []
270
+ rubyforge_project:
271
+ rubygems_version: 2.5.1
272
+ signing_key:
273
+ specification_version: 4
274
+ summary: Simplifying Kafka for ruby apps
275
+ test_files: []