rservicebus 0.1.74 → 0.1.75
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/ReturnMessagesToSourceQueue +18 -18
- data/bin/SendEmptyMessage +3 -3
- data/bin/rsb_ctl +10 -10
- data/bin/rservicebus-create +4 -4
- data/bin/rservicebus-init +7 -6
- data/lib/rservicebus.rb +49 -49
- data/lib/rservicebus/Agent.rb +4 -4
- data/lib/rservicebus/AppResource.rb +4 -4
- data/lib/rservicebus/AppResource/Dir.rb +3 -3
- data/lib/rservicebus/AppResource/FluidDb.rb +1 -1
- data/lib/rservicebus/AppResource/FluidDbFirebird.rb +1 -1
- data/lib/rservicebus/AppResource/FluidDbMysql.rb +4 -4
- data/lib/rservicebus/AppResource/FluidDbMysql2.rb +4 -4
- data/lib/rservicebus/AppResource/FluidDbPgsql.rb +4 -4
- data/lib/rservicebus/AppResource/FluidDbTinyTds.rb +1 -1
- data/lib/rservicebus/AppResource/Mysql.rb +2 -2
- data/lib/rservicebus/AppResource/Redis.rb +1 -1
- data/lib/rservicebus/AppResource/ScpDownload.rb +51 -0
- data/lib/rservicebus/AppResource/ScpUpload.rb +3 -2
- data/lib/rservicebus/AppResource/Smb.rb +3 -3
- data/lib/rservicebus/AppResource/SmbDir.rb +2 -2
- data/lib/rservicebus/AppResource/SmbFile.rb +1 -1
- data/lib/rservicebus/Audit.rb +9 -9
- data/lib/rservicebus/CircuitBreaker.rb +4 -4
- data/lib/rservicebus/Config.rb +46 -46
- data/lib/rservicebus/ConfigureAppResource.rb +64 -63
- data/lib/rservicebus/ConfigureMonitor.rb +12 -12
- data/lib/rservicebus/ConfigureSubscriptionStorage.rb +5 -5
- data/lib/rservicebus/CronManager.rb +8 -8
- data/lib/rservicebus/EndpointMapping.rb +11 -11
- data/lib/rservicebus/HandlerLoader.rb +33 -33
- data/lib/rservicebus/HandlerManager.rb +2 -2
- data/lib/rservicebus/Host.rb +58 -58
- data/lib/rservicebus/MQ.rb +21 -21
- data/lib/rservicebus/MQ/Beanstalk.rb +9 -9
- data/lib/rservicebus/MQ/RabbitMq.rb +5 -5
- data/lib/rservicebus/MQ/Redis.rb +3 -3
- data/lib/rservicebus/Message.rb +11 -11
- data/lib/rservicebus/Monitor.rb +5 -5
- data/lib/rservicebus/Monitor/CsvDir.rb +5 -5
- data/lib/rservicebus/Monitor/CsvPerLine.rb +5 -5
- data/lib/rservicebus/Monitor/Dir.rb +34 -34
- data/lib/rservicebus/Monitor/DirNotifier.rb +15 -15
- data/lib/rservicebus/ResourceManager.rb +2 -2
- data/lib/rservicebus/Saga/Manager.rb +18 -18
- data/lib/rservicebus/SagaLoader.rb +19 -19
- data/lib/rservicebus/SagaStorage.rb +4 -4
- data/lib/rservicebus/SagaStorage/Dir.rb +12 -12
- data/lib/rservicebus/SendAtManager.rb +4 -4
- data/lib/rservicebus/SendAtStorage.rb +5 -5
- data/lib/rservicebus/SendAtStorage/File.rb +3 -3
- data/lib/rservicebus/StateManager.rb +2 -2
- data/lib/rservicebus/StateStorage.rb +2 -2
- data/lib/rservicebus/StateStorage/Dir.rb +11 -11
- data/lib/rservicebus/StateStorage/InMemory.rb +1 -1
- data/lib/rservicebus/StatisticManager.rb +2 -2
- data/lib/rservicebus/SubscriptionManager.rb +2 -2
- data/lib/rservicebus/SubscriptionStorage.rb +4 -4
- data/lib/rservicebus/SubscriptionStorage/File.rb +3 -3
- data/lib/rservicebus/SubscriptionStorage/Redis.rb +10 -10
- data/lib/rservicebus/Test.rb +2 -2
- data/lib/rservicebus/Test/Bus.rb +2 -2
- data/lib/rservicebus/Test/Redis.rb +1 -1
- data/lib/rservicebus/Transporter.rb +15 -15
- data/lib/rservicebus/helper_functions.rb +15 -15
- metadata +13 -12
@@ -59,10 +59,10 @@ module RServiceBus
|
|
59
59
|
v.finished
|
60
60
|
rescue Exception => e1
|
61
61
|
puts "Caught nested exception rolling back, #{v.class.name}, for msg, #{msgName}"
|
62
|
-
puts
|
62
|
+
puts '****'
|
63
63
|
puts e1.message
|
64
64
|
puts e1.backtrace
|
65
|
-
puts
|
65
|
+
puts '****'
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -20,14 +20,14 @@ class Saga_Manager
|
|
20
20
|
def GetMethodsByPrefix( saga, prefix )
|
21
21
|
list = []
|
22
22
|
saga.instance_methods.each do |name|
|
23
|
-
list.push name.to_s.sub( prefix,
|
23
|
+
list.push name.to_s.sub( prefix, '') if name.to_s.slice( 0,prefix.length ) == prefix
|
24
24
|
end
|
25
25
|
|
26
26
|
return list
|
27
27
|
end
|
28
28
|
|
29
29
|
def GetStartWithMethodNames( saga )
|
30
|
-
return self.GetMethodsByPrefix( saga,
|
30
|
+
return self.GetMethodsByPrefix( saga, 'StartWith_')
|
31
31
|
end
|
32
32
|
|
33
33
|
# setBusAttributeIfRequested
|
@@ -36,7 +36,7 @@ class Saga_Manager
|
|
36
36
|
def setBusAttributeIfRequested( saga )
|
37
37
|
if defined?( saga.Bus ) then
|
38
38
|
saga.Bus = @host
|
39
|
-
RServiceBus.log
|
39
|
+
RServiceBus.log 'Bus attribute set for: ' + saga.class.name
|
40
40
|
end
|
41
41
|
|
42
42
|
return self
|
@@ -76,12 +76,12 @@ class Saga_Manager
|
|
76
76
|
|
77
77
|
|
78
78
|
def prepSaga( saga )
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
end
|
79
|
+
unless @resourceListBySagaName[saga.class.name].nil? then
|
80
|
+
@resourceListBySagaName[saga.class.name].each do |k, v|
|
81
|
+
saga.instance_variable_set("@#{k}", @resourceManager.get(k).getResource())
|
82
|
+
RServiceBus.rlog "App resource attribute, #{k}, set for: " + saga.class.name
|
84
83
|
end
|
84
|
+
end
|
85
85
|
|
86
86
|
end
|
87
87
|
|
@@ -91,16 +91,16 @@ class Saga_Manager
|
|
91
91
|
msg = rmsg.msg
|
92
92
|
|
93
93
|
RServiceBus.log "SagaManager, started processing, #{msg.class.name}", true
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
94
|
+
unless @startWith[msg.class.name].nil? then
|
95
|
+
@startWith[msg.class.name].each do |saga|
|
96
|
+
data = Saga_Data.new(saga)
|
97
|
+
@sagaStorage.Set(data)
|
98
|
+
|
99
|
+
methodName = "StartWith_#{msg.class.name}"
|
100
|
+
self.ProcessMsg(saga, data, methodName, msg)
|
101
|
+
|
102
|
+
handled = true
|
103
|
+
end
|
104
104
|
end
|
105
105
|
return handled if handled == true
|
106
106
|
|
@@ -23,15 +23,15 @@ class SagaLoader
|
|
23
23
|
#
|
24
24
|
# @param [String] filePath the path to be cleaned
|
25
25
|
def getRequirePath( filePath )
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
unless filePath.start_with?('/') then
|
27
|
+
filePath = './' + filePath
|
28
|
+
end
|
29
29
|
|
30
30
|
if File.exists?( filePath ) then
|
31
|
-
return filePath.sub(
|
31
|
+
return filePath.sub( '.rb', '')
|
32
32
|
end
|
33
33
|
|
34
|
-
abort(
|
34
|
+
abort( 'Filepath, ' + filePath + ", given for Saga require doesn't exist" );
|
35
35
|
end
|
36
36
|
|
37
37
|
# Instantiate the saga named in sagaName from the file name in filePath
|
@@ -49,9 +49,9 @@ class SagaLoader
|
|
49
49
|
begin
|
50
50
|
saga = Object.const_get(sagaName);
|
51
51
|
rescue Exception => e
|
52
|
-
puts
|
53
|
-
puts
|
54
|
-
puts
|
52
|
+
puts 'Expected class name: ' + sagaName + ', not found after require: ' + requirePath
|
53
|
+
puts '**** Check in ' + filePath + ' that the class is named : ' + sagaName
|
54
|
+
puts '( In case its not that )'
|
55
55
|
raise e
|
56
56
|
end
|
57
57
|
|
@@ -70,17 +70,17 @@ class SagaLoader
|
|
70
70
|
end
|
71
71
|
|
72
72
|
begin
|
73
|
-
RServiceBus.rlog
|
74
|
-
RServiceBus.rlog
|
73
|
+
RServiceBus.rlog 'filePath: ' + filePath
|
74
|
+
RServiceBus.rlog 'sagaName: ' + sagaName
|
75
75
|
|
76
76
|
saga = self.loadSagaFromFile( sagaName, filePath )
|
77
|
-
RServiceBus.log
|
77
|
+
RServiceBus.log 'Loaded Saga: ' + sagaName
|
78
78
|
|
79
79
|
@sagaManager.RegisterSaga( saga )
|
80
80
|
|
81
81
|
@listOfLoadedPaths[filePath] = 1
|
82
82
|
rescue Exception => e
|
83
|
-
puts
|
83
|
+
puts 'Exception loading saga from file: ' + filePath
|
84
84
|
puts e.message
|
85
85
|
puts e.backtrace[0]
|
86
86
|
|
@@ -94,7 +94,7 @@ class SagaLoader
|
|
94
94
|
# @param [String] path directory to check
|
95
95
|
# @return [Array] a list of paths to files found in the given path
|
96
96
|
def getListOfFilesForDir( path )
|
97
|
-
list = Dir[path +
|
97
|
+
list = Dir[path + '/*'];
|
98
98
|
|
99
99
|
RServiceBus.rlog "SagaLoader.getListOfFilesForDir. path: #{path}, list: #{list}"
|
100
100
|
|
@@ -108,7 +108,7 @@ class SagaLoader
|
|
108
108
|
baseName = File.basename( filePath )
|
109
109
|
extName = File.extname( baseName )
|
110
110
|
|
111
|
-
sagaName = baseName.sub( extName,
|
111
|
+
sagaName = baseName.sub( extName, '')
|
112
112
|
|
113
113
|
return "Saga_#{sagaName}"
|
114
114
|
end
|
@@ -121,11 +121,11 @@ class SagaLoader
|
|
121
121
|
RServiceBus.rlog "SagaLoader.loadSagasFromPath. baseDir: #{baseDir}"
|
122
122
|
|
123
123
|
self.getListOfFilesForDir(baseDir).each do |filePath|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
124
|
+
unless filePath.end_with?('.') then
|
125
|
+
|
126
|
+
sagaName = self.getSagaName(filePath)
|
127
|
+
self.loadSaga(filePath, sagaName)
|
128
|
+
end
|
129
129
|
end
|
130
130
|
|
131
131
|
return self
|
@@ -4,11 +4,11 @@ module RServiceBus
|
|
4
4
|
|
5
5
|
def SagaStorage.Get( uri )
|
6
6
|
case uri.scheme
|
7
|
-
when
|
8
|
-
require
|
7
|
+
when 'dir'
|
8
|
+
require 'rservicebus/SagaStorage/Dir'
|
9
9
|
return SagaStorage_Dir.new( uri )
|
10
|
-
when
|
11
|
-
require
|
10
|
+
when 'inmem'
|
11
|
+
require 'rservicebus/SagaStorage/InMemory'
|
12
12
|
return SagaStorage_InMemory.new( uri )
|
13
13
|
else
|
14
14
|
abort("Scheme, #{uri.scheme}, not recognised when configuring SagaStorage, #{uri.to_s}");
|
@@ -6,23 +6,23 @@ module RServiceBus
|
|
6
6
|
@sagaDir = uri.path
|
7
7
|
|
8
8
|
inputDir = Dir.new( @sagaDir )
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
unless File.writable?(@sagaDir) then
|
10
|
+
puts "***** Directory is not writable, #{@sagaDir}."
|
11
|
+
puts "***** Make the directory, #{@sagaDir}, writable and try again."
|
12
|
+
puts '***** Or, set the Saga Directory explicitly by, SAGA_URI=<dir://path/to/saga>'
|
13
|
+
abort();
|
14
14
|
end
|
15
15
|
rescue Errno::ENOENT => e
|
16
16
|
puts "***** Directory does not exist, #{@sagaDir}."
|
17
17
|
puts "***** Create the directory, #{@sagaDir}, and try again."
|
18
18
|
puts "***** eg, mkdir #{@sagaDir}"
|
19
|
-
puts
|
19
|
+
puts '***** Or, set the Saga Directory explicitly by, SAGA_URI=<dir://path/to/saga>'
|
20
20
|
abort();
|
21
21
|
rescue Errno::ENOTDIR => e
|
22
22
|
puts "***** The specified path does not point to a directory, #{@sagaDir}."
|
23
23
|
puts "***** Either repoint path to a directory, or remove, #{@sagaDir}, and create it as a directory."
|
24
24
|
puts "***** eg, rm #{@sagaDir} && mkdir #{@sagaDir}"
|
25
|
-
puts
|
25
|
+
puts '***** Or, set the Saga Directory explicitly by, SAGA_URI=<dir://path/to/saga>'
|
26
26
|
abort();
|
27
27
|
end
|
28
28
|
|
@@ -35,14 +35,14 @@ module RServiceBus
|
|
35
35
|
#Set
|
36
36
|
def Set( data )
|
37
37
|
path = self.getPath( data.correlationId )
|
38
|
-
@list << Hash[
|
38
|
+
@list << Hash['path', path, 'data', data]
|
39
39
|
end
|
40
40
|
|
41
41
|
#Get
|
42
42
|
def Get( correlationId )
|
43
43
|
path = self.getPath( correlationId )
|
44
44
|
data = self.load( path )
|
45
|
-
@list << Hash[
|
45
|
+
@list << Hash['path', path, 'data', data]
|
46
46
|
|
47
47
|
return data
|
48
48
|
end
|
@@ -50,7 +50,7 @@ module RServiceBus
|
|
50
50
|
#Finish
|
51
51
|
def Commit
|
52
52
|
@list.each do |e|
|
53
|
-
File.open( e['path'],
|
53
|
+
File.open( e['path'], 'w') { |f| f.write( YAML::dump( e['data'] ) ) }
|
54
54
|
end
|
55
55
|
@deleted.each do |correlationId|
|
56
56
|
File.unlink( self.getPath( correlationId ) )
|
@@ -72,11 +72,11 @@ module RServiceBus
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def load( path )
|
75
|
-
return Hash.new
|
75
|
+
return Hash.new unless File.exists?(path)
|
76
76
|
|
77
77
|
content = IO.read( path )
|
78
78
|
|
79
|
-
return Hash.new if content ==
|
79
|
+
return Hash.new if content == ''
|
80
80
|
|
81
81
|
return YAML::load( content )
|
82
82
|
end
|
@@ -9,9 +9,9 @@ module RServiceBus
|
|
9
9
|
#Check if the SendAt Dir has been specified
|
10
10
|
#If it has, make sure it exists, and is writable
|
11
11
|
|
12
|
-
string = RServiceBus.getValue(
|
12
|
+
string = RServiceBus.getValue('SENDAT_URI')
|
13
13
|
if string.nil? then
|
14
|
-
string =
|
14
|
+
string = 'file:///tmp/rservicebus-sendat'
|
15
15
|
end
|
16
16
|
|
17
17
|
uri = URI.parse( string )
|
@@ -24,8 +24,8 @@ module RServiceBus
|
|
24
24
|
def Process
|
25
25
|
now = DateTime.now
|
26
26
|
@SendAtStorage.GetAll.each_with_index do |row,idx|
|
27
|
-
if row[
|
28
|
-
@Bus._SendNeedsWrapping( row[
|
27
|
+
if row['timestamp'] > now then
|
28
|
+
@Bus._SendNeedsWrapping( row['msg'], row['queueName'], row['correlationId'] )
|
29
29
|
@SendAtStorage.Delete( idx )
|
30
30
|
end
|
31
31
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
module RServiceBus
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'rservicebus/SendAtStorage'
|
4
4
|
|
5
5
|
class SendAtStorage
|
6
6
|
|
7
7
|
def SendAtStorage.Get( uri )
|
8
8
|
case uri.scheme
|
9
|
-
when
|
10
|
-
require
|
9
|
+
when 'file'
|
10
|
+
require 'rservicebus/SendAtStorage/File'
|
11
11
|
return SendAtStorage_File.new( uri )
|
12
|
-
when
|
13
|
-
require
|
12
|
+
when 'inmem'
|
13
|
+
require 'rservicebus/SendAtStorage/InMemory'
|
14
14
|
return SendAtStorage_InMemory.new( uri )
|
15
15
|
else
|
16
16
|
abort("Scheme, #{uri.scheme}, not recognised when configuring SendAtStorage, #{uri.to_s}");
|
@@ -6,11 +6,11 @@ module RServiceBus
|
|
6
6
|
@list = self.load( uri.path )
|
7
7
|
end
|
8
8
|
def load( path )
|
9
|
-
return Array.new
|
9
|
+
return Array.new unless File.exists?(path)
|
10
10
|
|
11
11
|
content = IO.read( path )
|
12
12
|
|
13
|
-
return Array.new if content ==
|
13
|
+
return Array.new if content == ''
|
14
14
|
|
15
15
|
return YAML::load( content )
|
16
16
|
end
|
@@ -36,7 +36,7 @@ module RServiceBus
|
|
36
36
|
#Finish
|
37
37
|
def Save
|
38
38
|
content = YAML::dump( @list )
|
39
|
-
File.open( @uri.path,
|
39
|
+
File.open( @uri.path, 'w') { |f| f.write( YAML::dump( content ) ) }
|
40
40
|
end
|
41
41
|
|
42
42
|
|
@@ -9,9 +9,9 @@ module RServiceBus
|
|
9
9
|
#Check if the State Dir has been specified
|
10
10
|
#If it has, make sure it exists, and is writable
|
11
11
|
|
12
|
-
string = RServiceBus.getValue(
|
12
|
+
string = RServiceBus.getValue('STATE_URI')
|
13
13
|
if string.nil? then
|
14
|
-
string =
|
14
|
+
string = 'dir:///tmp'
|
15
15
|
end
|
16
16
|
|
17
17
|
uri = URI.parse( string )
|
@@ -4,10 +4,10 @@ module RServiceBus
|
|
4
4
|
|
5
5
|
def StateStorage.Get( uri )
|
6
6
|
case uri.scheme
|
7
|
-
when
|
7
|
+
when 'dir'
|
8
8
|
require 'rservicebus/StateStorage/Dir.rb'
|
9
9
|
return StateStorage_Dir.new( uri )
|
10
|
-
when
|
10
|
+
when 'inmem'
|
11
11
|
require 'rservicebus/StateStorage/InMemory.rb'
|
12
12
|
return StateStorage_InMemory.new( uri )
|
13
13
|
else
|
@@ -6,23 +6,23 @@ module RServiceBus
|
|
6
6
|
@stateDir = uri.path
|
7
7
|
|
8
8
|
inputDir = Dir.new( @stateDir )
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
unless File.writable?(@stateDir) then
|
10
|
+
puts "***** Directory is not writable, #{@stateDir}."
|
11
|
+
puts "***** Make the directory, #{@stateDir}, writable and try again."
|
12
|
+
puts '***** Or, set the State Directory explicitly by, STATE_URI=<dir://path/to/state>'
|
13
|
+
abort();
|
14
14
|
end
|
15
15
|
rescue Errno::ENOENT => e
|
16
16
|
puts "***** Directory does not exist, #{@stateDir}."
|
17
17
|
puts "***** Create the directory, #{@stateDir}, and try again."
|
18
18
|
puts "***** eg, mkdir #{@stateDir}"
|
19
|
-
puts
|
19
|
+
puts '***** Or, set the State Directory explicitly by, STATE_URI=<dir://path/to/state>'
|
20
20
|
abort();
|
21
21
|
rescue Errno::ENOTDIR => e
|
22
22
|
puts "***** The specified path does not point to a directory, #{@stateDir}."
|
23
23
|
puts "***** Either repoint path to a directory, or remove, #{@stateDir}, and create it as a directory."
|
24
24
|
puts "***** eg, rm #{@stateDir} && mkdir #{@stateDir}"
|
25
|
-
puts
|
25
|
+
puts '***** Or, set the State Directory explicitly by, STATE_URI=<dir://path/to/state>'
|
26
26
|
abort();
|
27
27
|
end
|
28
28
|
|
@@ -35,7 +35,7 @@ module RServiceBus
|
|
35
35
|
def Get( handler )
|
36
36
|
path = self.getPath( handler )
|
37
37
|
hash = self.load( path )
|
38
|
-
@list << Hash[
|
38
|
+
@list << Hash['path', path, 'hash', hash]
|
39
39
|
|
40
40
|
return hash
|
41
41
|
end
|
@@ -43,7 +43,7 @@ module RServiceBus
|
|
43
43
|
#Finish
|
44
44
|
def Commit
|
45
45
|
@list.each do |e|
|
46
|
-
File.open( e['path'],
|
46
|
+
File.open( e['path'], 'w') { |f| f.write( YAML::dump( e['hash'] ) ) }
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -55,11 +55,11 @@ module RServiceBus
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def load( path )
|
58
|
-
return Hash.new
|
58
|
+
return Hash.new unless File.exists?(path)
|
59
59
|
|
60
60
|
content = IO.read( path )
|
61
61
|
|
62
|
-
return Hash.new if content ==
|
62
|
+
return Hash.new if content == ''
|
63
63
|
|
64
64
|
return YAML::load( content )
|
65
65
|
end
|
@@ -17,8 +17,8 @@ class StatisticManager
|
|
17
17
|
|
18
18
|
@totalByMessageType = Hash.new
|
19
19
|
|
20
|
-
@output = !RServiceBus.getValue(
|
21
|
-
@maxStatOutputCountdown = RServiceBus.getValue(
|
20
|
+
@output = !RServiceBus.getValue( 'VERBOSE', nil ).nil?
|
21
|
+
@maxStatOutputCountdown = RServiceBus.getValue( 'STAT_OUTPUT_COUNTDOWN', '1').to_i
|
22
22
|
@statOutputCountdown = 0
|
23
23
|
end
|
24
24
|
|
@@ -24,12 +24,12 @@ class SubscriptionManager
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def add( eventName, queueName )
|
27
|
-
RServiceBus.log
|
27
|
+
RServiceBus.log 'Adding subscription for, ' + eventName + ', to, ' + queueName
|
28
28
|
@subscriptions = @subscriptionStorage.add( eventName, queueName )
|
29
29
|
end
|
30
30
|
|
31
31
|
def remove( eventName, queueName )
|
32
|
-
raise
|
32
|
+
raise 'Method, remove, needs to be implemented for this subscription storage'
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|