ruby_rabbitmq_janus 2.1.1 → 2.2.0.pre.42
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/default.md +3 -4
- data/config/default.yml +7 -6
- data/lib/generators/ruby_rabbitmq_janus/templates/migration.rb +1 -0
- data/lib/rrj/errors/error.rb +16 -4
- data/lib/rrj/errors/janus/janus.rb +0 -1
- data/lib/rrj/errors/janus/processus/keepalive.rb +5 -17
- data/lib/rrj/errors/janus/processus/keepalive/initializer.rb +61 -0
- data/lib/rrj/errors/janus/processus/keepalive/thread.rb +16 -0
- data/lib/rrj/errors/janus/processus/keepalive/timer.rb +16 -0
- data/lib/rrj/errors/rabbit/connect.rb +12 -12
- data/lib/rrj/errors/tools/gem/cluster.rb +7 -7
- data/lib/rrj/errors/tools/gem/config.rb +0 -14
- data/lib/rrj/errors/tools/gem/option.rb +7 -0
- data/lib/rrj/info.rb +1 -1
- data/lib/rrj/init.rb +0 -11
- data/lib/rrj/janus/processus/concurrency.rb +8 -5
- data/lib/rrj/janus/processus/event.rb +8 -5
- data/lib/rrj/janus/processus/keepalive/keepalive_initializer.rb +74 -0
- data/lib/rrj/janus/processus/keepalive/keepalive_message.rb +52 -0
- data/lib/rrj/janus/processus/keepalive/keepalive_thread.rb +71 -0
- data/lib/rrj/janus/processus/keepalive/keepalive_timer.rb +64 -0
- data/lib/rrj/janus/responses/response.rb +8 -1
- data/lib/rrj/janus/transactions/transaction.rb +1 -1
- data/lib/rrj/models/active_record.rb +6 -2
- data/lib/rrj/models/concerns/janus_instance_callbacks.rb +69 -0
- data/lib/rrj/models/concerns/{janus_instance_concern.rb → janus_instance_methods.rb} +7 -10
- data/lib/rrj/models/concerns/janus_instance_validations.rb +20 -0
- data/lib/rrj/models/mongoid.rb +7 -2
- data/lib/rrj/rabbit/connect.rb +14 -12
- data/lib/rrj/rabbit/publish/keepalive.rb +33 -0
- data/lib/rrj/rabbit/publish/publisher.rb +1 -0
- data/lib/rrj/tools/gem/cluster.rb +15 -25
- data/lib/rrj/tools/gem/config.rb +1 -8
- data/lib/rrj/tools/gem/option.rb +16 -9
- data/spec/rrj/tools/gem/rrj_cluster_spec.rb +2 -6
- data/spec/rrj/tools/gem/rrj_config_spec.rb +1 -6
- data/spec/support/schemas/config/config.json +13 -5
- metadata +30 -7
- data/lib/rrj/janus/processus/keepalive.rb +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5f7f8a44b723ed992abbde848a25695bc35df85
|
4
|
+
data.tar.gz: 1c4069bc56dd828876f35e3ed9041f78ee1addfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47cb62ccb6c9ae3c8fda9c57aa30e9aded8a2c75c28521b39338e5cbd68261975cb46cde52604f669484a6679c128ca93b48ea867472e998a7ea86b7b2d75d67
|
7
|
+
data.tar.gz: 882fae4ab47b161503ed0ea8c7b7feb84bcd58bf02e020d71551f8b487278e245ef07c51a7cc4823ec417092fd171b12a8ff352579706dfb0fb7ca6118d8fa02
|
data/config/default.md
CHANGED
@@ -23,15 +23,14 @@ queues:
|
|
23
23
|
to: to-janus-admin
|
24
24
|
|
25
25
|
janus:
|
26
|
-
cluster:
|
27
|
-
enabled: false
|
28
|
-
count: 0
|
29
26
|
session:
|
30
27
|
keepalive: 45
|
31
28
|
plugins:
|
32
29
|
- janus.plugin.echotest
|
33
30
|
|
34
31
|
gem:
|
32
|
+
cluster:
|
33
|
+
enabled: true
|
35
34
|
log:
|
36
35
|
level: info
|
37
36
|
```
|
@@ -42,7 +41,7 @@ For customizing a configuration add a yml file in your rails project in
|
|
42
41
|
`config/ruby-rabbitmq-janus.yml`, or use rails generator with command `rails generate
|
43
42
|
ruby_rabbitmq_janus:configuration`.
|
44
43
|
|
45
|
-
##
|
44
|
+
## Resources
|
46
45
|
|
47
46
|
* [Configuration of RabbitMQ](https://www.rabbitmq.com/configure.html#config-items)
|
48
47
|
* [Configuration of Janus queue](https://janus.conf.meetecho.com/docs/rest.html#rabbit)
|
data/config/default.yml
CHANGED
@@ -30,12 +30,6 @@ queues:
|
|
30
30
|
|
31
31
|
# Janus plugin used
|
32
32
|
janus:
|
33
|
-
# Options for clusturing Janus Instance
|
34
|
-
cluster:
|
35
|
-
# Enable/Disable cluster mode
|
36
|
-
enabled: false
|
37
|
-
# Number to cluster
|
38
|
-
count: 1
|
39
33
|
# Option for sessions
|
40
34
|
session:
|
41
35
|
# Define time to send a keepalive message in seconds
|
@@ -48,6 +42,13 @@ janus:
|
|
48
42
|
|
49
43
|
# Options gem
|
50
44
|
gem:
|
45
|
+
# Options for clusturing Janus Instance
|
46
|
+
cluster:
|
47
|
+
# Enable/Disable cluster mode
|
48
|
+
# if you disable cluster mode, the initializer to this gem start a session
|
49
|
+
# automatically with Janus, but if you enable think to start a session for
|
50
|
+
# each instance
|
51
|
+
enabled: true
|
51
52
|
# Option for logs
|
52
53
|
log:
|
53
54
|
# Define level to log
|
data/lib/rrj/errors/error.rb
CHANGED
@@ -7,15 +7,27 @@ module RubyRabbitmqJanus
|
|
7
7
|
#
|
8
8
|
# Define errors to gems
|
9
9
|
class RRJError < StandardError
|
10
|
-
# Initialize a error standard in this gem
|
10
|
+
# Initialize a error standard in this gem and writing in log file
|
11
11
|
#
|
12
12
|
# @param [String] message Text returning in raise
|
13
13
|
# @param [Symbol] level Important to error
|
14
14
|
def initialize(message, level)
|
15
15
|
super(message)
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
write_error(message, level)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def log
|
22
|
+
RubyRabbitmqJanus::Tools::Log
|
23
|
+
end
|
24
|
+
|
25
|
+
def logger
|
26
|
+
log.instance
|
27
|
+
end
|
28
|
+
|
29
|
+
def write_error(message, level)
|
30
|
+
log.instance_method(level).bind(logger).call(message)
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
@@ -9,25 +9,13 @@ module RubyRabbitmqJanus
|
|
9
9
|
# Define a super class for all error in Janus::Concurency::Keepalive
|
10
10
|
class BaseKeepalive < RubyRabbitmqJanus::Errors::Janus::BaseConcurency
|
11
11
|
def initialize(message)
|
12
|
-
super "[Keepalive]
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
module Keepalive
|
17
|
-
# Error for Janus::Concurency::Keepalive#initialize
|
18
|
-
class Initializer < RubyRabbitmqJanus::Errors::Janus::BaseKeepalive
|
19
|
-
def initializer
|
20
|
-
super 'Error keepalive initializer'
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# Error for Janus::Concurency::Keepalive#session
|
25
|
-
class Session < RubyRabbitmqJanus::Errors::Janus::BaseKeepalive
|
26
|
-
def initializer
|
27
|
-
super 'Error return session number'
|
28
|
-
end
|
12
|
+
super "[Keepalive]#{message}"
|
29
13
|
end
|
30
14
|
end
|
31
15
|
end
|
32
16
|
end
|
33
17
|
end
|
18
|
+
|
19
|
+
require 'rrj/errors/janus/processus/keepalive/initializer'
|
20
|
+
require 'rrj/errors/janus/processus/keepalive/thread'
|
21
|
+
require 'rrj/errors/janus/processus/keepalive/timer'
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :reek:IrresponsibleModule
|
4
|
+
#
|
5
|
+
# rubocop:disable Metrics/LineLength
|
6
|
+
# rubocop:disable Style/Documentation
|
7
|
+
|
8
|
+
module RubyRabbitmqJanus
|
9
|
+
module Errors
|
10
|
+
module Janus
|
11
|
+
# Define a super class for all error in Janus::Concurency::Keepalive
|
12
|
+
class BaseKeepaliveInitializer < BaseKeepalive
|
13
|
+
def initialize(message)
|
14
|
+
super "[Initializer] #{message}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module KeepaliveInitializer
|
19
|
+
# Error for Janus::Concurency::Keepalive#initialize
|
20
|
+
class Initializer < RubyRabbitmqJanus::Errors::Janus::BaseKeepaliveInitializer
|
21
|
+
def initializer
|
22
|
+
super 'Error keepalive initializer'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Error for Janus::Concurency::Keepalive#session
|
27
|
+
class Session < RubyRabbitmqJanus::Errors::Janus::BaseKeepaliveInitializer
|
28
|
+
def initializer
|
29
|
+
super 'Error return session number'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Thread < RubyRabbitmqJanus::Errors::Janus::BaseKeepaliveInitializer
|
34
|
+
def initializer
|
35
|
+
super 'Error for get Object Thread ID'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class ThreadStart < RubyRabbitmqJanus::Errors::Janus::BaseKeepaliveInitializer
|
40
|
+
def initializer
|
41
|
+
super 'Error for starting timer in thread'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class ThreadStop < RubyRabbitmqJanus::Errors::Janus::BaseKeepaliveInitializer
|
46
|
+
def initializer
|
47
|
+
super 'Error for stoping timer in thread'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class ThreadDelete < RubyRabbitmqJanus::Errors::Janus::BaseKeepaliveInitializer
|
52
|
+
def initializer
|
53
|
+
super 'Error for destroy thread'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
# rubocop:enable Style/Documentation
|
61
|
+
# rubocop:enable Metrics/LineLength
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :reek:IrresponsibleModule
|
4
|
+
|
5
|
+
module RubyRabbitmqJanus
|
6
|
+
module Errors
|
7
|
+
module Janus
|
8
|
+
# Define a super class for all error in Janus::Concurency::Keepalive
|
9
|
+
class BaseKeepaliveThread < BaseKeepalive
|
10
|
+
def initialize(message)
|
11
|
+
super "[Thread] #{message}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :reek:IrresponsibleModule
|
4
|
+
|
5
|
+
module RubyRabbitmqJanus
|
6
|
+
module Errors
|
7
|
+
module Janus
|
8
|
+
# Define a super class for all error in Janus::Concurency::Keepalive
|
9
|
+
class BaseKeepaliveTimer < BaseKeepalive
|
10
|
+
def initialize(message)
|
11
|
+
super "[Timer] #{message}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -13,43 +13,43 @@ module RubyRabbitmqJanus
|
|
13
13
|
module Connect
|
14
14
|
# Error for Rabbit::Connect#initialize
|
15
15
|
class Initialize < RubyRabbitmqJanus::Errors::Rabbit::BaseConnect
|
16
|
-
def initialize
|
17
|
-
super
|
16
|
+
def initialize(error)
|
17
|
+
super "Error in initializer #{error}"
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
# Error for Rabbit::Connect#transaction_short
|
22
22
|
class TransactionShort < RubyRabbitmqJanus::Errors::Rabbit::BaseConnect
|
23
|
-
def initialize
|
24
|
-
super
|
23
|
+
def initialize(error)
|
24
|
+
super "Error during transaction with RabbitMQ #{error}"
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
# Error for Rabbit::Connect#transaction_long
|
29
29
|
class TransactionLong < RubyRabbitmqJanus::Errors::Rabbit::BaseConnect
|
30
|
-
def initialize
|
31
|
-
super
|
30
|
+
def initialize(error)
|
31
|
+
super "Error during transaction with RabbitMQ #{error}"
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
# Error for Rabbit::Connect#start
|
36
36
|
class Start < RubyRabbitmqJanus::Errors::Rabbit::BaseConnect
|
37
|
-
def initialize
|
38
|
-
super
|
37
|
+
def initialize(error)
|
38
|
+
super "Error for starting connection with RabbitMQ #{error}"
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
42
|
# Error for Rabbit::Connect#close
|
43
43
|
class Close < RubyRabbitmqJanus::Errors::Rabbit::BaseConnect
|
44
|
-
def initialize
|
45
|
-
super
|
44
|
+
def initialize(error)
|
45
|
+
super "Error for closing connection with RabbitMQ #{error}"
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
# Error for Rabbit::Connect#channel
|
50
50
|
class Channel < RubyRabbitmqJanus::Errors::Rabbit::BaseConnect
|
51
|
-
def initialize
|
52
|
-
super
|
51
|
+
def initialize(error)
|
52
|
+
super "Error for create channel in RabbitMQ instance #{error}"
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -18,13 +18,6 @@ module RubyRabbitmqJanus
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
# Error for Tools::Option#create_sessions
|
22
|
-
class CreateSessions < RubyRabbitmqJanus::Errors::Tools::BaseCluster
|
23
|
-
def initalize
|
24
|
-
super 'Error for creating sessions'
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
21
|
# Error for Tools::Option#queue_to
|
29
22
|
class QueueTo < RubyRabbitmqJanus::Errors::Tools::BaseCluster
|
30
23
|
def initalize
|
@@ -38,6 +31,13 @@ module RubyRabbitmqJanus
|
|
38
31
|
super 'Error for create string queue_admin_to'
|
39
32
|
end
|
40
33
|
end
|
34
|
+
|
35
|
+
# Error if restart thread to instance failed
|
36
|
+
class RestartInstance < RubyRabbitmqJanus::Errors::Tools::BaseCluster
|
37
|
+
def initialize(option)
|
38
|
+
super "Error for restart thread to instance #{option}"
|
39
|
+
end
|
40
|
+
end
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -76,20 +76,6 @@ module RubyRabbitmqJanus
|
|
76
76
|
"with parameter #{parameter}", :warn
|
77
77
|
end
|
78
78
|
end
|
79
|
-
|
80
|
-
# Error for Tools::Config#cluster
|
81
|
-
class Cluster < RubyRabbitmqJanus::Errors::Tools::BaseConfig
|
82
|
-
def initialize
|
83
|
-
super 'Error for reading cluster enabled option', :fatal
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
# Error for Tools::Config#number_of_instance
|
88
|
-
class NumberOfinstance < RubyRabbitmqJanus::Errors::Tools::BaseConfig
|
89
|
-
def initialize
|
90
|
-
super 'Error for reading cluster instance count', :fatal
|
91
|
-
end
|
92
|
-
end
|
93
79
|
end
|
94
80
|
end
|
95
81
|
end
|
@@ -31,6 +31,13 @@ module RubyRabbitmqJanus
|
|
31
31
|
super "Error for test use current handle -- #{opts}", :fatal
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
# Error for Tools::Option#cluster_mode
|
36
|
+
class ClusterMode < RubyRabbitmqJanus::Errors::Tools::BaseOption
|
37
|
+
def initialize
|
38
|
+
super 'Error for create session in cluster mode disable', :fatal
|
39
|
+
end
|
40
|
+
end
|
34
41
|
end
|
35
42
|
end
|
36
43
|
end
|
data/lib/rrj/info.rb
CHANGED
data/lib/rrj/init.rb
CHANGED
@@ -39,8 +39,6 @@ module RubyRabbitmqJanus
|
|
39
39
|
# => #<RubyRabbitmqJanus::RRJ:0x007 @session=123>
|
40
40
|
def initialize
|
41
41
|
@option = Tools::Option.new
|
42
|
-
ObjectSpace.define_finalizer(self, RRJ.method(:delete).to_proc) \
|
43
|
-
unless File.basename($PROGRAM_NAME).eql?('rspec')
|
44
42
|
rescue => error
|
45
43
|
raise Errors::RRJ::InstanciateGem, error
|
46
44
|
end
|
@@ -115,14 +113,5 @@ module RubyRabbitmqJanus
|
|
115
113
|
private
|
116
114
|
|
117
115
|
attr_reader :option
|
118
|
-
|
119
|
-
def self.delete(_id)
|
120
|
-
Tools::Cluster.instance.sessions.each do |janus_instance|
|
121
|
-
array_ji = "#{janus_instance.instance},#{janus_instance.session}"
|
122
|
-
`rake rrj:delete:one_instance[#{array_ji}]`
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
private_class_method :delete
|
127
116
|
end
|
128
117
|
end
|
@@ -13,11 +13,10 @@ module RubyRabbitmqJanus
|
|
13
13
|
class Concurrency
|
14
14
|
# Initialize class with elements for thread communication
|
15
15
|
def initialize
|
16
|
-
Tools::Log.instance.info
|
17
|
-
@rabbit = Rabbit::Connect.new
|
16
|
+
Tools::Log.instance.info info_thread
|
17
|
+
@rabbit = RubyRabbitmqJanus::Rabbit::Connect.new
|
18
18
|
@lock = Mutex.new
|
19
19
|
@condition = ConditionVariable.new
|
20
|
-
@thread = Thread.new { initialize_thread }
|
21
20
|
rescue
|
22
21
|
raise Errors::Janus::Concurencies::Initializer
|
23
22
|
end
|
@@ -31,11 +30,15 @@ module RubyRabbitmqJanus
|
|
31
30
|
@rabbit.close
|
32
31
|
end
|
33
32
|
|
34
|
-
|
33
|
+
def info_thread
|
34
|
+
"Create an thread -- #{self.class.name}"
|
35
|
+
end
|
36
|
+
|
37
|
+
attr_reader :lock, :condition, :rabbit
|
35
38
|
end
|
36
39
|
end
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|
40
|
-
require 'rrj/janus/processus/keepalive'
|
43
|
+
require 'rrj/janus/processus/keepalive/keepalive_initializer'
|
41
44
|
require 'rrj/janus/processus/event'
|
@@ -5,7 +5,7 @@ module RubyRabbitmqJanus
|
|
5
5
|
module Concurrencies
|
6
6
|
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
7
7
|
|
8
|
-
# # Listen
|
8
|
+
# # Listen public queue to all Janus instance
|
9
9
|
#
|
10
10
|
# Listen standard queue and sending a block code to thread listen.
|
11
11
|
# The default queue is configured in config file.
|
@@ -14,8 +14,9 @@ module RubyRabbitmqJanus
|
|
14
14
|
class Event < Concurrency
|
15
15
|
include Singleton
|
16
16
|
|
17
|
-
def
|
17
|
+
def initialize
|
18
18
|
super
|
19
|
+
@thread = Thread.new { initialize_thread }
|
19
20
|
rescue
|
20
21
|
raise Errors::Janus::Event::Initializer
|
21
22
|
end
|
@@ -28,9 +29,11 @@ module RubyRabbitmqJanus
|
|
28
29
|
#
|
29
30
|
# @return [Thread] It's a thread who listen queue and execute action
|
30
31
|
def run(&block)
|
31
|
-
thread.join
|
32
|
+
@thread.join
|
32
33
|
Thread.new do
|
33
|
-
loop
|
34
|
+
loop do
|
35
|
+
@thread.thread_variable_get(:publish).listen_events(&block)
|
36
|
+
end
|
34
37
|
end
|
35
38
|
rescue
|
36
39
|
raise Errors::Janus::Event::Run
|
@@ -40,7 +43,7 @@ module RubyRabbitmqJanus
|
|
40
43
|
|
41
44
|
def transaction_running
|
42
45
|
publisher = Rabbit::Publisher::Listener.new(rabbit)
|
43
|
-
|
46
|
+
@thread.thread_variable_set(:publish, publisher)
|
44
47
|
end
|
45
48
|
end
|
46
49
|
end
|