ruby_rabbitmq_janus 2.0.0 → 2.1.0.pre.128

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -3
  3. data/Rakefile +98 -0
  4. data/config/default.md +6 -3
  5. data/config/default.yml +7 -1
  6. data/lib/generators/ruby_rabbitmq_janus/install_generator.rb +3 -0
  7. data/lib/generators/ruby_rabbitmq_janus/migration_generator.rb +30 -0
  8. data/lib/generators/ruby_rabbitmq_janus/templates/migration.rb +14 -0
  9. data/lib/rrj/admin.rb +2 -0
  10. data/lib/rrj/errors/base/admin.rb +24 -0
  11. data/lib/rrj/errors/base/base.rb +5 -0
  12. data/lib/rrj/errors/base/init.rb +46 -0
  13. data/lib/rrj/errors/base/task.rb +32 -0
  14. data/lib/rrj/errors/error.rb +4 -3
  15. data/lib/rrj/errors/janus/janus.rb +20 -7
  16. data/lib/rrj/errors/janus/messages/admin.rb +33 -0
  17. data/lib/rrj/errors/janus/messages/message.rb +51 -0
  18. data/lib/rrj/errors/janus/messages/standard.rb +33 -0
  19. data/lib/rrj/errors/janus/processus/concurency.rb +23 -0
  20. data/lib/rrj/errors/janus/processus/event.rb +30 -0
  21. data/lib/rrj/errors/janus/processus/keepalive.rb +33 -0
  22. data/lib/rrj/errors/janus/responses/admin.rb +39 -0
  23. data/lib/rrj/errors/janus/responses/event.rb +46 -0
  24. data/lib/rrj/errors/janus/responses/response.rb +44 -0
  25. data/lib/rrj/errors/janus/responses/standard.rb +58 -0
  26. data/lib/rrj/errors/janus/transactions/admin.rb +37 -0
  27. data/lib/rrj/errors/janus/transactions/handle.rb +52 -0
  28. data/lib/rrj/errors/janus/transactions/session.rb +38 -0
  29. data/lib/rrj/errors/janus/transactions/transaction.rb +23 -0
  30. data/lib/rrj/errors/rabbit/connect.rb +58 -0
  31. data/lib/rrj/errors/rabbit/propertie.rb +37 -0
  32. data/lib/rrj/errors/rabbit/publish/admin.rb +30 -0
  33. data/lib/rrj/errors/rabbit/publish/base_publisher.rb +23 -0
  34. data/lib/rrj/errors/rabbit/publish/exclusive.rb +31 -0
  35. data/lib/rrj/errors/rabbit/publish/listener.rb +30 -0
  36. data/lib/rrj/errors/rabbit/publish/non_exclusive.rb +31 -0
  37. data/lib/rrj/errors/rabbit/publish/publisher.rb +30 -0
  38. data/lib/rrj/errors/rabbit/rabbit.rb +14 -23
  39. data/lib/rrj/errors/tools/gem/cluster.rb +44 -0
  40. data/lib/rrj/errors/tools/gem/config.rb +89 -0
  41. data/lib/rrj/errors/tools/gem/log.rb +86 -0
  42. data/lib/rrj/errors/tools/gem/option.rb +37 -0
  43. data/lib/rrj/errors/tools/gem/request.rb +23 -0
  44. data/lib/rrj/errors/tools/replaces/replace.rb +30 -0
  45. data/lib/rrj/errors/tools/replaces/type.rb +30 -0
  46. data/lib/rrj/errors/tools/tools.rb +21 -1
  47. data/lib/rrj/info.rb +1 -1
  48. data/lib/rrj/init.rb +22 -4
  49. data/lib/rrj/janus/messages/admin.rb +9 -4
  50. data/lib/rrj/janus/messages/message.rb +20 -9
  51. data/lib/rrj/janus/messages/standard.rb +8 -2
  52. data/lib/rrj/janus/processus/concurrency.rb +2 -0
  53. data/lib/rrj/janus/processus/event.rb +8 -0
  54. data/lib/rrj/janus/processus/keepalive.rb +15 -23
  55. data/lib/rrj/janus/responses/admin.rb +6 -0
  56. data/lib/rrj/janus/responses/event.rb +8 -0
  57. data/lib/rrj/janus/responses/response.rb +8 -11
  58. data/lib/rrj/janus/responses/standard.rb +12 -0
  59. data/lib/rrj/janus/transactions/admin.rb +6 -0
  60. data/lib/rrj/janus/transactions/handle.rb +25 -3
  61. data/lib/rrj/janus/transactions/session.rb +6 -0
  62. data/lib/rrj/janus/transactions/transaction.rb +3 -9
  63. data/lib/rrj/models/active_record.rb +14 -0
  64. data/lib/rrj/models/concerns/janus_instance_concern.rb +47 -0
  65. data/lib/rrj/models/mongoid.rb +19 -0
  66. data/lib/rrj/rabbit/connect.rb +12 -8
  67. data/lib/rrj/rabbit/propertie.rb +23 -6
  68. data/lib/rrj/rabbit/publish/admin.rb +4 -0
  69. data/lib/rrj/rabbit/publish/base_publisher.rb +2 -1
  70. data/lib/rrj/rabbit/publish/exclusive.rb +4 -0
  71. data/lib/rrj/rabbit/publish/listener.rb +6 -0
  72. data/lib/rrj/rabbit/publish/non_exclusive.rb +4 -0
  73. data/lib/rrj/rabbit/publish/publisher.rb +4 -4
  74. data/lib/rrj/railtie.rb +15 -0
  75. data/lib/rrj/task.rb +51 -0
  76. data/lib/rrj/tools/gem/cluster.rb +65 -0
  77. data/lib/rrj/tools/gem/config.rb +38 -6
  78. data/lib/rrj/tools/gem/log.rb +24 -4
  79. data/lib/rrj/tools/gem/option.rb +21 -17
  80. data/lib/rrj/tools/gem/requests.rb +11 -7
  81. data/lib/rrj/tools/replaces/replace.rb +4 -0
  82. data/lib/rrj/tools/replaces/type.rb +4 -0
  83. data/lib/rrj/tools/tools.rb +1 -0
  84. data/lib/ruby_rabbitmq_janus.rb +3 -0
  85. data/lib/tasks/delete_all_instance.rake +12 -0
  86. data/spec/request/admin/request_handle_info_spec.rb +4 -3
  87. data/spec/request/admin/request_handles_spec.rb +4 -3
  88. data/spec/request/peer/request_trickle_spec.rb +1 -1
  89. data/spec/rrj/rabbit/propertie_spec.rb +37 -2
  90. data/spec/rrj/tools/gem/rrj_cluster_spec.rb +26 -0
  91. data/spec/rrj/tools/gem/rrj_config_spec.rb +78 -0
  92. data/spec/rrj/tools/gem/rrj_log_spec.rb +55 -0
  93. data/spec/rrj/tools/{replace_admin_spec.rb → replace/replace_admin_spec.rb} +0 -0
  94. data/spec/rrj/tools/{replace_handle_spec.rb → replace/replace_handle_spec.rb} +0 -0
  95. data/spec/rrj/tools/{replace_session_spec.rb → replace/replace_session_spec.rb} +0 -0
  96. data/spec/rrj/tools/{replace_spec.rb → replace/replace_spec.rb} +0 -0
  97. data/spec/rrj/tools/{type_spec.rb → replace/type_spec.rb} +0 -0
  98. data/spec/spec_helper.rb +33 -2
  99. data/spec/support/examples_config.rb +10 -0
  100. data/spec/support/examples_message.rb +0 -2
  101. data/spec/support/examples_request.rb +4 -4
  102. data/spec/support/schemas/config/config.json +4 -2
  103. data/spec/support/schemas/config/rabbit_options.json +1 -1
  104. data/spec/support/schemas/config/rabbit_options2.json +13 -0
  105. data/spec/support/schemas/config/rabbit_options_admin.json +1 -1
  106. data/spec/support/schemas/config/rabbit_options_admin2.json +13 -0
  107. metadata +98 -17
  108. data/lib/rrj/errors/init.rb +0 -69
  109. data/lib/rrj/errors/janus/janus_message.rb +0 -53
  110. data/lib/rrj/errors/janus/janus_processus_keepalive.rb +0 -48
  111. data/lib/rrj/errors/janus/janus_response.rb +0 -89
  112. data/lib/rrj/errors/janus/janus_transaction.rb +0 -29
  113. data/lib/rrj/errors/tools/config.rb +0 -43
  114. data/spec/rrj/rrj_config_spec.rb +0 -67
  115. data/spec/rrj/rrj_log_spec.rb +0 -16
@@ -12,19 +12,20 @@ module RubyRabbitmqJanus
12
12
  #
13
13
  # @see https://ruby-doc.org/stdlib-2.4.0/libdoc/singleton/rdoc/Singleton.html
14
14
  class Keepalive < Concurrency
15
- include Singleton
16
-
17
15
  # Initialize a singleton object for sending keepalive to janus
18
- def initialize
16
+ def initialize(instance)
19
17
  @pub = @session = nil
20
- super
18
+ @instance = instance
19
+ super()
20
+ rescue
21
+ raise Errors::Janus::Keepalive::Initializer
21
22
  end
22
23
 
23
24
  # Give a session Integer created when this gem is intanciate.
24
25
  # Is waiting a thread return a response to message created sending.
25
26
  #
26
27
  # @example Ask session
27
- # Keepalive.instance.session
28
+ # Keepalive.session
28
29
  # => 852803383803249
29
30
  #
30
31
  # @return [Fixnum] Identifier to session created by Janus
@@ -33,23 +34,15 @@ module RubyRabbitmqJanus
33
34
  condition.wait(lock)
34
35
  @session
35
36
  end
37
+ rescue
38
+ raise Errors::Janus::Keepalive::Session
36
39
  end
37
40
 
38
41
  private
39
42
 
40
43
  def transaction_running
41
44
  @session = find_session
42
- synchronize
43
- create_loop_session
44
- rescue => error
45
- raise Errors::KeepaliveLoopSession, error
46
- end
47
-
48
- def synchronize
49
45
  lock.synchronize { condition.signal }
50
- end
51
-
52
- def create_loop_session
53
46
  loop { loop_session(Tools::Config.instance.ttl) }
54
47
  end
55
48
 
@@ -57,29 +50,28 @@ module RubyRabbitmqJanus
57
50
  sleep time_to_live
58
51
  @pub.publish(message_keepalive)
59
52
  Tools::Log.instance.info "Keepalive for #{@session}"
60
- rescue => error
61
- raise Errors::KeepaliveMessage, error
62
53
  end
63
54
 
64
55
  def create_session
65
56
  @pub = Rabbit::Publisher::PublishExclusive.new(rabbit.channel, '')
66
- @pub.publish(Janus::Messages::Standard.new('base::create'))
67
- rescue => error
68
- raise Errors::KeepaliveCreateSession, error
57
+ msg = Janus::Messages::Standard.new('base::create', param_instance)
58
+ @pub.publish(msg)
69
59
  end
70
60
 
71
61
  def message_keepalive
72
62
  Janus::Messages::Standard.new('base::keepalive', param_session)
73
- rescue => error
74
- raise Errors::KeepaliveMessage, error
75
63
  end
76
64
 
77
65
  def find_session
78
66
  Janus::Responses::Standard.new(create_session).session
79
67
  end
80
68
 
69
+ def param_instance
70
+ { 'instance' => @instance }
71
+ end
72
+
81
73
  def param_session
82
- { 'session_id' => @session }
74
+ { 'session_id' => @session }.merge(param_instance)
83
75
  end
84
76
  end
85
77
  end
@@ -10,6 +10,8 @@ module RubyRabbitmqJanus
10
10
  # @return [Array] List of sessions
11
11
  def sessions
12
12
  request['sessions']
13
+ rescue
14
+ raise Errors::Janus::ResponseAdmin::Sessions
13
15
  end
14
16
 
15
17
  # List of handles running in one session in Janus Instance.
@@ -17,6 +19,8 @@ module RubyRabbitmqJanus
17
19
  # @return [Array] List of handles
18
20
  def handles
19
21
  request['handles']
22
+ rescue
23
+ raise Errors::Janus::ResponseAdmin::Handles
20
24
  end
21
25
 
22
26
  # Info to session or handle in Janus Instance
@@ -24,6 +28,8 @@ module RubyRabbitmqJanus
24
28
  # @return [Hash] Information to session/handle
25
29
  def info
26
30
  request['info']
31
+ rescue
32
+ raise Errors::Janus::ResponseAdmin::Info
27
33
  end
28
34
  end
29
35
  end
@@ -14,6 +14,8 @@ module RubyRabbitmqJanus
14
14
  # @return [String] result to request
15
15
  def event
16
16
  request['janus']
17
+ rescue
18
+ raise Errors::Janus::ResponseEvent::Event
17
19
  end
18
20
 
19
21
  # Read plugindata data
@@ -24,6 +26,8 @@ module RubyRabbitmqJanus
24
26
  # @return [Hash] body data
25
27
  def data
26
28
  request['plugindata']['data'] if plugin_response?
29
+ rescue
30
+ raise Errors::Janus::ResponseEvent::Data
27
31
  end
28
32
 
29
33
  # Read jsep data
@@ -34,6 +38,8 @@ module RubyRabbitmqJanus
34
38
  # @return [Hash] jsep data
35
39
  def jsep
36
40
  request['jsep'] if contains_jsep?
41
+ rescue
42
+ raise Errors::Janus::ResponseEvent::Jsep
37
43
  end
38
44
 
39
45
  # session_id and handle_id
@@ -44,6 +50,8 @@ module RubyRabbitmqJanus
44
50
  # @return [Array] Contains session_id and handle_id
45
51
  def keys
46
52
  [request['session_id'], request['sender']]
53
+ rescue
54
+ raise Errors::Janus::ResponseEvent::Keys
47
55
  end
48
56
 
49
57
  private
@@ -18,11 +18,8 @@ module RubyRabbitmqJanus
18
18
  # sending by user
19
19
  def initialize(response_janus)
20
20
  @request = response_janus
21
- rescue => error
22
- Tools::Log.instance.debug "Request error [initialize] : #{@request}"
23
- raise Errors::JanusResponseInit, error
24
- else
25
- Tools::Log.instance.debug "Response return : #{to_json}"
21
+ rescue
22
+ raise Errors::Janus::Response::Initializer
26
23
  end
27
24
 
28
25
  # Return request to json format
@@ -30,8 +27,8 @@ module RubyRabbitmqJanus
30
27
  # @return [String] Response to JSON format
31
28
  def to_json
32
29
  @request.to_json
33
- rescue => error
34
- raise Errors::JanusResponseJson, [error, @request]
30
+ rescue
31
+ raise Errors::Janus::Response::ToJson
35
32
  end
36
33
 
37
34
  # Return request to json format with nice format
@@ -39,8 +36,8 @@ module RubyRabbitmqJanus
39
36
  # @return [String] Response to JSON format with indent
40
37
  def to_nice_json
41
38
  JSON.pretty_generate to_hash
42
- rescue => error
43
- raise Errors::JanusResponsePrettyJson, error
39
+ rescue
40
+ raise Errors::Janus::Response::ToNiceJson
44
41
  end
45
42
 
46
43
  # Return request to hash format
@@ -48,8 +45,8 @@ module RubyRabbitmqJanus
48
45
  # @return [Hash] Response to Hash foramt
49
46
  def to_hash
50
47
  @request
51
- rescue => error
52
- raise Errors::JanusResponseHash, [error, @request]
48
+ rescue
49
+ raise Errors::Janus::Response::ToHash
53
50
  end
54
51
 
55
52
  private
@@ -9,6 +9,8 @@ module RubyRabbitmqJanus
9
9
  # Return a integer to session
10
10
  def session
11
11
  data_id
12
+ rescue
13
+ raise Errors::Janus::ResponseStandard::Session
12
14
  end
13
15
 
14
16
  alias sender session
@@ -16,26 +18,36 @@ module RubyRabbitmqJanus
16
18
  # Return session used in request
17
19
  def session_id
18
20
  request['session_id']
21
+ rescue
22
+ raise Errors::Janus::ResponseStandard::Session_id
19
23
  end
20
24
 
21
25
  # Read response for plugin request
22
26
  def plugin
23
27
  request['plugindata']
28
+ rescue
29
+ raise Errors::Janus::ResponseStandard::Plugin
24
30
  end
25
31
 
26
32
  # Read data response for plugin request
27
33
  def plugin_data
28
34
  plugin['data']
35
+ rescue
36
+ raise Errors::Janus::ResponseStandard::PluginData
29
37
  end
30
38
 
31
39
  # Read data response for normal request
32
40
  def data
33
41
  request['data']
42
+ rescue
43
+ raise Errors::Janus::ResponseStandard::Data
34
44
  end
35
45
 
36
46
  # Read SDP response
37
47
  def sdp
38
48
  request['jsep']['sdp']
49
+ rescue
50
+ raise Errors::Janus::ResponseStandard::SDP
39
51
  end
40
52
 
41
53
  private
@@ -9,6 +9,8 @@ module RubyRabbitmqJanus
9
9
  class Admin < Session
10
10
  def initialize(session)
11
11
  super(true, session)
12
+ rescue
13
+ raise Errors::Janus::TransactionAdmin::Initialize
12
14
  end
13
15
 
14
16
  # Begin connection with RabbitMQ
@@ -17,6 +19,8 @@ module RubyRabbitmqJanus
17
19
  @publisher = Rabbit::Publisher::PublisherAdmin.new(rabbit.channel)
18
20
  yield
19
21
  end
22
+ rescue
23
+ raise Errors::Janus::TransactionAdmin::Connect
20
24
  end
21
25
 
22
26
  # Write a message in queue in RabbitMQ
@@ -24,6 +28,8 @@ module RubyRabbitmqJanus
24
28
  msg = Janus::Messages::Admin.new(type, opts.merge(options))
25
29
  response = read_response(publisher.publish(msg))
26
30
  Janus::Responses::Admin.new(response)
31
+ rescue
32
+ raise Errors::Janus::TransactionAdmin::PublishMessage
27
33
  end
28
34
 
29
35
  private
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :reek:TooManyStatements
4
+
3
5
  module RubyRabbitmqJanus
4
6
  module Janus
5
7
  module Transactions
@@ -11,10 +13,13 @@ module RubyRabbitmqJanus
11
13
  #
12
14
  # @param [Fixnum] session
13
15
  # Use a session identifier for created message
14
- def initialize(exclusive, session, handle = 0)
16
+ def initialize(exclusive, session, handle = 0, instance = 1)
15
17
  super(session)
16
18
  @exclusive = exclusive
17
19
  @handle = handle
20
+ @instance = instance
21
+ rescue
22
+ raise Errors::Janus::TransactionHandle::Initialize
18
23
  end
19
24
 
20
25
  # Opening a long transaction with rabbitmq and is ending closing
@@ -30,6 +35,8 @@ module RubyRabbitmqJanus
30
35
  yield
31
36
  end
32
37
  handle
38
+ rescue
39
+ raise Errors::Janus::TransactionHandle::Connect
33
40
  end
34
41
 
35
42
  # Publish an message in handle
@@ -39,23 +46,38 @@ module RubyRabbitmqJanus
39
46
  #
40
47
  # @return [Janus::Responses::Standard] Response to message sending
41
48
  def publish_message(type, options = {})
42
- msg = Janus::Messages::Standard.new(type, opts.merge!(options))
49
+ msg = Janus::Messages::Standard.new(type, options.merge(opts))
43
50
  response = read_response(publisher.publish(msg))
44
51
  Janus::Responses::Standard.new(response)
52
+ rescue
53
+ raise Errors::Janus::TransactionHandle::PublishMessage
45
54
  end
46
55
 
47
56
  # Send a message detach
48
57
  def detach
49
58
  publisher.publish(Janus::Messages::Standard.new('base::detach', opts))
59
+ rescue
60
+ raise Errors::Janus::TransactionHandle::Detach
61
+ end
62
+
63
+ # Send a message detach and disable session for deleting in
64
+ # Janus Instance
65
+ def detach_for_deleting
66
+ detach
67
+ Models::JanusInstance.disable(opts['session_id'])
68
+ rescue
69
+ raise Errors::Janus::TransactionHandle::DetachForDeleting
50
70
  end
51
71
 
52
72
  private
53
73
 
54
74
  def create_handle
55
75
  Tools::Log.instance.info 'Create an handle'
56
- opt = { 'session_id' => session }
76
+ opt = { 'session_id' => session, 'instance' => @instance }
57
77
  msg = Janus::Messages::Standard.new('base::attach', opt)
78
+ Tools::Log.instance.info "Send message attach -- #{@handle}"
58
79
  @handle = send_a_message_exclusive { msg }
80
+ Tools::Log.instance.info "Message attach is sending -- #{@handle}"
59
81
  end
60
82
 
61
83
  def send_a_message_exclusive
@@ -16,6 +16,8 @@ module RubyRabbitmqJanus
16
16
  def initialize(exclusive, session)
17
17
  super(session)
18
18
  @exclusive = exclusive
19
+ rescue
20
+ raise Errors::Janus::TransactionSession::Initialize
19
21
  end
20
22
 
21
23
  # Opening a short transaction with rabbitmq and close when is ending
@@ -26,12 +28,16 @@ module RubyRabbitmqJanus
26
28
  choose_queue
27
29
  yield
28
30
  end
31
+ rescue
32
+ raise Errors::Janus::TransactionSession::Connect
29
33
  end
30
34
 
31
35
  def publish_message(type, options = {})
32
36
  msg = Janus::Messages::Standard.new(type, opts.merge!(options))
33
37
  response = read_response(publisher.publish(msg))
34
38
  Janus::Responses::Standard.new(response)
39
+ rescue
40
+ raise Errors::Janus::TransactionSession::PublishMessage
35
41
  end
36
42
 
37
43
  private
@@ -18,8 +18,8 @@ module RubyRabbitmqJanus
18
18
  @rabbit = Rabbit::Connect.new
19
19
  @session = session
20
20
  @publisher = @exclusive = nil
21
- rescue => error
22
- raise Errors::JanusTransaction, error
21
+ rescue
22
+ raise Errors::Janus::Transaction::Initialize
23
23
  end
24
24
 
25
25
  private
@@ -47,13 +47,7 @@ module RubyRabbitmqJanus
47
47
  end
48
48
 
49
49
  def read_response(publish)
50
- if @exclusive
51
- Tools::Log.instance.info '... and read a janus response'
52
- publish
53
- else
54
- Tools::Log.instance.info '... and return an empty response'
55
- {}
56
- end
50
+ @exclusive ? publish : {}
57
51
  end
58
52
  end
59
53
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyRabbitmqJanus
4
+ module Models
5
+ # @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
6
+ #
7
+ # Store instance information for MongoID database
8
+ class JanusInstance < ::ActiveRecord::Base
9
+ include RubyRabbitmqJanus::Models::JanusInstanceConcern
10
+
11
+ before_destroy { destroy_before_action }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :reek:UtilityFunction
4
+
5
+ module RubyRabbitmqJanus
6
+ module Models
7
+ # Add method for JanusInstance model
8
+ module JanusInstanceConcern
9
+ extend ActiveSupport::Concern
10
+
11
+ # Send an action for destroying a session in Janus Gateway instance
12
+ def destroy_before_action
13
+ options = { 'session_id' => session, 'instance' => instance }
14
+ ::RRJ.start_transaction(options) do |transaction|
15
+ transaction.publish_message('base::destroy', options)
16
+ end
17
+ end
18
+
19
+ # Class methods for JanusInstance model
20
+ module ClassMethods
21
+ # Disable an instance
22
+ def disable(session_id)
23
+ JanusInstance.find_by(session: session_id).set(enable: false)
24
+ end
25
+
26
+ # Delete all instance disabled
27
+ def destroys
28
+ JanusInstance.where(enable: false).delete_all
29
+ end
30
+
31
+ # Search a record by instance number
32
+ def find_by_instance(instance_search)
33
+ JanusInstance.find_by(instance: instance_search)
34
+ rescue
35
+ false
36
+ end
37
+
38
+ # Search a record by session number
39
+ def find_by_session(session_search)
40
+ JanusInstance.find_by(session: session_search)
41
+ rescue
42
+ nil
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end