rservicebus 0.0.01 → 0.0.2

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.
Files changed (75) hide show
  1. data/LICENSE +1 -1
  2. data/README.md +48 -0
  3. data/bin/{rservicebus2 → rservicebus} +2 -1
  4. data/lib/rservicebus.rb +15 -54
  5. data/lib/rservicebus/Agent.rb +21 -0
  6. data/lib/rservicebus/Config.rb +125 -0
  7. data/lib/rservicebus/ErrorMessage.rb +14 -0
  8. data/lib/rservicebus/HandlerLoader.rb +100 -0
  9. data/lib/rservicebus/Host.rb +340 -0
  10. data/lib/rservicebus/Message.rb +29 -0
  11. data/lib/rservicebus/Subscription.rb +13 -0
  12. data/lib/rservicebus/helper_functions.rb +8 -81
  13. metadata +23 -150
  14. checksums.yaml +0 -7
  15. data/bin/return_messages_to_source_queue +0 -114
  16. data/bin/rsb_ctl +0 -38
  17. data/bin/rservicebus2-create +0 -107
  18. data/bin/rservicebus2-init +0 -104
  19. data/bin/rservicebus2-transport +0 -16
  20. data/bin/send_empty_message +0 -15
  21. data/lib/rservicebus/agent.rb +0 -54
  22. data/lib/rservicebus/appresource.rb +0 -65
  23. data/lib/rservicebus/appresource/dir.rb +0 -29
  24. data/lib/rservicebus/appresource/file.rb +0 -8
  25. data/lib/rservicebus/appresource/fluiddb.rb +0 -24
  26. data/lib/rservicebus/appresource_configure.rb +0 -33
  27. data/lib/rservicebus/audit.rb +0 -28
  28. data/lib/rservicebus/circuitbreaker.rb +0 -79
  29. data/lib/rservicebus/config.rb +0 -168
  30. data/lib/rservicebus/cron_manager.rb +0 -76
  31. data/lib/rservicebus/endpointmapping.rb +0 -72
  32. data/lib/rservicebus/errormessage.rb +0 -14
  33. data/lib/rservicebus/handler_loader.rb +0 -162
  34. data/lib/rservicebus/handler_manager.rb +0 -131
  35. data/lib/rservicebus/host.rb +0 -487
  36. data/lib/rservicebus/message.rb +0 -78
  37. data/lib/rservicebus/message/statisticoutput.rb +0 -7
  38. data/lib/rservicebus/message/subscription.rb +0 -10
  39. data/lib/rservicebus/message/verboseoutput.rb +0 -7
  40. data/lib/rservicebus/monitor.rb +0 -61
  41. data/lib/rservicebus/monitor/csvdir.rb +0 -52
  42. data/lib/rservicebus/monitor/dir.rb +0 -139
  43. data/lib/rservicebus/monitor/dirnotifier.rb +0 -101
  44. data/lib/rservicebus/monitor/message.rb +0 -11
  45. data/lib/rservicebus/monitor/xmldir.rb +0 -11
  46. data/lib/rservicebus/monitor_configure.rb +0 -71
  47. data/lib/rservicebus/mq.rb +0 -98
  48. data/lib/rservicebus/mq/beanstalk.rb +0 -72
  49. data/lib/rservicebus/resource_manager.rb +0 -69
  50. data/lib/rservicebus/saga/base.rb +0 -17
  51. data/lib/rservicebus/saga/data.rb +0 -20
  52. data/lib/rservicebus/saga/manager.rb +0 -128
  53. data/lib/rservicebus/saga_loader.rb +0 -118
  54. data/lib/rservicebus/saga_storage.rb +0 -18
  55. data/lib/rservicebus/saga_storage/dir.rb +0 -87
  56. data/lib/rservicebus/saga_storage/inmemory.rb +0 -37
  57. data/lib/rservicebus/sendat_manager.rb +0 -33
  58. data/lib/rservicebus/sendat_storage.rb +0 -20
  59. data/lib/rservicebus/sendat_storage/file.rb +0 -37
  60. data/lib/rservicebus/sendat_storage/inmemory.rb +0 -20
  61. data/lib/rservicebus/state_manager.rb +0 -30
  62. data/lib/rservicebus/state_storage.rb +0 -18
  63. data/lib/rservicebus/state_storage/dir.rb +0 -66
  64. data/lib/rservicebus/state_storage/inmemory.rb +0 -25
  65. data/lib/rservicebus/statistic_manager.rb +0 -86
  66. data/lib/rservicebus/stats.rb +0 -68
  67. data/lib/rservicebus/subscription_manager.rb +0 -31
  68. data/lib/rservicebus/subscription_storage.rb +0 -39
  69. data/lib/rservicebus/subscription_storage/file.rb +0 -42
  70. data/lib/rservicebus/subscription_storage/redis.rb +0 -69
  71. data/lib/rservicebus/subscription_storage_configure.rb +0 -19
  72. data/lib/rservicebus/test.rb +0 -2
  73. data/lib/rservicebus/test/bus.rb +0 -32
  74. data/lib/rservicebus/transporter.rb +0 -142
  75. data/lib/rservicebus/usermessage/withpayload.rb +0 -10
@@ -1,78 +0,0 @@
1
- require 'zlib'
2
- require 'yaml'
3
- require 'uuidtools'
4
-
5
- module RServiceBus
6
- # This is the top level message that is passed around the bus
7
- class Message
8
- attr_reader :return_address, :msg_id, :remote_queue_name, :remote_host_name,
9
- :last_error_source_queue, :last_error_string, :correlation_id,
10
- :sendat
11
-
12
- # Constructor
13
- #
14
- # @param [Object] msg The msg to be sent
15
- # @param [Object] returnAddress A queue to which the destination message
16
- # handler can send replies
17
- def initialize(msg, return_address, correlation_id = nil)
18
- if RServiceBus.check_environment_variable('RSBMSG_COMPRESS')
19
- @compressed = true
20
- @_msg = Zlib::Deflate.deflate(YAML.dump(msg))
21
- else
22
- @compressed = false
23
- @_msg = YAML.dump(msg)
24
- end
25
-
26
- @correlation_id = correlation_id
27
- @return_address = return_address
28
-
29
- @createdat = DateTime.now
30
-
31
- @msg_id = UUIDTools::UUID.random_create
32
- @error_list = []
33
- end
34
-
35
- # If an error occurs while processing the message, this method allows details of the error to held
36
- # next to the msg.
37
- #
38
- # Error(s) are held in an array, which allows current error information to be held, while still
39
- # retaining historical error messages.
40
- #
41
- # @param [Object] source_queue The name of the queue to which the msg should be returned
42
- # @param [Object] error_string A readible version of what occured
43
- def add_error_msg(source_queue, error_string)
44
- @last_error_source_queue = source_queue
45
- @last_error_string = error_string
46
-
47
- @error_list << RServiceBus::ErrorMessage.new(source_queue, error_string)
48
- end
49
-
50
- def set_remote_host_name(host_name)
51
- @remote_host_name = host_name
52
- end
53
-
54
- def set_remote_queue_name(queue_name)
55
- @remote_queue_name = queue_name
56
- end
57
-
58
- def send_at(timestamp)
59
- @send_at = timestamp
60
- end
61
-
62
- # @return [Object] The msg to be sent
63
- def msg
64
- if @compressed == true
65
- return YAML.load(Zlib::Inflate.inflate(@_msg))
66
- else
67
- return YAML.load( @_msg )
68
- end
69
- rescue ArgumentError => e
70
- raise e if e.message.index('undefined class/module ').nil?
71
-
72
- puts e.message
73
- msg_name = e.message.sub('undefined class/module ', '')
74
-
75
- raise ClassNotFoundForMsg, msg_name
76
- end
77
- end
78
- end
@@ -1,7 +0,0 @@
1
- module RServiceBus
2
- class MessageStatisticOutputOn
3
- end
4
-
5
- class MessageStatisticOutputOff
6
- end
7
- end
@@ -1,10 +0,0 @@
1
- module RServiceBus
2
- # Class to hold message subscriptions
3
- class MessageSubscription
4
- attr_reader :event_name
5
-
6
- def initialize(event_name)
7
- @event_name = event_name
8
- end
9
- end
10
- end
@@ -1,7 +0,0 @@
1
- module RServiceBus
2
- class MessageVerboseOutputOn
3
- end
4
-
5
- class MessageVerboseOutputOff
6
- end
7
- end
@@ -1,61 +0,0 @@
1
- module RServiceBus
2
- # Monitor
3
- class Monitor
4
- attr_accessor :bus
5
-
6
- # The method which actually connects to the resource.
7
- def connect(_uri)
8
- fail 'Method, connect, needs to be implemented for resource'
9
- end
10
-
11
- # The method which actually connects to the resource.
12
- def look
13
- fail 'Method, Look, needs to be implemented for the Monitor'
14
- end
15
-
16
- def _connect
17
- @connection = connect(@uri)
18
- @bus.log "#{self.class.name}. Connected to, #{@uri}" if
19
- ENV['QUIET'].nil?
20
- end
21
-
22
- # Resources are attached resources, and can be specified using the URI
23
- # syntax.
24
- # @param [String] uri a location for the resource to which we will attach,
25
- # eg redis://127.0.0.1/foo
26
- def initialize(bus, name, uri)
27
- @bus = bus
28
- new_anonymous_class = Class.new(MonitorMessage)
29
- Object.const_set(name, new_anonymous_class)
30
- @msg_type = Object.const_get(name)
31
-
32
- @uri = uri
33
- _connect
34
- end
35
-
36
- # A notification that allows cleanup
37
- def finished
38
- end
39
-
40
- # At least called in the Host rescue block, to ensure all network links
41
- # are healthy
42
- def reconnect
43
- begin
44
- finished
45
- rescue StandardError => e
46
- puts '** Monitor. An error was raised while closing connection to, ' +
47
- @uri
48
- puts 'Message: ' + e.message
49
- puts e.backtrace
50
- end
51
-
52
- _connect
53
- end
54
-
55
- def send(payload, uri)
56
- msg = @msg_type.new(payload, uri)
57
-
58
- @bus.send(msg)
59
- end
60
- end
61
- end
@@ -1,52 +0,0 @@
1
- require 'rservicebus/Monitor/Dir'
2
- require 'csv'
3
-
4
- module RServiceBus
5
- # Pull files and pre-parse as csv
6
- class MonitorCsvDir < MonitorDir
7
- def check_payload_for_number_of_columns(payload)
8
- return if @QueryStringParts.nil?
9
- return unless @QueryStringParts.key?('cols')
10
-
11
- cols = @QueryStringParts['cols'][0].to_i
12
- payload.each_with_index do |row, idx|
13
- if row.length != cols
14
- fail "Expected number of columns, #{cols}, Actual number of columns,
15
- #{row.length}, on line, #{idx}"
16
- end
17
- end
18
- end
19
-
20
- def check_send_hash
21
- if !@QueryStringParts.nil? && @QueryStringParts.key?('hash')
22
- flag = @QueryStringParts['hash'][0]
23
- return flag == 'Y'
24
- end
25
-
26
- false
27
- end
28
-
29
- def process_to_hash(p)
30
- headline = payload.shift
31
- payload = []
32
- p.each do |csvline|
33
- hash = {}
34
- csvline.each_with_index do |v, idx|
35
- hash[headline[idx]] = v
36
- end
37
- payload << hash
38
- end
39
-
40
- payload
41
- end
42
-
43
- def process_content(content)
44
- payload = CSV.parse(content)
45
- check_payload_for_number_of_columns(payload)
46
-
47
- payload = process_to_hash(payload) if check_send_hash
48
-
49
- payload
50
- end
51
- end
52
- end
@@ -1,139 +0,0 @@
1
- require 'cgi'
2
- require 'zip/zip'
3
- require 'zlib'
4
-
5
- module RServiceBus
6
- # Monitor Directory for files
7
- class MonitorDir < Monitor
8
- def connect(uri)
9
- # Pass the path through the Dir object to check syntax on startup
10
- begin
11
- input_dir = Dir.new(uri.path)
12
- unless File.writable?(uri.path)
13
- puts "***** Directory is not writable, #{uri.path}."
14
- puts "***** Make the directory, #{uri.path}, writable and try again."
15
- abort
16
- end
17
- rescue Errno::ENOENT
18
- puts "***** Directory does not exist, #{uri.path}."
19
- puts "***** Create the directory, #{uri.path}, and try again."
20
- puts "***** eg, mkdir #{uri.path}"
21
- abort
22
- rescue Errno::ENOTDIR
23
- puts "***** The specified path does not point to a directory,
24
- #{uri.path}."
25
- puts "***** Either repoint path to a directory, or remove, #{uri.path},
26
- and create it as a directory."
27
- puts "***** eg, rm #{uri.path} && mkdir #{uri.path}"
28
- abort
29
- end
30
-
31
- @path = input_dir.path
32
- @input_filter = []
33
-
34
- return if uri.query.nil?
35
- parts = CGI.parse(uri.query)
36
- @querystringparts = parts
37
- if parts.key?('archive')
38
- archiveuri = URI.parse(parts['archive'][0])
39
- unless File.directory?(archiveuri.path)
40
- puts '***** Archive file name templating not yet supported.'
41
- puts "***** Directory's only."
42
- abort
43
- end
44
- @archivedir = archiveuri.path
45
- end
46
-
47
- return unless parts.key?('input_filter')
48
-
49
- if parts['input_filter'].count > 1
50
- puts 'Too many input_filters specified.'
51
- puts '*** ZIP, or GZ are the only valid input_filters.'
52
- abort
53
- end
54
-
55
- if parts['input_filter'][0] == 'ZIP'
56
- elsif parts['input_filter'][0] == 'GZ'
57
- elsif parts['input_filter'][0] == 'TAR'
58
- else
59
- puts 'Invalid input_filter specified.'
60
- puts '*** ZIP, or GZ are the only valid input_filters.'
61
- abort
62
- end
63
- @input_filter << parts['input_filter'][0]
64
- end
65
-
66
- def process_content(content)
67
- content
68
- end
69
-
70
- def read_content_from_zip_file(file_path)
71
- zip = Zip::ZipInputStream.open(file_path)
72
- zip.get_next_entry
73
- content = zip.read
74
- zip.close
75
-
76
- content
77
- end
78
-
79
- def read_content_from_gz_file(filepath)
80
- gz = Zlib::GzipReader.open(filepath)
81
- gz.read
82
- end
83
-
84
- def read_content_from_file(file_path)
85
- content = ''
86
- if @input_filter.length > 0
87
- if @input_filter[0] == 'ZIP'
88
- content = read_content_from_zip_file(file_path)
89
- elsif @input_filter[0] == 'GZ'
90
- content = read_content_from_gz_file(file_path)
91
- elsif @input_filter[0] == 'TAR'
92
- fail 'TAR reader not implemented'
93
- end
94
-
95
- else
96
- content = IO.read(file_path)
97
- end
98
-
99
- content
100
- end
101
-
102
- def process_path(file_path)
103
- content = read_content_from_file(file_path)
104
- payload = process_content(content)
105
-
106
- send(payload, URI.parse(URI.encode("file://#{file_path}")))
107
- content
108
- end
109
-
110
- def look
111
- file_processed = 0
112
- max_files_processed = 10
113
-
114
- file_list = Dir.glob("#{@path}/*")
115
- file_list.each do |file_path|
116
- RServiceBus.log "Ready to process, #{file_path}"
117
- content = process_path(file_path)
118
-
119
- unless @archivedir.nil?
120
- basename = File.basename(file_path)
121
- new_file_path = "#{@archivedir}/#{basename}.
122
- #{DateTime.now.strftime('%Y%m%d%H%M%S%L')}.zip"
123
- RServiceBus.log "Writing to archive, #{new_file_path}"
124
-
125
- Zip::ZipOutputStream.open(new_file_path) do |zos|
126
- zos.put_next_entry(basename)
127
- zos.puts content
128
- end
129
- end
130
- File.unlink(file_path)
131
-
132
- file_processed += 1
133
- RServiceBus.log "Processed #{file_processed} of #{file_list.length}."
134
- RServiceBus.log "Allow system tick #{self.class.name}"
135
- break if file_processed >= max_files_processed
136
- end
137
- end
138
- end
139
- end
@@ -1,101 +0,0 @@
1
- require 'cgi'
2
- require 'fileutils'
3
- require 'pathname'
4
-
5
- module RServiceBus
6
- # Monitor for Directory
7
- class MonitorDirNotifier < Monitor
8
- attr_reader :Path, :ProcessingFolder, :Filter
9
- def connect(uri)
10
- # Pass the path through the Dir object to check syntax on startup
11
- begin
12
- open_folder uri.path
13
- unless File.writable?(uri.path)
14
- puts "***** Directory is not writable, #{uri.path}."
15
- puts "***** Make the directory, #{uri.path}, writable and try again."
16
- abort
17
- end
18
- rescue Errno::ENOENT
19
- puts "***** Directory does not exist, #{uri.path}."
20
- puts "***** Create the directory, #{uri.path}, and try again."
21
- puts "***** eg, mkdir #{uri.path}"
22
- abort
23
- rescue Errno::ENOTDIR
24
- puts "***** The specified path does not point to a directory,
25
- #{uri.path}."
26
- puts "***** Either repoint path to a directory, or remove, #{uri.path},
27
- and create it as a directory."
28
- puts "***** eg, rm #{uri.path} && mkdir #{uri.path}"
29
- abort
30
- end
31
-
32
- @path = uri.path
33
-
34
- if uri.query.nil?
35
- puts '***** Processing Directory is not specified.'
36
- puts '***** Specify the Processing Directory as a query string in the
37
- Path URI'
38
- puts "***** eg, '/#{uri.path}?processing=*ProcessingDir*"
39
- abort
40
- else
41
- parts = CGI.parse(uri.query)
42
-
43
- if parts.key? 'processing'
44
- processing_uri = URI.parse parts['processing'][0]
45
- begin
46
- open_folder processing_uri.path
47
- unless File.writable?(processing_uri.path)
48
- puts "***** Processing Directory is not writable,
49
- #{processingUri.path}."
50
- puts "***** Make the directory, #{processingUri.path},
51
- writable and try again."
52
- abort
53
- end
54
- rescue Errno::ENOENT
55
- puts "***** Processing Directory does not exist,
56
- #{processingUri.path}."
57
- puts "***** Create the directory, #{processingUri.path}, and try
58
- again."
59
- puts "***** eg, mkdir #{processingUri.path}"
60
- abort
61
- rescue Errno::ENOTDIR
62
- puts "***** Processing Directory does not point to a directory,
63
- #{processingUri.path}."
64
- puts "***** Either repoint path to a directory, or remove,
65
- #{processingUri.path}, and create it as a directory."
66
- puts "***** eg, rm #{processingUri.path} && mkdir
67
- #{processingUri.path}"
68
- abort
69
- end
70
-
71
- @processing_folder = processing_uri.path
72
- end
73
-
74
- @filter = '*'
75
- @filter = parts['filter'][0] if parts.key? 'filter'
76
- end
77
- end
78
-
79
- def look
80
- file_list = get_files
81
- file_list.each do |file_path|
82
- new_path = move_file(file_path, @processing_folder)
83
- send(nil, URI.parse("file://#{new_path}"))
84
- end
85
- end
86
-
87
- def open_folder(path)
88
- Dir.new path
89
- end
90
-
91
- def move_file(src, dest)
92
- FileUtils.mv(src, dest)
93
- filename = Pathname.new(src).basename
94
- Pathname.new(dest).join(filename)
95
- end
96
-
97
- def get_files
98
- Dir.glob(Pathname.new("#{@Path}").join(@Filter) ).select { |f| File.file?(f) }
99
- end
100
- end
101
- end