ruby_rabbitmq_janus 1.1.12 → 1.2.0
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 +127 -0
- data/Rakefile +1 -3
- data/config/default.md +14 -14
- data/config/default.yml +12 -18
- data/config/requests.md +80 -0
- data/config/requests/{channel → peer}/answer.json +1 -1
- data/config/requests/{channel → peer}/offer.json +0 -0
- data/lib/generators/ruby_rabbitmq_janus/install_generator.rb +1 -0
- data/lib/rrj/errors/config.rb +8 -1
- data/lib/rrj/errors/error.rb +18 -5
- data/lib/rrj/errors/janus.rb +4 -2
- data/lib/rrj/errors/janus_message.rb +19 -15
- data/lib/rrj/errors/janus_response.rb +13 -26
- data/lib/rrj/errors/janus_transaction.rb +7 -13
- data/lib/rrj/errors/rabbit.rb +3 -9
- data/lib/rrj/info.rb +1 -1
- data/lib/rrj/init.rb +118 -68
- data/lib/rrj/janus/processus/concurrency.rb +8 -22
- data/lib/rrj/janus/processus/event.rb +13 -15
- data/lib/rrj/janus/processus/keepalive.rb +20 -15
- data/lib/rrj/janus/responses/response.rb +0 -1
- data/lib/rrj/janus/transactions/admin.rb +14 -22
- data/lib/rrj/janus/transactions/handle.rb +19 -33
- data/lib/rrj/janus/transactions/session.rb +13 -6
- data/lib/rrj/janus/transactions/transaction.rb +16 -24
- data/lib/rrj/rabbit/connect.rb +3 -4
- data/lib/rrj/rabbit/propertie.rb +6 -9
- data/lib/rrj/rabbit/publish/admin.rb +1 -1
- data/lib/rrj/rabbit/publish/base_publisher.rb +5 -0
- data/lib/rrj/rabbit/publish/listener.rb +1 -1
- data/lib/rrj/rabbit/publish/non_exclusive.rb +1 -1
- data/lib/rrj/tools/config.rb +44 -18
- data/lib/rrj/tools/log.rb +30 -15
- data/lib/rrj/tools/replaces/admin.rb +1 -3
- data/lib/rrj/tools/replaces/replace.rb +1 -6
- data/lib/rrj/tools/requests.rb +8 -8
- data/lib/rrj/tools/tools.rb +0 -1
- data/lib/ruby_rabbitmq_janus.rb +1 -0
- data/spec/request/admin/request_handle_info_spec.rb +3 -3
- data/spec/request/base/request_attach_spec.rb +7 -10
- data/spec/request/base/request_detach_spec.rb +6 -9
- data/spec/request/peer/request_answer_spec.rb +66 -0
- data/spec/request/peer/request_offer_spec.rb +113 -0
- data/spec/request/peer/request_trickle_spec.rb +9 -11
- data/spec/rrj/rrj_log_spec.rb +1 -6
- data/spec/spec_helper.rb +0 -1
- data/spec/support/examples.rb +6 -9
- data/spec/support/schemas/config/config.json +20 -32
- data/spec/support/schemas/request/peer/answer.json +15 -0
- data/spec/support/schemas/request/peer/offer.json +15 -0
- data/spec/support/schemas/request/peer/trickle.json +4 -12
- metadata +10 -19
- data/config/requests/channel/README.md +0 -29
- data/config/requests/channel/create.json +0 -9
- data/config/requests/channel/describe.json +0 -10
- data/config/requests/channel/destroy.json +0 -10
- data/config/requests/channel/exists.json +0 -10
- data/config/requests/channel/join.json +0 -11
- data/config/requests/channel/leave.json +0 -11
- data/config/requests/channel/list.json +0 -9
- data/config/requests/channel/select.json +0 -11
- data/config/requests/channel/trickle.json +0 -10
- data/config/requests/videocast/join.json +0 -12
- data/config/requests/videocast/leave.json +0 -11
- data/config/ruby-rabbitmq-janus.yml +0 -27
- data/lib/rrj/errors/request.rb +0 -21
- data/lib/rrj/tools/env.rb +0 -22
data/lib/rrj/rabbit/propertie.rb
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
module RubyRabbitmqJanus
|
4
4
|
module Rabbit
|
5
5
|
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
+
|
7
|
+
# @!attribute [r] correlation
|
8
|
+
# @return [String] Is a string uniq generated by SecureRandom
|
9
|
+
#
|
6
10
|
# Manage properties to message sending in rabbitmq queue
|
7
11
|
class Propertie
|
8
12
|
attr_reader :correlation
|
@@ -17,7 +21,7 @@ module RubyRabbitmqJanus
|
|
17
21
|
def options
|
18
22
|
Tools::Log.instance.debug 'Add options to propertie to message'
|
19
23
|
{
|
20
|
-
routing_key: Tools::Config.instance.
|
24
|
+
routing_key: Tools::Config.instance.queue_to,
|
21
25
|
correlation_id: @correlation,
|
22
26
|
content_type: 'application/json'
|
23
27
|
}
|
@@ -27,18 +31,11 @@ module RubyRabbitmqJanus
|
|
27
31
|
def options_admin
|
28
32
|
Tools::Log.instance.debug 'Add options to propertie to message'
|
29
33
|
{
|
30
|
-
routing_key:
|
34
|
+
routing_key: Tools::Config.instance.queue_admin_to,
|
31
35
|
correlation_id: @correlation,
|
32
36
|
content_type: 'application/json'
|
33
37
|
}
|
34
38
|
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
# Read configuration file to gem for reading a admin queue name
|
39
|
-
def routing_key
|
40
|
-
Tools::Config.instance.options['queues']['admin']['queue_to']
|
41
|
-
end
|
42
39
|
end
|
43
40
|
end
|
44
41
|
end
|
@@ -5,6 +5,11 @@ module RubyRabbitmqJanus
|
|
5
5
|
# Define an module for create an publisher
|
6
6
|
module Publisher
|
7
7
|
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
8
|
+
|
9
|
+
# @!attribute [r] response
|
10
|
+
# @return [RubyRabbitmqJanus::Janus::Responses::Response]
|
11
|
+
# Given a Janus response
|
12
|
+
#
|
8
13
|
# @abstract Publish message in RabbitMQ
|
9
14
|
class BasePublisher
|
10
15
|
attr_reader :response
|
data/lib/rrj/tools/config.rb
CHANGED
@@ -3,13 +3,18 @@
|
|
3
3
|
module RubyRabbitmqJanus
|
4
4
|
module Tools
|
5
5
|
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
-
|
6
|
+
|
7
|
+
# # Manage configuration file
|
8
|
+
# Singleton object for reading configuration file
|
9
|
+
#
|
10
|
+
# @!attribute [r] options
|
11
|
+
# @return [Hash] Return all options to configured in config file.
|
7
12
|
class Config
|
8
13
|
include Singleton
|
9
14
|
|
10
15
|
attr_reader :options
|
11
16
|
|
12
|
-
# Define HOME RRJ
|
17
|
+
# Define HOME RRJ gem
|
13
18
|
RRJ_HOME = File.realpath(File.join(File.dirname(__FILE__),
|
14
19
|
'..', '..', '..'))
|
15
20
|
|
@@ -19,7 +24,7 @@ module RubyRabbitmqJanus
|
|
19
24
|
# Define a default override file configuration
|
20
25
|
CONF_CUSTOM = 'config/ruby-rabbitmq-janus.yml'
|
21
26
|
|
22
|
-
# Define a default path to file configuration
|
27
|
+
# Define a default path to file configuration to gem
|
23
28
|
PATH_DEFAULT = File.join(RRJ_HOME, CONF_DEFAULT)
|
24
29
|
|
25
30
|
# Initialize configuration file default or customize if exist
|
@@ -27,40 +32,61 @@ module RubyRabbitmqJanus
|
|
27
32
|
@options = nil
|
28
33
|
conf_customize
|
29
34
|
conf_default
|
30
|
-
|
35
|
+
Tools::Log.instance.save_level(log_level)
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [String] read configuration for queue `from`
|
39
|
+
def queue_from
|
40
|
+
@options['queues']['standard']['from']
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [String] read configuration for queue `to`
|
44
|
+
def queue_to
|
45
|
+
@options['queues']['standard']['to']
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [String] read configuration for queue admin `from`
|
49
|
+
def queue_admin_from
|
50
|
+
@options['queues']['admin']['from']
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [String] read configuration for queue admin `to`
|
54
|
+
def queue_admin_to
|
55
|
+
@options['queues']['admin']['to']
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [Symbol] read configuration for log level used in this gem
|
59
|
+
def log_level
|
60
|
+
@options['gem']['log']['level'].upcase.to_sym
|
61
|
+
rescue
|
62
|
+
raise Errors::LevelNotDefine
|
63
|
+
end
|
64
|
+
|
65
|
+
# @param [Fixnum] index determine what field is readint in array plugins
|
66
|
+
# in configuration file
|
67
|
+
# @return [String] read configuration for plugin with index
|
68
|
+
def plugin_at(index = 0)
|
69
|
+
@options['janus']['plugins'][index].to_s
|
31
70
|
end
|
32
71
|
|
33
72
|
private
|
34
73
|
|
35
|
-
# Load configuration file yaml
|
36
|
-
# @return [Yaml] Configuration file
|
37
|
-
# @param file [String] Path to configuration file (with name)
|
38
74
|
def load_configuration(file)
|
39
75
|
Tools::Log.instance.info("Loading configuration file : #{file}")
|
40
|
-
YAML.load(File.read(file))
|
76
|
+
YAML.load(ERB.new(File.read(file)).result)
|
41
77
|
rescue
|
42
78
|
raise Errors::ConfigFileNotFound, file
|
43
79
|
end
|
44
80
|
|
45
|
-
# Load customize configuration file if exist
|
46
81
|
def conf_customize
|
47
82
|
file = File.join(Dir.pwd, CONF_CUSTOM)
|
48
83
|
@options = load_configuration(file) if File.exist?(file)
|
49
84
|
end
|
50
85
|
|
51
|
-
# Load default configuration if customize configuration doesn't exist
|
52
86
|
def conf_default
|
53
87
|
file = PATH_DEFAULT
|
54
88
|
@options ||= load_configuration(file)
|
55
89
|
end
|
56
|
-
|
57
|
-
# Define log lvel used in this gem
|
58
|
-
def define_log_level_used
|
59
|
-
Tools::Log.instance.level = \
|
60
|
-
Tools::Log::LEVELS[@options['gem']['log']['level'].upcase.to_sym]
|
61
|
-
rescue
|
62
|
-
raise Errors::LevelNotDefine
|
63
|
-
end
|
64
90
|
end
|
65
91
|
end
|
66
92
|
end
|
data/lib/rrj/tools/log.rb
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
# :reek:Attribute and :reek:UtilityFunction
|
3
2
|
|
4
3
|
module RubyRabbitmqJanus
|
5
4
|
module Tools
|
6
5
|
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
7
|
-
|
6
|
+
|
7
|
+
# # Manage log in this gem
|
8
|
+
#
|
9
|
+
# Singleton object for manipulate logs in this gem
|
10
|
+
#
|
11
|
+
# @!attribute [r] level
|
12
|
+
# @return [Fixnum] Return a number to log level.
|
8
13
|
class Log
|
9
14
|
include Singleton
|
10
15
|
|
@@ -18,9 +23,12 @@ module RubyRabbitmqJanus
|
|
18
23
|
UNKNOWN: Logger::UNKNOWN
|
19
24
|
}.freeze
|
20
25
|
|
21
|
-
|
26
|
+
attr_reader :level
|
22
27
|
|
23
|
-
# Returns a new instance to Log
|
28
|
+
# Returns a new instance to Log and use `Tag` element for each line
|
29
|
+
# writing in log with name to gem.
|
30
|
+
#
|
31
|
+
# @see http://api.rubyonrails.org/classes/ActiveSupport/TaggedLogging.html
|
24
32
|
def initialize
|
25
33
|
logs = defined?(Rails) ? logger_rails : logger_develop
|
26
34
|
logs.progname = RubyRabbitmqJanus.name
|
@@ -31,60 +39,68 @@ module RubyRabbitmqJanus
|
|
31
39
|
@logs = ActiveSupport::TaggedLogging.new(logs)
|
32
40
|
end
|
33
41
|
|
34
|
-
# Write a message in log with a UNKNOWN level
|
42
|
+
# Write a message in log with a `UNKNOWN` level
|
43
|
+
#
|
35
44
|
# @param message [String] Message writing in warning level in log
|
36
45
|
def unknown(message)
|
37
46
|
write_tag { @logs.unknown(message) }
|
38
47
|
end
|
39
48
|
|
40
|
-
# Write a message in log with a FATAL level
|
49
|
+
# Write a message in log with a `FATAL` level
|
50
|
+
#
|
41
51
|
# @param message [String] Message writing in warning level in log
|
42
52
|
def fatal(message)
|
43
53
|
write_tag { @logs.fatal(message) } if test_level?(Logger::FATAL)
|
44
54
|
end
|
45
55
|
|
46
|
-
# Write a message in log with a ERROR level
|
56
|
+
# Write a message in log with a `ERROR` level
|
57
|
+
#
|
47
58
|
# @param message [String] Message writing in warning level in log
|
48
59
|
def error(message)
|
49
60
|
write_tag { @logs.error(message) } if test_level?(Logger::ERROR)
|
50
61
|
end
|
51
62
|
|
52
|
-
# Write a message in log with a
|
63
|
+
# Write a message in log with a `WARN` level
|
53
64
|
# @param message [String] Message writing in warning level in log
|
54
65
|
def warn(message)
|
55
66
|
write_tag { @logs.warn(message) } if test_level?(Logger::WARN)
|
56
67
|
end
|
57
68
|
|
58
|
-
# Write a message in log with a
|
69
|
+
# Write a message in log with a `INFO` level
|
70
|
+
#
|
59
71
|
# @param message [String] Message writing in info level in log
|
60
72
|
def info(message)
|
61
73
|
write_tag { @logs.info(message) } if test_level?(Logger::INFO)
|
62
74
|
end
|
63
75
|
|
64
|
-
# Write a message in log with a
|
76
|
+
# Write a message in log with a `DEBUG` level
|
77
|
+
#
|
65
78
|
# @param message [String] Message writing in debug level in log
|
66
79
|
def debug(message)
|
67
80
|
write_tag { @logs.debug(message) } if test_level?(Logger::DEBUG)
|
68
81
|
end
|
69
82
|
|
70
|
-
#
|
83
|
+
# @return [RubyRabbitmqJanus::Tools::Log] the instance to logger
|
71
84
|
def logger
|
72
85
|
@logs
|
73
86
|
end
|
74
87
|
|
75
|
-
#
|
88
|
+
# @return [String] name of file to lgger used
|
76
89
|
def logdev
|
77
90
|
@logs.instance_variable_get(:'@logdev').filename
|
78
91
|
end
|
79
92
|
|
93
|
+
# Save log level used in this gem
|
94
|
+
def save_level(gem_level)
|
95
|
+
@level = LEVELS[gem_level]
|
96
|
+
end
|
97
|
+
|
80
98
|
private
|
81
99
|
|
82
|
-
# Define instance logger with rails
|
83
100
|
def logger_rails
|
84
101
|
Rails.logger
|
85
102
|
end
|
86
103
|
|
87
|
-
# Define instance logger wiptout rails
|
88
104
|
def logger_develop
|
89
105
|
log = Logger.new('log/rails-rabbit-janus.log')
|
90
106
|
log.formatter = proc do |severity, _datetime, _progname, msg|
|
@@ -97,7 +113,6 @@ module RubyRabbitmqJanus
|
|
97
113
|
this_level >= Log.instance.level ? true : false
|
98
114
|
end
|
99
115
|
|
100
|
-
# Write a log with an tag
|
101
116
|
def write_tag
|
102
117
|
@logs.tagged(@logs.progname) { yield }
|
103
118
|
end
|
@@ -52,9 +52,7 @@ module RubyRabbitmqJanus
|
|
52
52
|
|
53
53
|
# Given a admin pass for request
|
54
54
|
def admin_pass
|
55
|
-
|
56
|
-
key = 'admin_pass'
|
57
|
-
Tools::Env.instance.test_env_var(cfg, key)
|
55
|
+
Tools::Config.instance.options['rabbit']['admin_pass']
|
58
56
|
end
|
59
57
|
end
|
60
58
|
end
|
@@ -56,15 +56,10 @@ module RubyRabbitmqJanus
|
|
56
56
|
|
57
57
|
# Replace plugin string
|
58
58
|
def replace_plugin
|
59
|
-
@request['plugin'] =
|
59
|
+
@request['plugin'] = Tools::Config.instance.plugin_at
|
60
60
|
rescue => message
|
61
61
|
Tools::Log.instance.warn "Error plugin replace : #{message}"
|
62
62
|
end
|
63
|
-
|
64
|
-
# Return a first plugin to array in config gem
|
65
|
-
def plugin
|
66
|
-
Tools::Config.instance.options['janus']['plugins'][0]
|
67
|
-
end
|
68
63
|
end
|
69
64
|
end
|
70
65
|
end
|
data/lib/rrj/tools/requests.rb
CHANGED
@@ -3,9 +3,15 @@
|
|
3
3
|
module RubyRabbitmqJanus
|
4
4
|
module Tools
|
5
5
|
# @author VAILLANT Jeremy <jeremy.vaillant@dazzl.tv>
|
6
|
-
|
7
|
-
#
|
6
|
+
|
7
|
+
# # Load files json in `config/request/**/*`.
|
8
|
+
#
|
9
|
+
# This file is used for sending a request to Janus
|
10
|
+
#
|
8
11
|
# @!attribute [r] requests
|
12
|
+
# @return [Hash] It's a hash with name and path to request.
|
13
|
+
#
|
14
|
+
# @see file:/config/requests.md For more information to type requests used.
|
9
15
|
class Requests
|
10
16
|
include Singleton
|
11
17
|
|
@@ -29,7 +35,6 @@ module RubyRabbitmqJanus
|
|
29
35
|
|
30
36
|
private
|
31
37
|
|
32
|
-
# Run folder contains templates json
|
33
38
|
def each_folder(subfolder)
|
34
39
|
Dir[File.join(PATH_REQUEST + subfolder, '*')].count do |file|
|
35
40
|
if File.file?(file)
|
@@ -40,15 +45,10 @@ module RubyRabbitmqJanus
|
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
43
|
-
# Add template json to requests array
|
44
|
-
# @param file [File]
|
45
48
|
def read_file(file)
|
46
49
|
@requests[File.basename(file, '.json').to_s] = File.path(file)
|
47
50
|
end
|
48
51
|
|
49
|
-
# Add template json to requests array with a path
|
50
|
-
# @param folder [Dir]
|
51
|
-
# @param file [File]
|
52
52
|
def read_folder(folder, file)
|
53
53
|
@requests[folder + File.basename(file, '.json').to_s] = File.path(file)
|
54
54
|
end
|
data/lib/rrj/tools/tools.rb
CHANGED
data/lib/ruby_rabbitmq_janus.rb
CHANGED
@@ -5,10 +5,10 @@ require 'spec_helper'
|
|
5
5
|
describe 'RubyRabbitmqJanus::RRJ -- message type handle_info' do
|
6
6
|
before(:example) { @type = 'admin::handle_info' }
|
7
7
|
|
8
|
-
describe '#message_admin', type: :request,
|
9
|
-
|
8
|
+
describe '#message_admin', type: :request, level: :admin,
|
9
|
+
name: :handle_info, broken: true do
|
10
10
|
include_examples 'message_handle_admin should match json schema'
|
11
11
|
end
|
12
12
|
|
13
|
-
# after(:example) { @gateway.
|
13
|
+
# after(:example) { @gateway.handle_message_simple('base::detach') }
|
14
14
|
end
|
@@ -3,23 +3,20 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe 'RubyRabbitmqJanus::RRJ -- message type attach' do
|
6
|
-
before(:example)
|
6
|
+
before(:example) do
|
7
|
+
@type = 'base::attach'
|
8
|
+
@options = { 'replace' => {}, 'add' => {} }
|
9
|
+
end
|
7
10
|
|
8
11
|
describe '#message_handle', type: :request, level: :base, name: :attach do
|
9
12
|
context 'when queue is exclusive' do
|
10
|
-
it_behaves_like 'message_handle should match json schema'
|
11
|
-
let(:replace) { {} }
|
12
|
-
let(:add) { {} }
|
13
|
-
end
|
13
|
+
it_behaves_like 'message_handle should match json schema'
|
14
14
|
end
|
15
15
|
|
16
16
|
context 'when queue is not exclusive' do
|
17
|
-
it_behaves_like 'message_handle should match json empty'
|
18
|
-
let(:replace) { {} }
|
19
|
-
let(:add) { {} }
|
20
|
-
end
|
17
|
+
it_behaves_like 'message_handle should match json empty'
|
21
18
|
end
|
22
19
|
end
|
23
20
|
|
24
|
-
after(:example) { @gateway.
|
21
|
+
after(:example) { @gateway.handle_message_simple('base::detach') }
|
25
22
|
end
|
@@ -3,21 +3,18 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
describe 'RubyRabbitmqJanus::RRJ -- mesage type detach' do
|
6
|
-
before(:example)
|
6
|
+
before(:example) do
|
7
|
+
@type = 'base::detach'
|
8
|
+
@options = { 'replace' => {}, 'add' => {} }
|
9
|
+
end
|
7
10
|
|
8
11
|
describe '#message_handle', type: :request, level: :base, name: :detach do
|
9
12
|
context 'when queue is exclusive' do
|
10
|
-
it_behaves_like 'message_handle should match json schema'
|
11
|
-
let(:replace) { {} }
|
12
|
-
let(:add) { {} }
|
13
|
-
end
|
13
|
+
it_behaves_like 'message_handle should match json schema'
|
14
14
|
end
|
15
15
|
|
16
16
|
context 'when queue is not exclusive' do
|
17
|
-
it_behaves_like 'message_handle should match json empty'
|
18
|
-
let(:replace) { {} }
|
19
|
-
let(:add) { {} }
|
20
|
-
end
|
17
|
+
it_behaves_like 'message_handle should match json empty'
|
21
18
|
end
|
22
19
|
end
|
23
20
|
end
|