ruby_rabbitmq_janus 1.1.12 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|