rservicebus 0.1.70 → 0.1.71
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.
- data/lib/rservicebus/AppResource/ScpUpload.rb +32 -33
- data/lib/rservicebus/Message.rb +17 -17
- data/lib/rservicebus/Monitor/DirNotifier.rb +70 -19
- data/lib/rservicebus/helper_functions.rb +29 -24
- metadata +12 -12
@@ -3,50 +3,49 @@ require 'net/sftp'
|
|
3
3
|
|
4
4
|
module RServiceBus
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
class ScpUploadHelper
|
7
|
+
attr_reader :uri
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
def upload( source )
|
14
|
-
#opportunity for smarts here. Could tar zip if it was a directory of files
|
9
|
+
def initialize( uri )
|
10
|
+
@uri = uri
|
11
|
+
end
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
Net::SSH.start( @uri.host, @uri.user ) do|ssh|
|
19
|
-
ssh.scp.upload!( source, @uri.path, :recursive => true )
|
20
|
-
end
|
13
|
+
def upload( source )
|
14
|
+
#opportunity for smarts here. Could tar zip if it was a directory of files
|
21
15
|
|
22
|
-
|
16
|
+
#Net::SCP.upload!(@uri.host, @uri.user, source, @uri.path, :recursive )
|
17
|
+
RServiceBus.log "Host: #{@uri.host}, User: #{@uri.user}, Source: #{source}, Destination: #{@uri.path}", true
|
18
|
+
Net::SSH.start( @uri.host, @uri.user ) do|ssh|
|
19
|
+
ssh.scp.upload!( source, @uri.path, :recursive => true )
|
20
|
+
end
|
21
|
+
end
|
23
22
|
|
24
|
-
|
25
|
-
|
23
|
+
def close
|
24
|
+
end
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
26
|
+
def delete( path, filepattern )
|
27
|
+
RServiceBus.log "Host: #{@uri.host}, User: #{@uri.user}, File Pattern: #{filepattern}, Destination: #{@uri.path}", true
|
28
|
+
regexp = Regexp.new filepattern
|
29
|
+
Net::SSH.start( @uri.host, @uri.user ) do |ssh|
|
30
|
+
ssh.sftp.connect do |sftp|
|
31
|
+
sftp.dir.foreach(path) do |entry|
|
32
|
+
if entry.name =~ regexp then
|
33
|
+
r = sftp.remove("#{path}/#{entry.name}")
|
34
|
+
r.wait
|
37
35
|
end
|
36
|
+
end
|
38
37
|
end
|
39
|
-
|
38
|
+
end
|
40
39
|
end
|
40
|
+
end
|
41
41
|
|
42
|
-
|
42
|
+
class AppResource_ScpUpload<AppResource
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
return inputDir;
|
48
|
-
end
|
44
|
+
def connect(uri)
|
45
|
+
return ScpUploadHelper.new( uri )
|
49
46
|
|
47
|
+
return inputDir;
|
50
48
|
end
|
51
49
|
|
50
|
+
end
|
52
51
|
end
|
data/lib/rservicebus/Message.rb
CHANGED
@@ -1,36 +1,36 @@
|
|
1
1
|
module RServiceBus
|
2
|
-
|
2
|
+
|
3
3
|
require "zlib"
|
4
4
|
require "yaml"
|
5
5
|
require "uuidtools"
|
6
6
|
|
7
7
|
#This is the top level message that is passed around the bus
|
8
8
|
class Message
|
9
|
-
|
9
|
+
|
10
10
|
attr_reader :returnAddress, :msgId, :remoteQueueName, :remoteHostName, :lastErrorSourceQueue, :lastErrorString, :correlationId, :sendAt
|
11
|
-
|
11
|
+
|
12
12
|
# Constructor
|
13
13
|
#
|
14
14
|
# @param [Object] msg The msg to be sent
|
15
15
|
# @param [Object] returnAddress A queue to which the destination message handler can send replies
|
16
16
|
def initialize( msg, returnAddress, correlationId=nil )
|
17
|
-
if
|
17
|
+
if !RServiceBus.checkEnvironmentVariable('RSBMSG_COMPRESS') then
|
18
18
|
@compressed = false
|
19
19
|
@_msg=YAML::dump(msg)
|
20
20
|
else
|
21
21
|
@compressed = true
|
22
22
|
@_msg=Zlib::Deflate.deflate(YAML::dump(msg))
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
@correlationId = correlationId
|
26
26
|
@returnAddress=returnAddress
|
27
|
-
|
27
|
+
|
28
28
|
@createdAt = DateTime.now
|
29
|
-
|
29
|
+
|
30
30
|
@msgId=UUIDTools::UUID.random_create
|
31
31
|
@errorList = Array.new
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
# If an error occurs while processing the message, this method allows details of the error to held
|
35
35
|
# next to the msg.
|
36
36
|
#
|
@@ -42,22 +42,22 @@ module RServiceBus
|
|
42
42
|
def addErrorMsg( sourceQueue, errorString )
|
43
43
|
@lastErrorSourceQueue = sourceQueue
|
44
44
|
@lastErrorString = errorString
|
45
|
-
|
45
|
+
|
46
46
|
@errorList << RServiceBus::ErrorMessage.new( sourceQueue, errorString )
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
def setRemoteHostName( hostName )
|
50
50
|
@remoteHostName = hostName
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
def setRemoteQueueName( queueName )
|
54
54
|
@remoteQueueName = queueName
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
def sendAt( timestamp )
|
58
58
|
@sendAt = timestamp
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
# @return [Object] The msg to be sent
|
62
62
|
def msg
|
63
63
|
if @compressed == true then
|
@@ -67,13 +67,13 @@ module RServiceBus
|
|
67
67
|
end
|
68
68
|
rescue ArgumentError => e
|
69
69
|
raise e if e.message.index( "undefined class/module " ).nil?
|
70
|
-
|
70
|
+
|
71
71
|
puts e.message
|
72
72
|
msg_name = e.message.sub( "undefined class/module ", "" )
|
73
|
-
|
73
|
+
|
74
74
|
raise ClassNotFoundForMsg.new( msg_name )
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
79
|
end
|
@@ -1,18 +1,16 @@
|
|
1
1
|
require 'cgi'
|
2
|
-
require 'zip/zip'
|
3
|
-
require 'zlib'
|
4
2
|
|
5
3
|
module RServiceBus
|
6
|
-
|
4
|
+
|
7
5
|
class Monitor_DirNotifier<Monitor
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
|
7
|
+
attr_reader :Path, :ProcessingFolder, :Filter
|
8
|
+
|
11
9
|
def connect(uri)
|
12
10
|
#Pass the path through the Dir object to check syntax on startup
|
13
11
|
begin
|
14
|
-
|
15
|
-
if !
|
12
|
+
self.open_folder uri.path
|
13
|
+
if !self.file_writable?( uri.path ) then
|
16
14
|
puts "***** Directory is not writable, #{uri.path}."
|
17
15
|
puts "***** Make the directory, #{uri.path}, writable and try again."
|
18
16
|
abort()
|
@@ -21,27 +19,80 @@ module RServiceBus
|
|
21
19
|
puts "***** Directory does not exist, #{uri.path}."
|
22
20
|
puts "***** Create the directory, #{uri.path}, and try again."
|
23
21
|
puts "***** eg, mkdir #{uri.path}"
|
24
|
-
abort()
|
22
|
+
abort()
|
25
23
|
rescue Errno::ENOTDIR => e
|
26
24
|
puts "***** The specified path does not point to a directory, #{uri.path}."
|
27
25
|
puts "***** Either repoint path to a directory, or remove, #{uri.path}, and create it as a directory."
|
28
26
|
puts "***** eg, rm #{uri.path} && mkdir #{uri.path}"
|
29
|
-
abort()
|
27
|
+
abort()
|
28
|
+
end
|
29
|
+
|
30
|
+
@Path = uri.path
|
31
|
+
|
32
|
+
if uri.query.nil?
|
33
|
+
puts "***** Processing Directory is not specified."
|
34
|
+
puts "***** Specify the Processing Directory as a query string in the Path URI"
|
35
|
+
puts "***** eg, '/#{uri.path}?processing=*ProcessingDir*"
|
36
|
+
abort()
|
37
|
+
else
|
38
|
+
parts = CGI.parse(uri.query)
|
39
|
+
|
40
|
+
if parts.has_key? "processing" then
|
41
|
+
processingUri = URI.parse parts["processing"][0]
|
42
|
+
begin
|
43
|
+
self.open_folder processingUri.path
|
44
|
+
if !self.file_writable?( processingUri.path ) then
|
45
|
+
puts "***** Processing Directory is not writable, #{processingUri.path}."
|
46
|
+
puts "***** Make the directory, #{processingUri.path}, writable and try again."
|
47
|
+
abort()
|
48
|
+
end
|
49
|
+
rescue Errno::ENOENT => e
|
50
|
+
puts "***** Processing Directory does not exist, #{processingUri.path}."
|
51
|
+
puts "***** Create the directory, #{processingUri.path}, and try again."
|
52
|
+
puts "***** eg, mkdir #{processingUri.path}"
|
53
|
+
abort()
|
54
|
+
rescue Errno::ENOTDIR => e
|
55
|
+
puts "***** Processing Directory does not point to a directory, #{processingUri.path}."
|
56
|
+
puts "***** Either repoint path to a directory, or remove, #{processingUri.path}, and create it as a directory."
|
57
|
+
puts "***** eg, rm #{processingUri.path} && mkdir #{processingUri.path}"
|
58
|
+
abort()
|
59
|
+
end
|
60
|
+
|
61
|
+
@ProcessingFolder = processingUri.path
|
62
|
+
end
|
63
|
+
|
64
|
+
@Filter = "*"
|
65
|
+
if parts.has_key? "filter" then
|
66
|
+
@Filter = parts["filter"][0]
|
67
|
+
end
|
30
68
|
end
|
31
|
-
|
32
|
-
@Path = inputDir.path
|
33
|
-
|
34
69
|
end
|
35
70
|
|
36
71
|
def Look
|
37
|
-
|
38
|
-
fileList = Dir.glob( "#{@Path}/*" )
|
72
|
+
fileList = self.get_files
|
39
73
|
fileList.each do |filePath|
|
40
|
-
|
41
|
-
|
74
|
+
newPath = self.move_file(filePath, @ProcessingFolder)
|
75
|
+
self.send( nil, URI.parse( "file://#{newPath}" ) )
|
42
76
|
end
|
43
|
-
|
44
77
|
end
|
45
|
-
|
78
|
+
|
79
|
+
def file_writable? path
|
80
|
+
return File.writable? path
|
81
|
+
end
|
82
|
+
|
83
|
+
def open_folder path
|
84
|
+
Dir.new path
|
85
|
+
end
|
86
|
+
|
87
|
+
def move_file src, dest
|
88
|
+
FileUtils.mv(src, dest)
|
89
|
+
filename = Pathname.new(src).basename
|
90
|
+
return Pathname.new(dest).join(filename)
|
91
|
+
end
|
92
|
+
|
93
|
+
def get_files
|
94
|
+
return Dir.glob( Pathname.new("#{@Path}").join(@Filter) ).select { |f| File.file?(f) }
|
95
|
+
end
|
96
|
+
|
46
97
|
end
|
47
98
|
end
|
@@ -1,59 +1,59 @@
|
|
1
1
|
module RServiceBus
|
2
|
-
|
3
|
-
|
2
|
+
|
3
|
+
|
4
4
|
def RServiceBus.convertDTOToHash( obj )
|
5
5
|
hash = {};
|
6
6
|
obj.instance_variables.each {|var| hash[var.to_s.delete("@")] = obj.instance_variable_get(var) }
|
7
|
-
|
7
|
+
|
8
8
|
return hash
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def RServiceBus.convertDTOToJson( obj )
|
12
12
|
hash = RServiceBus.convertDTOToHash(obj)
|
13
|
-
|
13
|
+
|
14
14
|
return hash.to_json
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def RServiceBus.log(string, ver=false)
|
18
|
-
return
|
19
|
-
|
18
|
+
return if RServiceBus.checkEnvironmentVariable("TESTING")
|
19
|
+
|
20
20
|
type = ver ? "VERB" : "INFO"
|
21
|
-
if
|
21
|
+
if RServiceBus.checkEnvironmentVariable("VERBOSE") || !ver then
|
22
22
|
timestamp = Time.new.strftime( "%Y-%m-%d %H:%M:%S" )
|
23
23
|
puts "[#{type}] #{timestamp} :: #{string}"
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
def RServiceBus.rlog(string)
|
28
|
-
if
|
28
|
+
if RServiceBus.checkEnvironmentVariable("RSBVERBOSE") then
|
29
29
|
timestamp = Time.new.strftime( "%Y-%m-%d %H:%M:%S" )
|
30
30
|
puts "[RSB] #{timestamp} :: #{string}"
|
31
31
|
end
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
def RServiceBus.createAnonymousClass( name_for_class )
|
35
35
|
newAnonymousClass = Class.new(Object)
|
36
36
|
Object.const_set( name_for_class, newAnonymousClass )
|
37
37
|
return Object.const_get( name_for_class ).new
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def RServiceBus.getValue( name, default=nil )
|
41
41
|
value = ( ENV[name].nil? || ENV[name] == "" ) ? default : ENV[name];
|
42
42
|
log "Env value: #{name}: #{value}"
|
43
43
|
return value
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def RServiceBus.sendMsg( msg, responseQueue="agent" )
|
47
47
|
require "rservicebus/EndpointMapping"
|
48
48
|
endpointMapping = EndpointMapping.new
|
49
49
|
endpointMapping.Configure
|
50
50
|
queueName = endpointMapping.get( msg.class.name )
|
51
|
-
|
51
|
+
|
52
52
|
ENV["RSBMQ"] = "beanstalk://localhost" if ENV["RSBMQ"].nil?
|
53
53
|
agent = RServiceBus::Agent.new
|
54
54
|
Audit.new( agent ).audit( msg )
|
55
55
|
agent.sendMsg(msg, queueName, responseQueue)
|
56
|
-
|
56
|
+
|
57
57
|
rescue QueueNotFoundForMsg=>e
|
58
58
|
msg = "\n"
|
59
59
|
msg = "#{msg}*** Queue not found for, #{e.message}\n"
|
@@ -61,18 +61,18 @@ module RServiceBus
|
|
61
61
|
msg = "#{msg}*** MESSAGE_ENDPOINT_MAPPINGS=#{e.message}:<QueueName>\n"
|
62
62
|
raise StandardError.new( msg )
|
63
63
|
end
|
64
|
-
|
64
|
+
|
65
65
|
def RServiceBus.sendMsg( msg, responseQueue="agent" )
|
66
66
|
require "rservicebus/EndpointMapping"
|
67
67
|
endpointMapping = EndpointMapping.new
|
68
68
|
endpointMapping.Configure
|
69
69
|
queueName = endpointMapping.get( msg.class.name )
|
70
|
-
|
70
|
+
|
71
71
|
ENV["RSBMQ"] = "beanstalk://localhost" if ENV["RSBMQ"].nil?
|
72
72
|
agent = RServiceBus::Agent.new
|
73
73
|
Audit.new( agent ).auditOutgoing( msg )
|
74
74
|
agent.sendMsg(msg, queueName, responseQueue)
|
75
|
-
|
75
|
+
|
76
76
|
rescue QueueNotFoundForMsg=>e
|
77
77
|
msg = "\n"
|
78
78
|
msg = "#{msg}*** Queue not found for, #{e.message}\n"
|
@@ -80,19 +80,24 @@ module RServiceBus
|
|
80
80
|
msg = "#{msg}*** MESSAGE_ENDPOINT_MAPPINGS=#{e.message}:<QueueName>\n"
|
81
81
|
raise StandardError.new( msg )
|
82
82
|
end
|
83
|
-
|
83
|
+
|
84
84
|
def RServiceBus.checkForReply( queueName )
|
85
85
|
ENV["RSBMQ"] = "beanstalk://localhost" if ENV["RSBMQ"].nil?
|
86
86
|
agent = RServiceBus::Agent.new
|
87
87
|
msg = agent.checkForReply( queueName )
|
88
88
|
Audit.new( agent ).auditIncoming( msg )
|
89
|
-
|
89
|
+
|
90
90
|
return msg
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
def RServiceBus.tick( string )
|
94
94
|
puts "[TICK] #{Time.new.strftime( '%Y-%m-%d %H:%M:%S.%6N' )} :: #{caller[0]}. #{string}"
|
95
95
|
end
|
96
|
-
|
97
|
-
|
96
|
+
|
97
|
+
def RServiceBus.checkEnvironmentVariable( string )
|
98
|
+
return false if ENV[string].nil?
|
99
|
+
return true if ENV[string] == true || ENV[string] =~ (/(true|t|yes|y|1)$/i)
|
100
|
+
return false if ENV[string] == false || ENV[string].blank? || ENV[string] =~ (/(false|f|no|n|0)$/i)
|
101
|
+
raise ArgumentError.new("invalid value for Environment Variable: \"#{string}\"")
|
102
|
+
end
|
98
103
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rservicebus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.71
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-08-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: uuidtools
|
16
|
-
requirement: &
|
16
|
+
requirement: &70094435904140 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70094435904140
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json
|
27
|
-
requirement: &
|
27
|
+
requirement: &70094435903680 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70094435903680
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: beanstalk-client
|
38
|
-
requirement: &
|
38
|
+
requirement: &70094435903220 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70094435903220
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: fluiddb
|
49
|
-
requirement: &
|
49
|
+
requirement: &70094435902780 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70094435902780
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: parse-cron
|
60
|
-
requirement: &
|
60
|
+
requirement: &70094435902320 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70094435902320
|
69
69
|
description: A Ruby interpretation of NServiceBus
|
70
70
|
email: guy@guyirvine.com
|
71
71
|
executables:
|