karafka 1.1.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.
Files changed (80) hide show
  1. checksums.yaml +7 -0
  2. data/.console_irbrc +13 -0
  3. data/.github/ISSUE_TEMPLATE.md +2 -0
  4. data/.gitignore +68 -0
  5. data/.rspec +1 -0
  6. data/.ruby-gemset +1 -0
  7. data/.ruby-version +1 -0
  8. data/.travis.yml +17 -0
  9. data/CHANGELOG.md +371 -0
  10. data/CODE_OF_CONDUCT.md +46 -0
  11. data/CONTRIBUTING.md +42 -0
  12. data/Gemfile +12 -0
  13. data/Gemfile.lock +111 -0
  14. data/MIT-LICENCE +18 -0
  15. data/README.md +95 -0
  16. data/bin/karafka +19 -0
  17. data/config/errors.yml +6 -0
  18. data/karafka.gemspec +35 -0
  19. data/lib/karafka.rb +68 -0
  20. data/lib/karafka/app.rb +52 -0
  21. data/lib/karafka/attributes_map.rb +67 -0
  22. data/lib/karafka/backends/inline.rb +17 -0
  23. data/lib/karafka/base_controller.rb +60 -0
  24. data/lib/karafka/base_responder.rb +185 -0
  25. data/lib/karafka/cli.rb +54 -0
  26. data/lib/karafka/cli/base.rb +78 -0
  27. data/lib/karafka/cli/console.rb +29 -0
  28. data/lib/karafka/cli/flow.rb +46 -0
  29. data/lib/karafka/cli/info.rb +29 -0
  30. data/lib/karafka/cli/install.rb +43 -0
  31. data/lib/karafka/cli/server.rb +67 -0
  32. data/lib/karafka/connection/config_adapter.rb +112 -0
  33. data/lib/karafka/connection/consumer.rb +121 -0
  34. data/lib/karafka/connection/listener.rb +51 -0
  35. data/lib/karafka/connection/processor.rb +61 -0
  36. data/lib/karafka/controllers/callbacks.rb +54 -0
  37. data/lib/karafka/controllers/includer.rb +51 -0
  38. data/lib/karafka/controllers/responders.rb +19 -0
  39. data/lib/karafka/controllers/single_params.rb +15 -0
  40. data/lib/karafka/errors.rb +43 -0
  41. data/lib/karafka/fetcher.rb +48 -0
  42. data/lib/karafka/helpers/class_matcher.rb +78 -0
  43. data/lib/karafka/helpers/config_retriever.rb +46 -0
  44. data/lib/karafka/helpers/multi_delegator.rb +33 -0
  45. data/lib/karafka/loader.rb +29 -0
  46. data/lib/karafka/logger.rb +53 -0
  47. data/lib/karafka/monitor.rb +98 -0
  48. data/lib/karafka/params/params.rb +128 -0
  49. data/lib/karafka/params/params_batch.rb +41 -0
  50. data/lib/karafka/parsers/json.rb +38 -0
  51. data/lib/karafka/patches/dry_configurable.rb +31 -0
  52. data/lib/karafka/patches/ruby_kafka.rb +34 -0
  53. data/lib/karafka/persistence/consumer.rb +25 -0
  54. data/lib/karafka/persistence/controller.rb +38 -0
  55. data/lib/karafka/process.rb +63 -0
  56. data/lib/karafka/responders/builder.rb +35 -0
  57. data/lib/karafka/responders/topic.rb +57 -0
  58. data/lib/karafka/routing/builder.rb +61 -0
  59. data/lib/karafka/routing/consumer_group.rb +61 -0
  60. data/lib/karafka/routing/consumer_mapper.rb +33 -0
  61. data/lib/karafka/routing/proxy.rb +37 -0
  62. data/lib/karafka/routing/router.rb +29 -0
  63. data/lib/karafka/routing/topic.rb +66 -0
  64. data/lib/karafka/routing/topic_mapper.rb +55 -0
  65. data/lib/karafka/schemas/config.rb +21 -0
  66. data/lib/karafka/schemas/consumer_group.rb +65 -0
  67. data/lib/karafka/schemas/consumer_group_topic.rb +18 -0
  68. data/lib/karafka/schemas/responder_usage.rb +39 -0
  69. data/lib/karafka/schemas/server_cli_options.rb +43 -0
  70. data/lib/karafka/server.rb +62 -0
  71. data/lib/karafka/setup/config.rb +163 -0
  72. data/lib/karafka/setup/configurators/base.rb +35 -0
  73. data/lib/karafka/setup/configurators/water_drop.rb +29 -0
  74. data/lib/karafka/status.rb +25 -0
  75. data/lib/karafka/templates/application_controller.rb.example +7 -0
  76. data/lib/karafka/templates/application_responder.rb.example +11 -0
  77. data/lib/karafka/templates/karafka.rb.example +41 -0
  78. data/lib/karafka/version.rb +7 -0
  79. data/log/.gitkeep +0 -0
  80. metadata +267 -0
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Karafka
4
+ module Setup
5
+ # Configurators module is used to enclose all the external dependencies configurations
6
+ class Configurators
7
+ # Karafka has come components that it relies on (like Sidekiq)
8
+ # We need to configure all of them only when the framework was set up.
9
+ # Any class that descends from this one will be automatically invoked upon setup (after it)
10
+ # @example Configure an Example class
11
+ # class ExampleConfigurator < Base
12
+ # def setup
13
+ # ExampleClass.logger = Karafka.logger
14
+ # ExampleClass.redis = config.redis
15
+ # end
16
+ # end
17
+ class Base
18
+ extend ActiveSupport::DescendantsTracker
19
+
20
+ attr_reader :config
21
+
22
+ # @param config [Karafka::Config] config instance
23
+ # @return [Karafka::Config::Base] configurator for a given component
24
+ def initialize(config)
25
+ @config = config
26
+ end
27
+
28
+ # This method needs to be implemented in a subclass
29
+ def setup
30
+ raise NotImplementedError
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Karafka
4
+ module Setup
5
+ class Configurators
6
+ # Class responsible for setting up WaterDrop configuration
7
+ class WaterDrop < Base
8
+ # Sets up a WaterDrop settings
9
+ def setup
10
+ ::WaterDrop.setup do |water_config|
11
+ water_config.deliver = true
12
+
13
+ Karafka::App.config.to_h.except(:kafka).each do |k, v|
14
+ key_assignment = :"#{k}="
15
+ next unless water_config.respond_to?(key_assignment)
16
+ water_config.public_send(key_assignment, v)
17
+ end
18
+
19
+ Karafka::App.config.kafka.to_h.each do |k, v|
20
+ key_assignment = :"#{k}="
21
+ next unless water_config.kafka.respond_to?(key_assignment)
22
+ water_config.kafka.public_send(key_assignment, v)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Karafka
4
+ # App status monitor
5
+ class Status
6
+ include Singleton
7
+
8
+ # Available states and their transitions
9
+ STATES = {
10
+ initializing: :initialize!,
11
+ running: :run!,
12
+ stopped: :stop!
13
+ }.freeze
14
+
15
+ STATES.each do |state, transition|
16
+ define_method :"#{state}?" do
17
+ @status == state
18
+ end
19
+
20
+ define_method transition do
21
+ @status = state
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Application controller from which all Karafka controllers should inherit
4
+ # You can rename it if it would conflict with your current code base (in case you're integrating
5
+ # Karafka with other frameworks)
6
+ class ApplicationController < Karafka::BaseController
7
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Application responder from which all Karafka responders should inherit
4
+ # You can rename it if it would conflict with your current code base (in case you're integrating
5
+ # Karafka with other frameworks)
6
+ class ApplicationResponder < Karafka::BaseResponder
7
+ # This method needs to be implemented in each of the responders
8
+ # def respond(data)
9
+ # respond_to :topic, data.to_json
10
+ # end
11
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Non Ruby on Rails setup
4
+ ENV['RACK_ENV'] ||= 'development'
5
+ ENV['KARAFKA_ENV'] ||= ENV['RACK_ENV']
6
+ Bundler.require(:default, ENV['KARAFKA_ENV'])
7
+ Karafka::Loader.load(Karafka::App.root)
8
+
9
+ # Ruby on Rails setup
10
+ # Remove whole non-Rails setup that is above and uncomment the 4 lines below
11
+ # ENV['RAILS_ENV'] ||= 'development'
12
+ # ENV['KARAFKA_ENV'] = ENV['RAILS_ENV']
13
+ # require ::File.expand_path('../config/environment', __FILE__)
14
+ # Rails.application.eager_load!
15
+
16
+ class KarafkaApp < Karafka::App
17
+ setup do |config|
18
+ config.kafka.seed_brokers = %w( 127.0.0.1:9092 )
19
+ config.client_id = 'example_app'
20
+ config.backend = :inline
21
+ config.batch_fetching = true
22
+ end
23
+
24
+ consumer_groups.draw do
25
+ # topic :example do
26
+ # controller ExampleController
27
+ # end
28
+
29
+ # consumer_group :bigger_group do
30
+ # topic :test do
31
+ # controller TestController
32
+ # end
33
+ #
34
+ # topic :test2 do
35
+ # controller Test2Controller
36
+ # end
37
+ # end
38
+ end
39
+ end
40
+
41
+ KarafkaApp.boot!
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Main module namespace
4
+ module Karafka
5
+ # Current Karafka version
6
+ VERSION = '1.1.0'
7
+ end
File without changes
metadata ADDED
@@ -0,0 +1,267 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: karafka
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Maciej Mensfeld
8
+ - Pavlo Vavruk
9
+ - Adam Gwozdowski
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2017-11-07 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '5.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '5.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: dry-configurable
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '0.7'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.7'
43
+ - !ruby/object:Gem::Dependency
44
+ name: dry-validation
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.11'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.11'
57
+ - !ruby/object:Gem::Dependency
58
+ name: envlogic
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.0'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '1.0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: multi_json
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '1.12'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '1.12'
85
+ - !ruby/object:Gem::Dependency
86
+ name: rake
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '11.3'
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '11.3'
99
+ - !ruby/object:Gem::Dependency
100
+ name: require_all
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '1.4'
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '1.4'
113
+ - !ruby/object:Gem::Dependency
114
+ name: ruby-kafka
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0.5'
120
+ type: :runtime
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0.5'
127
+ - !ruby/object:Gem::Dependency
128
+ name: thor
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '0.19'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '0.19'
141
+ - !ruby/object:Gem::Dependency
142
+ name: waterdrop
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: 1.0.1
148
+ type: :runtime
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: 1.0.1
155
+ description: Framework used to simplify Apache Kafka based Ruby applications development
156
+ email:
157
+ - maciej@coditsu.io
158
+ - pavlo.vavruk@gmail.com
159
+ - adam99g@gmail.com
160
+ executables:
161
+ - karafka
162
+ extensions: []
163
+ extra_rdoc_files: []
164
+ files:
165
+ - ".console_irbrc"
166
+ - ".github/ISSUE_TEMPLATE.md"
167
+ - ".gitignore"
168
+ - ".rspec"
169
+ - ".ruby-gemset"
170
+ - ".ruby-version"
171
+ - ".travis.yml"
172
+ - CHANGELOG.md
173
+ - CODE_OF_CONDUCT.md
174
+ - CONTRIBUTING.md
175
+ - Gemfile
176
+ - Gemfile.lock
177
+ - MIT-LICENCE
178
+ - README.md
179
+ - bin/karafka
180
+ - config/errors.yml
181
+ - karafka.gemspec
182
+ - lib/karafka.rb
183
+ - lib/karafka/app.rb
184
+ - lib/karafka/attributes_map.rb
185
+ - lib/karafka/backends/inline.rb
186
+ - lib/karafka/base_controller.rb
187
+ - lib/karafka/base_responder.rb
188
+ - lib/karafka/cli.rb
189
+ - lib/karafka/cli/base.rb
190
+ - lib/karafka/cli/console.rb
191
+ - lib/karafka/cli/flow.rb
192
+ - lib/karafka/cli/info.rb
193
+ - lib/karafka/cli/install.rb
194
+ - lib/karafka/cli/server.rb
195
+ - lib/karafka/connection/config_adapter.rb
196
+ - lib/karafka/connection/consumer.rb
197
+ - lib/karafka/connection/listener.rb
198
+ - lib/karafka/connection/processor.rb
199
+ - lib/karafka/controllers/callbacks.rb
200
+ - lib/karafka/controllers/includer.rb
201
+ - lib/karafka/controllers/responders.rb
202
+ - lib/karafka/controllers/single_params.rb
203
+ - lib/karafka/errors.rb
204
+ - lib/karafka/fetcher.rb
205
+ - lib/karafka/helpers/class_matcher.rb
206
+ - lib/karafka/helpers/config_retriever.rb
207
+ - lib/karafka/helpers/multi_delegator.rb
208
+ - lib/karafka/loader.rb
209
+ - lib/karafka/logger.rb
210
+ - lib/karafka/monitor.rb
211
+ - lib/karafka/params/params.rb
212
+ - lib/karafka/params/params_batch.rb
213
+ - lib/karafka/parsers/json.rb
214
+ - lib/karafka/patches/dry_configurable.rb
215
+ - lib/karafka/patches/ruby_kafka.rb
216
+ - lib/karafka/persistence/consumer.rb
217
+ - lib/karafka/persistence/controller.rb
218
+ - lib/karafka/process.rb
219
+ - lib/karafka/responders/builder.rb
220
+ - lib/karafka/responders/topic.rb
221
+ - lib/karafka/routing/builder.rb
222
+ - lib/karafka/routing/consumer_group.rb
223
+ - lib/karafka/routing/consumer_mapper.rb
224
+ - lib/karafka/routing/proxy.rb
225
+ - lib/karafka/routing/router.rb
226
+ - lib/karafka/routing/topic.rb
227
+ - lib/karafka/routing/topic_mapper.rb
228
+ - lib/karafka/schemas/config.rb
229
+ - lib/karafka/schemas/consumer_group.rb
230
+ - lib/karafka/schemas/consumer_group_topic.rb
231
+ - lib/karafka/schemas/responder_usage.rb
232
+ - lib/karafka/schemas/server_cli_options.rb
233
+ - lib/karafka/server.rb
234
+ - lib/karafka/setup/config.rb
235
+ - lib/karafka/setup/configurators/base.rb
236
+ - lib/karafka/setup/configurators/water_drop.rb
237
+ - lib/karafka/status.rb
238
+ - lib/karafka/templates/application_controller.rb.example
239
+ - lib/karafka/templates/application_responder.rb.example
240
+ - lib/karafka/templates/karafka.rb.example
241
+ - lib/karafka/version.rb
242
+ - log/.gitkeep
243
+ homepage: https://github.com/karafka/karafka
244
+ licenses:
245
+ - MIT
246
+ metadata: {}
247
+ post_install_message:
248
+ rdoc_options: []
249
+ require_paths:
250
+ - lib
251
+ required_ruby_version: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ version: 2.3.0
256
+ required_rubygems_version: !ruby/object:Gem::Requirement
257
+ requirements:
258
+ - - ">="
259
+ - !ruby/object:Gem::Version
260
+ version: '0'
261
+ requirements: []
262
+ rubyforge_project:
263
+ rubygems_version: 2.6.13
264
+ signing_key:
265
+ specification_version: 4
266
+ summary: Ruby based framework for working with Apache Kafka
267
+ test_files: []