ruby_rabbitmq_janus 2.7.2.pre.312 → 2.7.2.pre.314
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rrj/models/active_record.rb +0 -8
- data/lib/rrj/models/mongoid.rb +0 -8
- data/lib/rrj/process/concurrency.rb +3 -3
- data/lib/rrj/tools/bin/init.rb +3 -29
- data/lib/rrj/tools/gem/config.rb +0 -1
- data/spec/ruby_rabbitmq_janus/models/janus_instance_definition_spec.rb +0 -4
- data/spec/ruby_rabbitmq_janus/models/janus_instance_spec.rb +0 -3
- metadata +1 -9
- data/lib/rrj/binary.rb +0 -47
- data/lib/rrj/process/keepalive/keepalive_initializer.rb +0 -74
- data/lib/rrj/process/keepalive/keepalive_message.rb +0 -57
- data/lib/rrj/process/keepalive/keepalive_thread.rb +0 -172
- data/lib/rrj/process/keepalive/keepalive_timer.rb +0 -77
- data/spec/ruby_rabbitmq_janus/process/concurrencies/keepalive_initializer_spec.rb +0 -13
- data/spec/ruby_rabbitmq_janus/process/concurrencies/keepalive_thread_spec.rb +0 -15
- data/spec/ruby_rabbitmq_janus/process/concurrencies/keepalive_timer_spec.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55ec8d50d1bce0633eaa064cfe14a12107e214423b133246d22a684edd6c52ce
|
4
|
+
data.tar.gz: 074e93f780f98a747ffdbeece4d5ec0f28fa2e898372a426546f9115f4f02506
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2407c36de8b7d0bee62bf06575e8ceaba9266d3481c332d9d15fd7d3861e42504c07fd40dac9271a156bc937cbf4c42ec84f4326b013ed22e981edfcb8ee9fae
|
7
|
+
data.tar.gz: c47053c454305a155a58ba6cacecef9fd0b7074e85d667fb8a264e061eaee3db1330c6aa3fbcf4134d07862c40da1937d631e5bd219624b57f82799a430965dc
|
@@ -9,8 +9,6 @@ module RubyRabbitmqJanus
|
|
9
9
|
# Store instance information for MongoID database
|
10
10
|
class JanusInstance < ::ActiveRecord::Base
|
11
11
|
include RubyRabbitmqJanus::Models::Instances
|
12
|
-
# include RubyRabbitmqJanus::Models::Methods
|
13
|
-
# include RubyRabbitmqJanus::Models::Callbacks
|
14
12
|
include RubyRabbitmqJanus::Models::Validations
|
15
13
|
|
16
14
|
self.primary_key = :id
|
@@ -18,12 +16,6 @@ module RubyRabbitmqJanus
|
|
18
16
|
alias_attribute :instance, :id
|
19
17
|
alias_attribute :title, :name
|
20
18
|
alias_attribute :session_id, :session
|
21
|
-
alias_attribute :thread_id, :thread
|
22
|
-
alias_attribute :thread_id_adm, :thread_adm
|
23
|
-
|
24
|
-
# after_create { callback_create_after }
|
25
|
-
# after_update { callback_update_after }
|
26
|
-
# after_destroy { callback_destroy_after }
|
27
19
|
|
28
20
|
# Update attributes to document
|
29
21
|
#
|
data/lib/rrj/models/mongoid.rb
CHANGED
@@ -8,21 +8,13 @@ module RubyRabbitmqJanus
|
|
8
8
|
class JanusInstance
|
9
9
|
include Mongoid::Document
|
10
10
|
include RubyRabbitmqJanus::Models::Instances
|
11
|
-
# include RubyRabbitmqJanus::Models::Methods
|
12
|
-
# include RubyRabbitmqJanus::Models::Callbacks
|
13
11
|
include RubyRabbitmqJanus::Models::Validations
|
14
12
|
|
15
13
|
field :name, type: String, as: :title
|
16
14
|
field :session, type: Integer, as: :session_id
|
17
15
|
field :enable, type: Boolean
|
18
|
-
field :thread, type: Integer, as: :thread_id
|
19
|
-
field :thread_adm, type: Integer, as: :thread_id_adm
|
20
16
|
|
21
17
|
alias_attribute :instance, :_id
|
22
|
-
|
23
|
-
# set_callback(:create, :after) { callback_create_after }
|
24
|
-
# set_callback(:update, :after) { callback_update_after }
|
25
|
-
# set_callback(:destroy, :after) { callback_destroy_after }
|
26
18
|
end
|
27
19
|
end
|
28
20
|
end
|
@@ -8,8 +8,9 @@ module RubyRabbitmqJanus
|
|
8
8
|
#
|
9
9
|
# # Class for manage threads
|
10
10
|
#
|
11
|
-
# @abstract Manage thread
|
12
|
-
#
|
11
|
+
# @abstract Manage thread for listener to queue :
|
12
|
+
# from-janus
|
13
|
+
# from-janus-admin
|
13
14
|
class Concurrency
|
14
15
|
# Initialize class with elements for thread communication
|
15
16
|
def initialize
|
@@ -40,6 +41,5 @@ module RubyRabbitmqJanus
|
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
43
|
-
require 'rrj/process/keepalive/keepalive_initializer'
|
44
44
|
require 'rrj/process/event'
|
45
45
|
require 'rrj/process/event_admin'
|
data/lib/rrj/tools/bin/init.rb
CHANGED
@@ -1,32 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
# then initialize binary
|
3
|
+
require 'rrj/rails' if defined?(::Rails::Engine)
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
begin
|
10
|
-
# bin = RubyRabbitmqJanus::Binary.new
|
11
|
-
# Log.info \
|
12
|
-
# 'Prepare to listen events in queue : ' + \
|
13
|
-
# RubyRabbitmqJanus::Tools::Config.instance.queue_janus_instance
|
14
|
-
# rabbit = RubyRabbitmqJanus::Rabbit::Connect.new
|
15
|
-
# rabbit.start
|
16
|
-
# listener = RubyRabbitmqJanus::Rabbit::Listener::JanusInstance.new(rabbit)
|
17
|
-
# Log.info 'Loop events provided by Janus queues'
|
18
|
-
# loop do
|
19
|
-
# listener.listen_events do |event, response|
|
20
|
-
# Log.debug "Event : #{event}"
|
21
|
-
# Log.debug "Response : #{response.to_hash}"
|
22
|
-
# bin.update_instance(response.to_hash)
|
23
|
-
# end
|
24
|
-
# end
|
25
|
-
|
26
|
-
Log.info 'Listen Public queue to Janus'
|
27
|
-
loop {}
|
28
|
-
rescue => exception
|
29
|
-
Log.fatal '!! Fail to start RRJ Thread Janus Instance management !!'
|
30
|
-
Log.fatal exception
|
31
|
-
exit 1
|
32
|
-
end
|
5
|
+
Log.info 'Listen Public queue to Janus'
|
6
|
+
loop {}
|
data/lib/rrj/tools/gem/config.rb
CHANGED
@@ -8,7 +8,6 @@ require 'erb'
|
|
8
8
|
%w[gem rabbit queues janus].each do |file|
|
9
9
|
require File.join('rrj', 'tools', 'gem', 'config', file)
|
10
10
|
end
|
11
|
-
# %w[callbacks methods instances validations].each do |file|
|
12
11
|
%w[instances validations].each do |file|
|
13
12
|
require File.join('rrj', 'models', 'concerns', file)
|
14
13
|
end
|
@@ -9,8 +9,6 @@ describe RubyRabbitmqJanus::Models::JanusInstance, type: :model,
|
|
9
9
|
{
|
10
10
|
'id' => '_id',
|
11
11
|
'session_id' => 'session',
|
12
|
-
'thread_id' => 'thread',
|
13
|
-
'thread_id_adm' => 'thread_adm',
|
14
12
|
'instance' => '_id',
|
15
13
|
'title' => 'name'
|
16
14
|
}
|
@@ -19,8 +17,6 @@ describe RubyRabbitmqJanus::Models::JanusInstance, type: :model,
|
|
19
17
|
{
|
20
18
|
'instance' => 'id',
|
21
19
|
'session_id' => 'session',
|
22
|
-
'thread_id_adm' => 'thread_adm',
|
23
|
-
'thread_id' => 'thread',
|
24
20
|
'title' => 'name'
|
25
21
|
}
|
26
22
|
end
|
@@ -36,7 +36,6 @@ describe RubyRabbitmqJanus::Models::JanusInstance, type: :model,
|
|
36
36
|
|
37
37
|
it { expect(model.count).to eq(6) }
|
38
38
|
it { expect(model.enabled.count).to eq(1) }
|
39
|
-
it { expect(model.find_by_session(one.session).thread).to eq(one.thread) }
|
40
39
|
it { expect(model.find_by_instance(one.instance).session).to eq(one.session) }
|
41
40
|
end
|
42
41
|
|
@@ -47,7 +46,6 @@ describe RubyRabbitmqJanus::Models::JanusInstance, type: :model,
|
|
47
46
|
it { expect(janus.session).to be_nil }
|
48
47
|
it { expect(janus.enable).to be_a(TrueClass) }
|
49
48
|
it { expect(janus.enable).to eq(true) }
|
50
|
-
it { expect(janus.thread).to be_nil }
|
51
49
|
end
|
52
50
|
|
53
51
|
context 'when Janus Instance disable' do
|
@@ -57,6 +55,5 @@ describe RubyRabbitmqJanus::Models::JanusInstance, type: :model,
|
|
57
55
|
it { expect(janus.session).to be_nil }
|
58
56
|
it { expect(janus.enable).to be_a(FalseClass) }
|
59
57
|
it { expect(janus.enable).to eq(false) }
|
60
|
-
it { expect(janus.thread).to be_nil }
|
61
58
|
end
|
62
59
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_rabbitmq_janus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.7.2.pre.
|
4
|
+
version: 2.7.2.pre.314
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- VAILLANT Jeremy
|
@@ -440,7 +440,6 @@ files:
|
|
440
440
|
- lib/generators/ruby_rabbitmq_janus/templates/initializer.rb
|
441
441
|
- lib/generators/ruby_rabbitmq_janus/templates/migration.rb
|
442
442
|
- lib/rrj/admin.rb
|
443
|
-
- lib/rrj/binary.rb
|
444
443
|
- lib/rrj/errors/base/admin.rb
|
445
444
|
- lib/rrj/errors/base/base.rb
|
446
445
|
- lib/rrj/errors/base/init.rb
|
@@ -512,10 +511,6 @@ files:
|
|
512
511
|
- lib/rrj/process/concurrency.rb
|
513
512
|
- lib/rrj/process/event.rb
|
514
513
|
- lib/rrj/process/event_admin.rb
|
515
|
-
- lib/rrj/process/keepalive/keepalive_initializer.rb
|
516
|
-
- lib/rrj/process/keepalive/keepalive_message.rb
|
517
|
-
- lib/rrj/process/keepalive/keepalive_thread.rb
|
518
|
-
- lib/rrj/process/keepalive/keepalive_timer.rb
|
519
514
|
- lib/rrj/rabbit/base_event.rb
|
520
515
|
- lib/rrj/rabbit/connect.rb
|
521
516
|
- lib/rrj/rabbit/listener/base.rb
|
@@ -611,9 +606,6 @@ files:
|
|
611
606
|
- spec/ruby_rabbitmq_janus/models/janus_instance_definition_spec.rb
|
612
607
|
- spec/ruby_rabbitmq_janus/models/janus_instance_spec.rb
|
613
608
|
- spec/ruby_rabbitmq_janus/process/concurrencies/concurrency_spec.rb
|
614
|
-
- spec/ruby_rabbitmq_janus/process/concurrencies/keepalive_initializer_spec.rb
|
615
|
-
- spec/ruby_rabbitmq_janus/process/concurrencies/keepalive_thread_spec.rb
|
616
|
-
- spec/ruby_rabbitmq_janus/process/concurrencies/keepalive_timer_spec.rb
|
617
609
|
- spec/ruby_rabbitmq_janus/rabbit/connect_spec.rb
|
618
610
|
- spec/ruby_rabbitmq_janus/rabbit/listener/from_spec.rb
|
619
611
|
- spec/ruby_rabbitmq_janus/rabbit/propertie_2_spec.rb
|
data/lib/rrj/binary.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RubyRabbitmqJanus
|
4
|
-
# :reek:InstanceVariableAssumption
|
5
|
-
|
6
|
-
# # RubyRabbitmqJanus Bynary
|
7
|
-
#
|
8
|
-
# Initialize tools for a standalone executable
|
9
|
-
# This class start all tool mandatory for
|
10
|
-
# survey new message about JanusInstance change state.
|
11
|
-
#
|
12
|
-
# When status enable change update document in database
|
13
|
-
# if enable become true a new session with janus is created
|
14
|
-
class Binary
|
15
|
-
def initialize
|
16
|
-
start_instances
|
17
|
-
end
|
18
|
-
|
19
|
-
def update_instance(data)
|
20
|
-
enable = data['enable']
|
21
|
-
@ji = RubyRabbitmqJanus::Models::JanusInstance.find(data['id'])
|
22
|
-
|
23
|
-
::Log.info 'Update Janus Instance ...'
|
24
|
-
enable ? start_instance : stop_instance
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def start_instances
|
30
|
-
::Log.info 'Search Janus Instance'
|
31
|
-
instances = RubyRabbitmqJanus::Models::JanusInstance.enabled
|
32
|
-
|
33
|
-
::Log.info "Find [#{instances.count}] instance(s) enable"
|
34
|
-
instances.each(&:create_keepalive) unless instances.empty?
|
35
|
-
end
|
36
|
-
|
37
|
-
def start_instance
|
38
|
-
::Log.info "... create a session to Janus Instance with id : #{@ji.id}"
|
39
|
-
@ji.create_keepalive
|
40
|
-
end
|
41
|
-
|
42
|
-
def stop_instance
|
43
|
-
::Log.info "... stop a session to Janus Instance with ID : #{@ji.id}"
|
44
|
-
@ji.stop_keepalive
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rrj/process/keepalive/keepalive_timer'
|
4
|
-
require 'rrj/process/keepalive/keepalive_message'
|
5
|
-
require 'rrj/process/keepalive/keepalive_thread'
|
6
|
-
|
7
|
-
module RubyRabbitmqJanus
|
8
|
-
module Process
|
9
|
-
module Concurrencies
|
10
|
-
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
11
|
-
#
|
12
|
-
# # Manage keepalive message
|
13
|
-
#
|
14
|
-
# Create a thread for sending a message with type keepalive to session
|
15
|
-
# created by this instanciate gem
|
16
|
-
class KeepaliveInitializer < Concurrency
|
17
|
-
# Initialize a singleton object for sending keepalive to janus
|
18
|
-
def initialize(instance)
|
19
|
-
super()
|
20
|
-
@thread = KeepaliveThread.new(instance, rabbit) { initialize_thread }
|
21
|
-
rescue
|
22
|
-
raise Errors::Process::KeepaliveInitializer::Initializer
|
23
|
-
end
|
24
|
-
|
25
|
-
# Get thread with Ruby ID
|
26
|
-
def self.thread(thread)
|
27
|
-
ObjectSpace._id2ref(thread)
|
28
|
-
rescue RangeError
|
29
|
-
raise Errors::Process::KeepaliveInitializer::ID2Ref, thread
|
30
|
-
end
|
31
|
-
|
32
|
-
# Give a session Integer his gem is instantiate.
|
33
|
-
# Is waiting a thread return a response to message created sending.
|
34
|
-
#
|
35
|
-
# @example Ask session
|
36
|
-
# KeepaliveInitializer.new(123).session
|
37
|
-
# => 852803383803249
|
38
|
-
#
|
39
|
-
# @return [Fixnum] Identifier to session created by Janus
|
40
|
-
def session
|
41
|
-
@thread.timer.session do
|
42
|
-
lock.synchronize do
|
43
|
-
condition.wait(lock)
|
44
|
-
@thread.session
|
45
|
-
end
|
46
|
-
end
|
47
|
-
rescue
|
48
|
-
raise Errors::Process::KeepaliveInitializer::Session
|
49
|
-
end
|
50
|
-
|
51
|
-
# Ask Object ID to thread managing keepalive message
|
52
|
-
#
|
53
|
-
# @example Ask ID
|
54
|
-
# KeepaliveInitializer.new(123).thread
|
55
|
-
# => 70233080652140
|
56
|
-
#
|
57
|
-
# @return [Integer] Identifier to thread in Ruby
|
58
|
-
def thread_id
|
59
|
-
@thread.__id__
|
60
|
-
rescue
|
61
|
-
raise Errors::Process::KeepaliveInitializer::Thread
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
def transaction_running
|
67
|
-
@thread.initialize_janus_session
|
68
|
-
lock.synchronize { condition.signal }
|
69
|
-
@thread.start
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# :reek:UtilityFunction
|
4
|
-
|
5
|
-
module RubyRabbitmqJanus
|
6
|
-
module Process
|
7
|
-
module Concurrencies
|
8
|
-
# Manage message used for keepalive thread
|
9
|
-
#
|
10
|
-
# @attribute [r] instance
|
11
|
-
# @return [String] ID to Janus Instance
|
12
|
-
class KeepaliveMessage
|
13
|
-
attr_reader :instance
|
14
|
-
|
15
|
-
def initialize(instance)
|
16
|
-
@instance = instance.id
|
17
|
-
end
|
18
|
-
|
19
|
-
def session
|
20
|
-
Janus::Messages::Standard.new('base::create', param_instance)
|
21
|
-
end
|
22
|
-
|
23
|
-
def response_session(message)
|
24
|
-
RubyRabbitmqJanus::Janus::Responses::Standard.new(message).session
|
25
|
-
end
|
26
|
-
|
27
|
-
def keepalive(session)
|
28
|
-
parameter = param_session(session)
|
29
|
-
Janus::Messages::Standard.new('base::keepalive', parameter)
|
30
|
-
end
|
31
|
-
|
32
|
-
def response_acknowledgement(message)
|
33
|
-
RubyRabbitmqJanus::Janus::Responses::Standard.new(message).error?
|
34
|
-
end
|
35
|
-
|
36
|
-
def destroy(session)
|
37
|
-
parameter = param_session(session)
|
38
|
-
Janus::Messages::Standard.new('base::destroy', parameter)
|
39
|
-
end
|
40
|
-
|
41
|
-
def response_destroy(message)
|
42
|
-
RubyRabbitmqJanus::Janus::Responses::Standard.new(message)
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def param_instance
|
48
|
-
{ 'instance' => @instance }
|
49
|
-
end
|
50
|
-
|
51
|
-
def param_session(session)
|
52
|
-
{ 'session_id' => session }.merge(param_instance)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
@@ -1,172 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# rubocop:disable Metrics/ClassLength
|
4
|
-
# rubocop:disable Metrics/MethodLength
|
5
|
-
|
6
|
-
# :reek:TooManyInstanceVariables
|
7
|
-
# :reek:TooManyStatements
|
8
|
-
# :reek:UncommunicativeVariableName
|
9
|
-
# :reek:TooManyMethods
|
10
|
-
|
11
|
-
module RubyRabbitmqJanus
|
12
|
-
module Process
|
13
|
-
module Concurrencies
|
14
|
-
# Object thread for manage keep a live with Janus Instance
|
15
|
-
#
|
16
|
-
# @!attribute [r] session
|
17
|
-
# @return [Integer] Number to session linked to Janus Instance
|
18
|
-
class KeepaliveThread < Thread
|
19
|
-
attr_reader :timer, :session
|
20
|
-
|
21
|
-
def initialize(instance, rabbit, &block)
|
22
|
-
@publisher = @session = nil
|
23
|
-
@rabbit = rabbit
|
24
|
-
@timer = KeepaliveTimer.new
|
25
|
-
@message = KeepaliveMessage.new(instance)
|
26
|
-
instance.set(thread: __id__)
|
27
|
-
::Log.info "Keepalive thread id is #{__id__}"
|
28
|
-
super(&block)
|
29
|
-
rescue
|
30
|
-
raise Errors::Process::KeepaliveThread::Initializer
|
31
|
-
end
|
32
|
-
|
33
|
-
# Initialize a transaction with Janus Instance.
|
34
|
-
# Create a session and save response
|
35
|
-
def initialize_janus_session
|
36
|
-
@publisher = publisher
|
37
|
-
@session = response_session
|
38
|
-
rescue
|
39
|
-
raise Errors::Process::KeepaliveThread::InitializeJanusSession
|
40
|
-
end
|
41
|
-
|
42
|
-
# Restart session
|
43
|
-
# :reek:TooManyStatements
|
44
|
-
def restart_session
|
45
|
-
::Log.warn 'Restart session ...'
|
46
|
-
janus = find_model
|
47
|
-
if janus.present?
|
48
|
-
send_messages_restart
|
49
|
-
janus.set(session: @session)
|
50
|
-
else
|
51
|
-
::Log.error 'Janus Instance Model is gone, giving up'
|
52
|
-
end
|
53
|
-
rescue
|
54
|
-
raise Errors::Process::KeepaliveThread::RestartSession
|
55
|
-
end
|
56
|
-
|
57
|
-
# Start a timer for TTL
|
58
|
-
# rubocop:disable Metrics/AbcSize
|
59
|
-
# :reek:TooManyStatements
|
60
|
-
def start
|
61
|
-
@timer.loop_keepalive do
|
62
|
-
if detached?(find_model)
|
63
|
-
::Log.info \
|
64
|
-
"Thread #{__id__} no longer attached to Janus Instance, " \
|
65
|
-
'exiting...'
|
66
|
-
@timer.stop_timer
|
67
|
-
cleanup
|
68
|
-
exit
|
69
|
-
else
|
70
|
-
::Log.info msg_send_ttl(__id__,
|
71
|
-
@message.instance,
|
72
|
-
@timer.time_to_live)
|
73
|
-
response_keepalive
|
74
|
-
end
|
75
|
-
end
|
76
|
-
rescue
|
77
|
-
raise Errors::Process::KeepaliveThread::Start
|
78
|
-
end
|
79
|
-
# rubocop:enable Metrics/AbcSize
|
80
|
-
|
81
|
-
# Kill session and disable instance
|
82
|
-
def kill
|
83
|
-
cleanup
|
84
|
-
super
|
85
|
-
rescue
|
86
|
-
raise Errors::Process::KeepaliveThread::Kill
|
87
|
-
end
|
88
|
-
|
89
|
-
# :reek:TooManyStatements
|
90
|
-
def instance_is_down
|
91
|
-
janus = find_model
|
92
|
-
@session = @message = nil
|
93
|
-
if detached?(janus)
|
94
|
-
::Log.error\
|
95
|
-
"Thread [#{__id__}] no longer attached to Janus Instance " \
|
96
|
-
'(should be dead).'
|
97
|
-
else
|
98
|
-
janus.set(enable: false).unset(%I[thread session])
|
99
|
-
::Log.fatal \
|
100
|
-
"Janus Instance [#{janus.instance}] is down, " \
|
101
|
-
"thread [#{__id__}] will die."
|
102
|
-
end
|
103
|
-
rescue
|
104
|
-
raise Errors::Process::KeepaliveThread::InstanceIsDown
|
105
|
-
end
|
106
|
-
|
107
|
-
private
|
108
|
-
|
109
|
-
attr_reader :instance
|
110
|
-
|
111
|
-
def send_messages_restart
|
112
|
-
@session = response_session
|
113
|
-
response_keepalive
|
114
|
-
end
|
115
|
-
|
116
|
-
def cleanup
|
117
|
-
response_destroy if @session.present? && @message.present?
|
118
|
-
@rabbit.close
|
119
|
-
end
|
120
|
-
|
121
|
-
def find_model
|
122
|
-
if @message.present?
|
123
|
-
Models::JanusInstance.find(@message.instance)
|
124
|
-
else
|
125
|
-
::Log.warn \
|
126
|
-
"Lookup Janus Instance model by session [#{@session}]"
|
127
|
-
Models::JanusInstance.find_by_session(@session)
|
128
|
-
end
|
129
|
-
rescue StandardError => exception
|
130
|
-
::Log.debug exception
|
131
|
-
::Log.warn \
|
132
|
-
"find_model: rescuing from error #{e.message}"
|
133
|
-
nil
|
134
|
-
end
|
135
|
-
|
136
|
-
# :reek:FeatureEnvy
|
137
|
-
def detached?(janus)
|
138
|
-
janus.blank? || janus.thread != __id__
|
139
|
-
end
|
140
|
-
|
141
|
-
def publisher
|
142
|
-
Rabbit::Publisher::Keepalive.new(@rabbit.channel)
|
143
|
-
end
|
144
|
-
|
145
|
-
def response_session
|
146
|
-
@message.response_session(publish(@message.session))
|
147
|
-
end
|
148
|
-
|
149
|
-
def response_keepalive
|
150
|
-
keepalive = @message.keepalive(@session)
|
151
|
-
@message.response_acknowledgement(publish(keepalive))
|
152
|
-
end
|
153
|
-
|
154
|
-
def response_destroy
|
155
|
-
destroy = @message.destroy(@session)
|
156
|
-
@message.response_destroy(publish(destroy))
|
157
|
-
end
|
158
|
-
|
159
|
-
def publish(message)
|
160
|
-
@publisher.publish(message)
|
161
|
-
end
|
162
|
-
|
163
|
-
def msg_send_ttl(id, inst, ttl)
|
164
|
-
"Thread #{id} sending keepalive to instance #{inst} with TTL #{ttl}"
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
# rubocop:enable Metrics/ClassLength
|
172
|
-
# rubocop:enable Metrics/MethodLength
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'timeout'
|
4
|
-
require 'timers'
|
5
|
-
|
6
|
-
# :reek:DuplicateMethodCall
|
7
|
-
|
8
|
-
module RubyRabbitmqJanus
|
9
|
-
module Process
|
10
|
-
module Concurrencies
|
11
|
-
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
12
|
-
#
|
13
|
-
# # Manage time for thread
|
14
|
-
#
|
15
|
-
# Configure all timer used in keepalive class
|
16
|
-
#
|
17
|
-
# @!attribute [r] time_to_live
|
18
|
-
# @return [Integer] Time for interval between keepalive message
|
19
|
-
# @!attribute [r] time_to_die
|
20
|
-
# @return [Integer] Time before timer stop it
|
21
|
-
class KeepaliveTimer
|
22
|
-
attr_reader :time_to_live, :time_to_die
|
23
|
-
|
24
|
-
# Initialize timer to keeaplive thread.
|
25
|
-
def initialize
|
26
|
-
@time_to_live = Tools::Config.instance.ttl
|
27
|
-
@time_to_die = test_time_to_die >= 60 ? 59 : test_time_to_die
|
28
|
-
@timers = Timers::Group.new
|
29
|
-
@timer = nil
|
30
|
-
rescue
|
31
|
-
raise Errors::Process::KeepaliveTimer::Initializer
|
32
|
-
end
|
33
|
-
|
34
|
-
# Execute a loop with timer for sending keepalive message
|
35
|
-
# to Janus Instance
|
36
|
-
def loop_keepalive(&block)
|
37
|
-
@timer = @timers.now_and_every(@time_to_live) { prepare_loop(&block) }
|
38
|
-
loop { @timers.wait }
|
39
|
-
rescue
|
40
|
-
raise Errors::Process::KeepaliveTimer::LoopKeepalive
|
41
|
-
end
|
42
|
-
|
43
|
-
# Test if session is present/exist in Janus Instance
|
44
|
-
def session(&block)
|
45
|
-
Timeout.timeout(@time_to_die) { yield }
|
46
|
-
rescue Timeout::Error
|
47
|
-
block.binding.receiver.instance_is_down
|
48
|
-
rescue
|
49
|
-
raise Errors::Process::KeepaliveTimer::Session
|
50
|
-
end
|
51
|
-
|
52
|
-
# Stop timer to keepalive thread
|
53
|
-
def stop_timer
|
54
|
-
@timer.cancel
|
55
|
-
@timer = nil
|
56
|
-
rescue
|
57
|
-
raise Errors::Process::KeepaliveTimer::StopTimer
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
|
62
|
-
# :reek:FeatureEnvy
|
63
|
-
def prepare_loop(&block)
|
64
|
-
Timeout.timeout(@time_to_die) do
|
65
|
-
block.binding.receiver.restart_session if yield
|
66
|
-
end
|
67
|
-
rescue Timeout::Error
|
68
|
-
block.binding.receiver.instance_is_down
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_time_to_die
|
72
|
-
@time_to_live + 5
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RubyRabbitmqJanus::Process::Concurrencies::KeepaliveInitializer, type: :thread, name: :keepalive_initializer do
|
6
|
-
let(:instance) { RubyRabbitmqJanus::Models::JanusInstance.find((ENV['MONGO'].match?('true') ? %w[1 2] : [1, 2]).sample) }
|
7
|
-
let(:concurrency) { described_class.new(instance) }
|
8
|
-
|
9
|
-
it { expect(concurrency.send(:rabbit)).to be_a(RubyRabbitmqJanus::Rabbit::Connect) }
|
10
|
-
it { expect(concurrency.send(:lock)).to be_a(Mutex) }
|
11
|
-
it { expect(concurrency.send(:condition)).to be_a(ConditionVariable) }
|
12
|
-
it { expect(concurrency.instance_variable_get(:@thread)).to be_a(RubyRabbitmqJanus::Process::Concurrencies::KeepaliveThread) }
|
13
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RubyRabbitmqJanus::Process::Concurrencies::KeepaliveThread, type: :thread, name: :keepalive_thread do
|
6
|
-
let(:instance) { RubyRabbitmqJanus::Models::JanusInstance.find((ENV['MONGO'].match?('true') ? %w[1 2] : [1, 2]).sample) }
|
7
|
-
let(:rabbit) { RubyRabbitmqJanus::Process::Concurrencies::Concurrency.new.send(:rabbit) }
|
8
|
-
let(:concurrency) { described_class.new(instance, rabbit) { nil } }
|
9
|
-
|
10
|
-
it { expect(concurrency.instance_variable_get(:@session)).to be(nil) }
|
11
|
-
it { expect(concurrency.instance_variable_get(:@publisher)).to be(nil) }
|
12
|
-
it { expect(concurrency.instance_variable_get(:@rabbit)).to be_a(RubyRabbitmqJanus::Rabbit::Connect) }
|
13
|
-
it { expect(concurrency.instance_variable_get(:@timer)).to be_a(RubyRabbitmqJanus::Process::Concurrencies::KeepaliveTimer) }
|
14
|
-
it { expect(concurrency.instance_variable_get(:@message)).to be_a(RubyRabbitmqJanus::Process::Concurrencies::KeepaliveMessage) }
|
15
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe RubyRabbitmqJanus::Process::Concurrencies::KeepaliveTimer, type: :thread, name: :keepalive_timer do
|
6
|
-
let(:concurrency) { described_class.new }
|
7
|
-
|
8
|
-
it { expect(concurrency.send(:time_to_live)).to be_a(Integer) }
|
9
|
-
it { expect(concurrency.send(:time_to_die)).to be_a(Integer) }
|
10
|
-
it { expect(concurrency.instance_variable_get(:@timers)).to be_a(Timers::Group) }
|
11
|
-
it { expect(concurrency.instance_variable_get(:@time_to_live)).to eql(RubyRabbitmqJanus::Tools::Config.instance.options['janus']['session']['keepalive']) }
|
12
|
-
end
|