totoro 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/lib/totoro/base_queue.rb +4 -4
  3. data/lib/totoro/version.rb +1 -1
  4. metadata +1 -97
  5. data/pkg/totoro-1.0.5/CODE_OF_CONDUCT.md +0 -74
  6. data/pkg/totoro-1.0.5/Dockerfile +0 -14
  7. data/pkg/totoro-1.0.5/Gemfile +0 -8
  8. data/pkg/totoro-1.0.5/Gemfile.lock +0 -68
  9. data/pkg/totoro-1.0.5/LICENSE.txt +0 -21
  10. data/pkg/totoro-1.0.5/README.md +0 -169
  11. data/pkg/totoro-1.0.5/Rakefile +0 -8
  12. data/pkg/totoro-1.0.5/bin/console +0 -15
  13. data/pkg/totoro-1.0.5/bin/setup +0 -8
  14. data/pkg/totoro-1.0.5/bin/totoro +0 -16
  15. data/pkg/totoro-1.0.5/docker-compose.yml +0 -43
  16. data/pkg/totoro-1.0.5/lib/generators/totoro/config_generator.rb +0 -12
  17. data/pkg/totoro-1.0.5/lib/generators/totoro/init_generator.rb +0 -14
  18. data/pkg/totoro-1.0.5/lib/generators/totoro/templates/create_totoro_failed_messages.rb +0 -12
  19. data/pkg/totoro-1.0.5/lib/generators/totoro/templates/initializer.rb +0 -1
  20. data/pkg/totoro-1.0.5/lib/generators/totoro/templates/totoro.yml +0 -33
  21. data/pkg/totoro-1.0.5/lib/generators/totoro/templates/update_totoro_failed_messages.rb +0 -6
  22. data/pkg/totoro-1.0.5/lib/generators/totoro/templates/worker.rb.erb +0 -10
  23. data/pkg/totoro-1.0.5/lib/generators/totoro/update_generator.rb +0 -12
  24. data/pkg/totoro-1.0.5/lib/generators/totoro/worker_generator.rb +0 -17
  25. data/pkg/totoro-1.0.5/lib/totoro.rb +0 -21
  26. data/pkg/totoro-1.0.5/lib/totoro/base_queue.rb +0 -44
  27. data/pkg/totoro-1.0.5/lib/totoro/base_worker.rb +0 -61
  28. data/pkg/totoro-1.0.5/lib/totoro/config.rb +0 -44
  29. data/pkg/totoro-1.0.5/lib/totoro/errors/connection_break_error.rb +0 -6
  30. data/pkg/totoro-1.0.5/lib/totoro/errors/need_queue_name_error.rb +0 -5
  31. data/pkg/totoro-1.0.5/lib/totoro/initializer.rb +0 -39
  32. data/pkg/totoro-1.0.5/lib/totoro/message_resender.rb +0 -17
  33. data/pkg/totoro-1.0.5/lib/totoro/models/totoro_failed_message.rb +0 -8
  34. data/pkg/totoro-1.0.5/lib/totoro/railtie.rb +0 -15
  35. data/pkg/totoro-1.0.5/lib/totoro/services/broadcast_service.rb +0 -33
  36. data/pkg/totoro-1.0.5/lib/totoro/services/enqueue_service.rb +0 -38
  37. data/pkg/totoro-1.0.5/lib/totoro/services/resend_service.rb +0 -19
  38. data/pkg/totoro-1.0.5/lib/totoro/services/subscribe_service.rb +0 -34
  39. data/pkg/totoro-1.0.5/lib/totoro/tasks/resend_message.rake +0 -8
  40. data/pkg/totoro-1.0.5/lib/totoro/utils.rb +0 -22
  41. data/pkg/totoro-1.0.5/lib/totoro/version.rb +0 -5
  42. data/pkg/totoro-1.0.5/pkg/totoro-1.0.4.gem +0 -0
  43. data/pkg/totoro-1.0.5/spec/spec_helper.rb +0 -14
  44. data/pkg/totoro-1.0.5/spec/totoro_spec.rb +0 -9
  45. data/pkg/totoro-1.0.5/test/rabbitmq_commands.txt +0 -6
  46. data/pkg/totoro-1.0.5/test/totoro_test/Gemfile +0 -43
  47. data/pkg/totoro-1.0.5/test/totoro_test/Gemfile.lock +0 -157
  48. data/pkg/totoro-1.0.5/test/totoro_test/README.md +0 -24
  49. data/pkg/totoro-1.0.5/test/totoro_test/Rakefile +0 -6
  50. data/pkg/totoro-1.0.5/test/totoro_test/app/channels/application_cable/channel.rb +0 -4
  51. data/pkg/totoro-1.0.5/test/totoro_test/app/channels/application_cable/connection.rb +0 -4
  52. data/pkg/totoro-1.0.5/test/totoro_test/app/controllers/application_controller.rb +0 -2
  53. data/pkg/totoro-1.0.5/test/totoro_test/app/jobs/application_job.rb +0 -2
  54. data/pkg/totoro-1.0.5/test/totoro_test/app/mailers/application_mailer.rb +0 -4
  55. data/pkg/totoro-1.0.5/test/totoro_test/app/models/application_record.rb +0 -3
  56. data/pkg/totoro-1.0.5/test/totoro_test/app/models/worker/example_queue.rb +0 -10
  57. data/pkg/totoro-1.0.5/test/totoro_test/app/models/worker/exchange_queue.rb +0 -10
  58. data/pkg/totoro-1.0.5/test/totoro_test/app/models/worker/shu_queue.rb +0 -10
  59. data/pkg/totoro-1.0.5/test/totoro_test/app/services/bench_mark.txt +0 -7
  60. data/pkg/totoro-1.0.5/test/totoro_test/app/services/load_test.rb +0 -19
  61. data/pkg/totoro-1.0.5/test/totoro_test/app/views/layouts/mailer.html.erb +0 -13
  62. data/pkg/totoro-1.0.5/test/totoro_test/app/views/layouts/mailer.text.erb +0 -1
  63. data/pkg/totoro-1.0.5/test/totoro_test/bin/bundle +0 -3
  64. data/pkg/totoro-1.0.5/test/totoro_test/bin/delayed_job +0 -5
  65. data/pkg/totoro-1.0.5/test/totoro_test/bin/rails +0 -9
  66. data/pkg/totoro-1.0.5/test/totoro_test/bin/rake +0 -9
  67. data/pkg/totoro-1.0.5/test/totoro_test/bin/setup +0 -34
  68. data/pkg/totoro-1.0.5/test/totoro_test/bin/spring +0 -17
  69. data/pkg/totoro-1.0.5/test/totoro_test/bin/update +0 -29
  70. data/pkg/totoro-1.0.5/test/totoro_test/config.ru +0 -5
  71. data/pkg/totoro-1.0.5/test/totoro_test/config/application.rb +0 -34
  72. data/pkg/totoro-1.0.5/test/totoro_test/config/boot.rb +0 -3
  73. data/pkg/totoro-1.0.5/test/totoro_test/config/cable.yml +0 -10
  74. data/pkg/totoro-1.0.5/test/totoro_test/config/database.yml +0 -55
  75. data/pkg/totoro-1.0.5/test/totoro_test/config/environment.rb +0 -5
  76. data/pkg/totoro-1.0.5/test/totoro_test/config/environments/development.rb +0 -47
  77. data/pkg/totoro-1.0.5/test/totoro_test/config/environments/production.rb +0 -82
  78. data/pkg/totoro-1.0.5/test/totoro_test/config/environments/test.rb +0 -41
  79. data/pkg/totoro-1.0.5/test/totoro_test/config/initializers/application_controller_renderer.rb +0 -8
  80. data/pkg/totoro-1.0.5/test/totoro_test/config/initializers/backtrace_silencers.rb +0 -7
  81. data/pkg/totoro-1.0.5/test/totoro_test/config/initializers/cors.rb +0 -16
  82. data/pkg/totoro-1.0.5/test/totoro_test/config/initializers/filter_parameter_logging.rb +0 -4
  83. data/pkg/totoro-1.0.5/test/totoro_test/config/initializers/inflections.rb +0 -16
  84. data/pkg/totoro-1.0.5/test/totoro_test/config/initializers/mime_types.rb +0 -4
  85. data/pkg/totoro-1.0.5/test/totoro_test/config/initializers/totoro.rb +0 -1
  86. data/pkg/totoro-1.0.5/test/totoro_test/config/initializers/wrap_parameters.rb +0 -14
  87. data/pkg/totoro-1.0.5/test/totoro_test/config/locales/en.yml +0 -33
  88. data/pkg/totoro-1.0.5/test/totoro_test/config/puma.rb +0 -56
  89. data/pkg/totoro-1.0.5/test/totoro_test/config/routes.rb +0 -3
  90. data/pkg/totoro-1.0.5/test/totoro_test/config/secrets.yml +0 -32
  91. data/pkg/totoro-1.0.5/test/totoro_test/config/spring.rb +0 -6
  92. data/pkg/totoro-1.0.5/test/totoro_test/config/totoro.yml +0 -42
  93. data/pkg/totoro-1.0.5/test/totoro_test/db/migrate/20181019041208_create_delayed_jobs.rb +0 -22
  94. data/pkg/totoro-1.0.5/test/totoro_test/db/migrate/20181019070846_create_totoro_failed_messages.rb +0 -11
  95. data/pkg/totoro-1.0.5/test/totoro_test/db/migrate/20181228033422_update_totoro_failed_messages.rb +0 -5
  96. data/pkg/totoro-1.0.5/test/totoro_test/db/schema.rb +0 -42
  97. data/pkg/totoro-1.0.5/test/totoro_test/db/seeds.rb +0 -7
  98. data/pkg/totoro-1.0.5/test/totoro_test/public/robots.txt +0 -1
  99. data/pkg/totoro-1.0.5/test/totoro_test/test/test_helper.rb +0 -10
  100. data/pkg/totoro-1.0.5/totoro.gemspec +0 -29
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
- require 'rspec/core/rake_task'
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- task default: :spec
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'bundler/setup'
5
- require 'totoro'
6
-
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
-
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
13
-
14
- require 'irb'
15
- IRB.start(__FILE__)
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'totoro'
5
- # You might want to change this
6
- ENV['RAILS_ENV'] ||= 'development'
7
-
8
- root = Dir.pwd
9
- root = File.dirname(root) until File.exist?(File.join(root, 'config'))
10
- Dir.chdir(root)
11
-
12
- require File.join(root, 'config', 'environment')
13
-
14
- worker_class = ARGV[0]
15
-
16
- ::Worker.const_get(worker_class.to_s.camelize).new.execute
@@ -1,43 +0,0 @@
1
- version: '2.0'
2
- services:
3
- rabbitmq:
4
- image: rabbitmq:3-management-alpine
5
- environment:
6
- RABBITMQ_DEFAULT_USER: app
7
- RABBITMQ_DEFAULT_PASS: app
8
- ports:
9
- - '5672:5672'
10
- - '15672:15672'
11
-
12
- db:
13
- image: postgres:9.6.6
14
- restart: always
15
- ports:
16
- - '5432:5432'
17
- volumes:
18
- - 'postgres:/var/lib/postgresql/data'
19
- environment:
20
- POSTGRES_USER: root
21
- POSTGRES_PASSWORD: root
22
-
23
- totoro:
24
- build: .
25
- ports:
26
- - '3000:3000'
27
- volumes:
28
- - ./test/totoro_test:/app
29
- - .:/totoro
30
- command: totoro example_queue
31
- environment:
32
- POSTGRES_HOST: db
33
- POSTGRES_USER: root
34
- POSTGRES_PASSWORD: root
35
- RABBITMQ_HOST: rabbitmq
36
- RABBITMQ_USERNAME: app
37
- RABBITMQ_PASSWORD: app
38
- depends_on:
39
- - db
40
- - rabbitmq
41
-
42
- volumes:
43
- postgres:
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Totoro
4
- class ConfigGenerator < Rails::Generators::Base
5
- source_root File.expand_path('templates', __dir__)
6
- desc 'Generate totoro config file'
7
-
8
- def copy_config_file
9
- template 'totoro.yml', File.join('config', 'totoro.yml')
10
- end
11
- end
12
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Totoro
4
- class InitGenerator < Rails::Generators::Base
5
- source_root File.expand_path('templates', __dir__)
6
- desc 'Generate totoro config file'
7
-
8
- def copy_config_file
9
- template 'create_totoro_failed_messages.rb', File.join('db/migrate', "#{Time.now.strftime('%Y%m%d%H%M%S')}_create_totoro_failed_messages.rb")
10
- template 'totoro.yml', File.join('config', 'totoro.yml')
11
- template 'initializer.rb', File.join('config/initializers', 'totoro.rb')
12
- end
13
- end
14
- end
@@ -1,12 +0,0 @@
1
- class CreateTotoroFailedMessages < ActiveRecord::Migration[5.1]
2
- def change
3
- enable_extension "plpgsql"
4
- create_table :totoro_failed_messages do |t|
5
- t.string :class_name
6
- t.string :queue_id
7
- t.jsonb :payload
8
- t.string :group
9
- t.timestamps
10
- end
11
- end
12
- end
@@ -1 +0,0 @@
1
- Totoro::Initializer.new.execute
@@ -1,33 +0,0 @@
1
- default: &default
2
- connect:
3
- host: rabbitmq
4
- port: 5672
5
- user: app
6
- pass: app
7
- queue:
8
- example_queue:
9
- name: real.queue.name
10
- durable: true
11
- clean_start: false
12
- manual_ack: true
13
- force_ack: true
14
-
15
- custom:
16
- connect:
17
- host: rabbitmq
18
- port: 5672
19
- user: app
20
- pass: app
21
- queue:
22
- custom_queue:
23
- name: custom.queue.name
24
- durable: true
25
-
26
- development:
27
- <<: *default
28
-
29
- test:
30
- <<: *default
31
-
32
- production:
33
- <<: *default
@@ -1,6 +0,0 @@
1
- class UpdateTotoroFailedMessages < ActiveRecord::Migration[5.1]
2
- def change
3
- add_column :totoro_failed_messages, :group, :string
4
- Totoro::TotoroFailedMessage.all.update(group: 'enqueue')
5
- end
6
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Worker
4
- class <%= name.camelcase %> < Totoro::BaseWorker
5
- setup queue_name: '<%= queue || name.underscore %>'<% if prefix.present? %> ,prefix: :<%= prefix %><% end %>
6
- def process(payload, metadata, delivery_info)
7
- # worker process
8
- end
9
- end
10
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Totoro
4
- class UpdateGenerator < Rails::Generators::Base
5
- source_root File.expand_path('templates', __dir__)
6
- desc 'Update totoro to 1.0.0'
7
-
8
- def copy_config_file
9
- template 'update_totoro_failed_messages.rb', File.join('db/migrate', "#{Time.now.strftime('%Y%m%d%H%M%S')}_update_totoro_failed_messages.rb")
10
- end
11
- end
12
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Totoro
4
- class WorkerGenerator < Rails::Generators::Base
5
- desc 'Generate totoro worker file'
6
-
7
- source_root File.expand_path('templates', __dir__)
8
- argument :name, type: :string
9
- argument :queue, type: :string, required: false
10
- argument :prefix, type: :string, required: false
11
-
12
- def copy_config_file
13
- template 'worker.rb.erb',
14
- File.join('app/models/worker', "#{name.underscore}.rb")
15
- end
16
- end
17
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'totoro/version'
4
- require 'totoro/config'
5
- require 'totoro/base_queue'
6
- require 'totoro/base_worker'
7
- require 'totoro/utils'
8
- require 'totoro/services/enqueue_service'
9
- require 'totoro/services/broadcast_service'
10
- require 'totoro/services/subscribe_service'
11
- require 'totoro/services/resend_service'
12
- require 'totoro/errors/connection_break_error'
13
- require 'totoro/errors/need_queue_name_error'
14
- require 'totoro/initializer'
15
- require 'totoro/message_resender'
16
- require 'totoro/models/totoro_failed_message'
17
- require 'totoro/railtie' if defined?(Rails)
18
-
19
- module Totoro
20
- # Your code goes here...
21
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bunny'
4
-
5
- module Totoro
6
- class BaseQueue
7
- class <<self
8
- def config
9
- @config ||= Totoro::Config.new
10
- end
11
-
12
- def connection
13
- @connection ||= Bunny.new(config.connect.merge(threaded: false))
14
- end
15
-
16
- def broadcast(id, payload)
17
- Totoro::BroadcastService.new(connection, config).broadcast(id, payload)
18
- rescue Totoro::ConnectionBreakError => error
19
- handle_failed_msg(id, payload, error, :broadcast)
20
- end
21
-
22
- def enqueue(id, payload)
23
- Totoro::EnqueueService.new(connection, config).enqueue(id, payload)
24
- rescue Totoro::ConnectionBreakError => error
25
- handle_failed_msg(id, payload, error, :enqueue)
26
- end
27
-
28
- private
29
-
30
- def handle_failed_msg(id, payload, error, group)
31
- Rails.logger.error error.message
32
- Rails.logger.info 'Add failed message to resend list'
33
- STDOUT.flush
34
- @connection = nil
35
- Totoro::TotoroFailedMessage.create(
36
- class_name: to_s,
37
- queue_id: id,
38
- group: group,
39
- payload: payload
40
- )
41
- end
42
- end
43
- end
44
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Totoro
4
- class BaseWorker
5
- def self.setup(attrs)
6
- prefix = attrs[:prefix]
7
- queue_name = attrs[:queue_name]
8
- define_method('setup') do
9
- raise(Totoro::NeedQueueNameError) if queue_name.nil?
10
-
11
- @prefix = prefix
12
- @queue_name = queue_name
13
- end
14
- end
15
-
16
- def initialize
17
- setup
18
- end
19
-
20
- def execute
21
- Rails.logger.info 'Listening to the Rabbitmq'
22
- STDOUT.flush
23
- subscribe_service.subscribe(@queue_name) do |delivery_info, metadata, payload|
24
- Rails.logger.debug "#{@queue_name} received message"
25
- STDOUT.flush
26
- payload_hash = JSON.parse(payload).with_indifferent_access
27
- process(payload_hash, metadata, delivery_info)
28
- end
29
-
30
- handle_usr1_n_usr2
31
-
32
- subscribe_service.channel.work_pool.join
33
- rescue SignalException
34
- puts 'Terminating process ..'
35
- subscribe_service.channel.work_pool.shutdown(true)
36
- puts 'Stopped.'
37
- end
38
-
39
- def process; end
40
-
41
- private
42
-
43
- def handle_usr1_n_usr2
44
- %w[USR1 USR2].each do |signal|
45
- Signal.trap(signal) do
46
- puts "#{signal} received."
47
- handler = "on_#{signal.downcase}"
48
- send handler if respond_to?(handler)
49
- end
50
- end
51
- end
52
-
53
- def config
54
- @config ||= Totoro::Config.new(@prefix)
55
- end
56
-
57
- def subscribe_service
58
- @subscribe_service ||= Totoro::SubscribeService.new(config)
59
- end
60
- end
61
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Totoro
4
- class Config
5
- def initialize(prefix = nil)
6
- @data = Rails.application.config_for(:totoro).with_indifferent_access
7
- @data = @data[prefix] if prefix.present?
8
- end
9
-
10
- def reset_data
11
- @data = nil
12
- end
13
-
14
- def connect
15
- @data[:connect]
16
- end
17
-
18
- def exchange(id)
19
- @data[:exchange][id][:name]
20
- end
21
-
22
- def exchange_name_for_queue(queue_id)
23
- @data[:queue][queue_id][:exchange]
24
- end
25
-
26
- def clean_start?(id)
27
- !!@data[:queue][id][:clean_start]
28
- end
29
-
30
- def manual_ack?(id)
31
- !!@data[:queue][id][:manual_ack]
32
- end
33
-
34
- def force_ack?(id)
35
- manual_ack?(id) && !!@data[:queue][id][:force_ack]
36
- end
37
-
38
- def queue(id)
39
- name = @data[:queue][id][:name]
40
- settings = { durable: @data[:queue][id][:durable] }
41
- [name, settings]
42
- end
43
- end
44
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Totoro
4
- class ConnectionBreakError < StandardError
5
- end
6
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Totoro
4
- class NeedQueueNameError < RuntimeError; end
5
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Totoro
4
- class Initializer
5
- DEFAULT_CONFIG = %i[default connect queue].freeze
6
- def execute
7
- config = Rails.application.config_for(:totoro).with_indifferent_access
8
- # set default queue class
9
- Totoro.const_set('Queue', default_queue_class(config))
10
- # set custom queue class
11
- (config.symbolize_keys.keys - DEFAULT_CONFIG).each do |prefix|
12
- prefix_module(prefix, queue_class(prefix))
13
- end
14
- end
15
-
16
- private
17
-
18
- def default_queue_class(config)
19
- if config.key?(:default)
20
- queue_class(:default)
21
- else
22
- Class.new(Totoro::BaseQueue)
23
- end
24
- end
25
-
26
- def queue_class(prefix)
27
- custom_queue_class = Class.new(Totoro::BaseQueue)
28
- custom_queue_class.define_singleton_method('config') do
29
- @config ||= Totoro::Config.new(prefix)
30
- end
31
- custom_queue_class
32
- end
33
-
34
- def prefix_module(prefix, custom_queue_class)
35
- prefix_module = Totoro.const_set(prefix.to_s.camelize, Module.new)
36
- prefix_module.const_set('Queue', custom_queue_class)
37
- end
38
- end
39
- end