bug_bunny 1.0.1 → 2.0.1
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.
- checksums.yaml +4 -4
- data/README.md +154 -34
- data/Rakefile +5 -1
- data/lib/bug_bunny/config.rb +2 -2
- data/lib/bug_bunny/controller.rb +80 -7
- data/lib/bug_bunny/exception.rb +14 -66
- data/lib/bug_bunny/publisher.rb +115 -0
- data/lib/bug_bunny/rabbit.rb +283 -83
- data/lib/bug_bunny/resource.rb +226 -0
- data/lib/bug_bunny/version.rb +1 -1
- data/lib/bug_bunny.rb +7 -16
- metadata +8 -13
- data/Gemfile +0 -8
- data/lib/bug_bunny/adapter.rb +0 -347
- data/lib/bug_bunny/helpers.rb +0 -36
- data/lib/bug_bunny/message.rb +0 -161
- data/lib/bug_bunny/queue.rb +0 -23
- data/lib/bug_bunny/railtie.rb +0 -124
- data/lib/bug_bunny/response.rb +0 -15
- data/lib/bug_bunny/security.rb +0 -19
data/lib/bug_bunny/railtie.rb
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
module BugBunny
|
|
2
|
-
class Railtie < Rails::Railtie
|
|
3
|
-
rake_tasks do
|
|
4
|
-
namespace :bug_bunny do |args|
|
|
5
|
-
ARGV.shift
|
|
6
|
-
|
|
7
|
-
desc 'Bug Bunny consumer'
|
|
8
|
-
# environment is required to have access to Rails models
|
|
9
|
-
task consumer: :environment do
|
|
10
|
-
options = {}
|
|
11
|
-
|
|
12
|
-
o = OptionParser.new
|
|
13
|
-
|
|
14
|
-
o.banner = "Usage: rake bug_bunny:consumer [options]"
|
|
15
|
-
o.on("-a ADAPTER", "--adapter ADAPTER") { |adapter| options[:adapter] = adapter }
|
|
16
|
-
o.on("-s", "--session") { options[:session] = true }
|
|
17
|
-
o.on("-m MODE", "--mode MODE", "Sync or Async mode. values [:sync, :async]") { |mode| options[:mode] = mode }
|
|
18
|
-
o.on("-h", "--help", 'HELP ME!!! HELPE ME!!!') { puts o }
|
|
19
|
-
|
|
20
|
-
args = o.order!(ARGV) {}
|
|
21
|
-
|
|
22
|
-
o.parse!(args)
|
|
23
|
-
|
|
24
|
-
if defined?(Rails)
|
|
25
|
-
Rails.logger.info("Initializing #{options}")
|
|
26
|
-
else
|
|
27
|
-
puts "Initializing #{options}"
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
adapter_class = options[:adapter].constantize
|
|
31
|
-
|
|
32
|
-
mode = options[:mode].to_sym || :sync
|
|
33
|
-
|
|
34
|
-
queue_name = { sync: adapter_class::ROUTING_KEY_SYNC_REQUEST, async: adapter_class::ROUTING_KEY_ASYNC_REQUEST }[mode]
|
|
35
|
-
|
|
36
|
-
loop do
|
|
37
|
-
begin
|
|
38
|
-
adapter = adapter_class.new
|
|
39
|
-
|
|
40
|
-
queue = adapter.build_queue(queue_name, adapter_class::QUEUES_PROPS[queue_name])
|
|
41
|
-
|
|
42
|
-
if mode == :async
|
|
43
|
-
adapter.build_queue(
|
|
44
|
-
adapter_class::ROUTING_KEY_ASYNC_RESPONSE,
|
|
45
|
-
adapter_class::QUEUES_PROPS[adapter_class::ROUTING_KEY_ASYNC_RESPONSE]
|
|
46
|
-
)
|
|
47
|
-
end
|
|
48
|
-
rescue ::BugBunny::Exception::ComunicationRabbitError => e
|
|
49
|
-
if defined?(Rails)
|
|
50
|
-
Rails.logger.error(e)
|
|
51
|
-
else
|
|
52
|
-
puts e.message
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
(adapter ||= nil).try(:close_connection!) # ensure the adapter is close
|
|
56
|
-
sleep 5
|
|
57
|
-
retry
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
adapter.consume!(queue) do |message|
|
|
61
|
-
begin
|
|
62
|
-
if options[:session]
|
|
63
|
-
::Session.request_id = message.correlation_id rescue nil
|
|
64
|
-
::Session.tags_context ||= {}
|
|
65
|
-
|
|
66
|
-
::Session.extra_context ||= {}
|
|
67
|
-
::Session.extra_context[:message] = message.body
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
response = nil
|
|
71
|
-
|
|
72
|
-
Timeout.timeout(5.minutes) do
|
|
73
|
-
if defined?(Rails)
|
|
74
|
-
Rails.logger.debug("Msg received: action: #{message.service_action}, msg: #{message.body}")
|
|
75
|
-
else
|
|
76
|
-
puts "Msg received: action: #{message.service_action}, msg: #{message.body}"
|
|
77
|
-
end
|
|
78
|
-
response = "#{options[:adapter]}Controller".constantize.exec_action(message)
|
|
79
|
-
end
|
|
80
|
-
rescue Timeout::Error => e
|
|
81
|
-
puts("[OLT_VSOL_SERVICE][TIMEOUT][CONSUMER] #{e.to_s})")
|
|
82
|
-
@exception = e
|
|
83
|
-
rescue StandardError => e
|
|
84
|
-
adapter.check_pg_exception!(e)
|
|
85
|
-
if defined?(Rails)
|
|
86
|
-
Rails.logger.error(e)
|
|
87
|
-
else
|
|
88
|
-
puts e.message
|
|
89
|
-
end
|
|
90
|
-
@exception = e
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
if message.reply_to
|
|
94
|
-
Session.reply_to_queue = message.reply_to if options[:session]
|
|
95
|
-
begin
|
|
96
|
-
msg = message.build_message
|
|
97
|
-
if @exception
|
|
98
|
-
msg.body = (response&.key?(:body)) ? response[:body] : { id: message.body[:id] }
|
|
99
|
-
msg.exception = @exception
|
|
100
|
-
@exception = nil
|
|
101
|
-
else
|
|
102
|
-
msg.body = response[:body]
|
|
103
|
-
msg.status = response[:status] if response.key?(:status)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
queue = adapter.build_queue(message.reply_to, initialize: false)
|
|
107
|
-
adapter.publish!(msg, queue)
|
|
108
|
-
rescue => e
|
|
109
|
-
if defined?(Rails)
|
|
110
|
-
Rails.logger.error(e)
|
|
111
|
-
else
|
|
112
|
-
puts e.message
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
Session.clean! if options[:session]
|
|
117
|
-
end
|
|
118
|
-
sleep 5
|
|
119
|
-
end
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
end
|
data/lib/bug_bunny/response.rb
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module BugBunny
|
|
2
|
-
class Response
|
|
3
|
-
attr_accessor :status, :response, :exception
|
|
4
|
-
|
|
5
|
-
def initialize(attrs={})
|
|
6
|
-
@status = attrs[:status]
|
|
7
|
-
@response = attrs[:response]
|
|
8
|
-
@exception = attrs[:exception]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def success?
|
|
12
|
-
@status
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
data/lib/bug_bunny/security.rb
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module BugBunny
|
|
2
|
-
module Security
|
|
3
|
-
def self.sign_message(secret, message)
|
|
4
|
-
digest = OpenSSL::Digest.new('SHA512')
|
|
5
|
-
private_key = OpenSSL::PKey::RSA.new(secret)
|
|
6
|
-
Base64.encode64(private_key.sign(digest, message))
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def self.check_sign(key, signature, message)
|
|
10
|
-
pub_key = OpenSSL::PKey::RSA.new(key)
|
|
11
|
-
digest = OpenSSL::Digest.new('SHA512')
|
|
12
|
-
if pub_key.verify(digest, Base64.decode64(signature), message)
|
|
13
|
-
true
|
|
14
|
-
else
|
|
15
|
-
false
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|