rservicebus2 0.2.11 → 0.2.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rservicebus2.rb +0 -1
- data/lib/rservicebus2/helper_functions.rb +1 -1
- data/lib/rservicebus2/host.rb +24 -12
- data/lib/rservicebus2/monitor/beanstalk.rb +53 -0
- data/lib/rservicebus2/monitor/dir.rb +25 -22
- data/lib/rservicebus2/monitor/dirnotifier.rb +18 -25
- data/lib/rservicebus2/monitor_configure.rb +3 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 920ff69a3fdd0f96882ed1c8bc12dd82d78ed789fa92c664f1b80f1484365058
|
4
|
+
data.tar.gz: c41fa4a4284bfba83865cc6bac87e54312c26b556a6605f6e73022b8716c921c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e68d15cc10acdb2565ab02d6d8cfd3dc8b1a871becfe9a6b66f319d763526c16df8977456aadec9b5c2cc66595082bfde320a02458e384b2753b7be68cc01726
|
7
|
+
data.tar.gz: f1c1c5ea85bf0920206067b92b58544068084b0e631c29ce6fdb00783114f87e507d59d3f2c237d1b307a9b3df7430deaf8ef74bf020ca6874c029801bfe99b0
|
data/lib/rservicebus2.rb
CHANGED
data/lib/rservicebus2/host.rb
CHANGED
@@ -252,18 +252,30 @@ module RServiceBus2
|
|
252
252
|
message_loop = false
|
253
253
|
rescue NoMsgToProcess => e
|
254
254
|
# This exception is just saying there are no messages to process
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
255
|
+
begin
|
256
|
+
@queue_for_msgs_to_be_sent_on_complete = []
|
257
|
+
@monitors.each(&:look)
|
258
|
+
send_queued_msgs
|
259
|
+
@queue_for_msgs_to_be_sent_on_complete = nil
|
260
|
+
|
261
|
+
@queue_for_msgs_to_be_sent_on_complete = []
|
262
|
+
@cron_manager.run
|
263
|
+
send_queued_msgs
|
264
|
+
@queue_for_msgs_to_be_sent_on_complete = nil
|
265
|
+
|
266
|
+
@send_at_manager.process
|
267
|
+
@circuit_breaker.success
|
268
|
+
rescue StandardError => e
|
269
|
+
if e.message == 'SIGTERM' || e.message == 'SIGINT'
|
270
|
+
puts 'Exiting on request ...'
|
271
|
+
message_loop = false
|
272
|
+
else
|
273
|
+
puts '*** This is really unexpected.'
|
274
|
+
message_loop = false
|
275
|
+
puts "Message: #{e.message}"
|
276
|
+
puts e.backtrace
|
277
|
+
end
|
278
|
+
end
|
267
279
|
rescue StandardError => e
|
268
280
|
if e.message == 'SIGTERM' || e.message == 'SIGINT'
|
269
281
|
puts 'Exiting on request ...'
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'beanstalk-client'
|
4
|
+
require 'cgi'
|
5
|
+
|
6
|
+
module RServiceBus2
|
7
|
+
# Monitor S3 Bucket for objects
|
8
|
+
class MonitorBeanstalk < Monitor
|
9
|
+
def deduce_timeout(uri)
|
10
|
+
return 5 if uri.query.nil?
|
11
|
+
|
12
|
+
CGI.parse(u.query)['timeout1']&.first || 5
|
13
|
+
end
|
14
|
+
|
15
|
+
# rubocop:disable Metrics/MethodLength,Metrics/AbcSize
|
16
|
+
def connect(uri)
|
17
|
+
@uri = uri
|
18
|
+
@timeout = deduce_timeout(uri)
|
19
|
+
|
20
|
+
queue_name = uri.path.sub('/', '')
|
21
|
+
|
22
|
+
port ||= 11_300
|
23
|
+
connection_string = "#{uri.host}:#{port}"
|
24
|
+
@beanstalk = Beanstalk::Pool.new([connection_string])
|
25
|
+
|
26
|
+
@beanstalk.watch(queue_name)
|
27
|
+
@message_uri = "beanstalk://#{uri.host}:#{port}/#{queue_name}"
|
28
|
+
rescue StandardError => e
|
29
|
+
puts "Error connecting to Beanstalk, Host string, #{connection_string}"
|
30
|
+
if e.message == 'Beanstalk::NotConnected'
|
31
|
+
puts '***Most likely, beanstalk is not running. Start beanstalk, and try running this again.\n' \
|
32
|
+
"***If you still get this error, check beanstalk is running at, #{connection_string}"
|
33
|
+
abort
|
34
|
+
end
|
35
|
+
|
36
|
+
puts e.message
|
37
|
+
puts e.backtrace
|
38
|
+
end
|
39
|
+
# rubocop:enable Metrics/MethodLength,Metrics/AbcSize
|
40
|
+
|
41
|
+
def look
|
42
|
+
job = @beanstalk.reserve @timeout
|
43
|
+
send(job.body, "#{@message_uri}/#{job.id}")
|
44
|
+
job_body = job.body
|
45
|
+
job.delete
|
46
|
+
job_body
|
47
|
+
rescue StandardError => e
|
48
|
+
return if e.message == 'TIMED_OUT'
|
49
|
+
|
50
|
+
raise e
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -28,6 +28,7 @@ module RServiceBus2
|
|
28
28
|
abort
|
29
29
|
end
|
30
30
|
|
31
|
+
# rubocop:disable Metrics/MethodLength
|
31
32
|
def connect(uri)
|
32
33
|
@path = input_dir(uri).path
|
33
34
|
@input_filter = []
|
@@ -54,16 +55,14 @@ module RServiceBus2
|
|
54
55
|
abort
|
55
56
|
end
|
56
57
|
|
57
|
-
|
58
|
-
elsif parts['input_filter'][0] == 'GZ'
|
59
|
-
elsif parts['input_filter'][0] == 'TAR'
|
60
|
-
else
|
58
|
+
unless %w[ZIP GZ TAR].include?(parts['input_filter'][0]).nil?
|
61
59
|
puts 'Invalid input_filter specified.'
|
62
60
|
puts '*** ZIP, or GZ are the only valid input_filters.'
|
63
61
|
abort
|
64
62
|
end
|
65
63
|
@input_filter << parts['input_filter'][0]
|
66
64
|
end
|
65
|
+
# rubocop:enable Metrics/MethodLength
|
67
66
|
|
68
67
|
def process_content(content)
|
69
68
|
content
|
@@ -86,13 +85,14 @@ module RServiceBus2
|
|
86
85
|
# rubocop:disable Metrics/MethodLength
|
87
86
|
def read_content_from_file(file_path)
|
88
87
|
content = ''
|
89
|
-
if @input_filter.
|
90
|
-
|
88
|
+
if @input_filter.positive?
|
89
|
+
case @input_filter[0]
|
90
|
+
when 'ZIP'
|
91
91
|
content = read_content_from_zip_file(file_path)
|
92
|
-
|
92
|
+
when 'GZ'
|
93
93
|
content = read_content_from_gz_file(file_path)
|
94
|
-
|
95
|
-
|
94
|
+
when 'TAR'
|
95
|
+
raise 'TAR reader not implemented'
|
96
96
|
end
|
97
97
|
|
98
98
|
else
|
@@ -101,15 +101,27 @@ module RServiceBus2
|
|
101
101
|
|
102
102
|
content
|
103
103
|
end
|
104
|
+
# rubocop:enable Metrics/MethodLength
|
104
105
|
|
105
106
|
def process_path(file_path)
|
106
107
|
content = read_content_from_file(file_path)
|
107
108
|
payload = process_content(content)
|
108
109
|
|
109
|
-
send(payload, URI.parse(
|
110
|
+
send(payload, URI.parse(CGI.escape("file://#{file_path}")))
|
110
111
|
content
|
111
112
|
end
|
112
113
|
|
114
|
+
def archive_file(file_path, content)
|
115
|
+
basename = File.basename(file_path)
|
116
|
+
new_file_path = "#{@archivedir}/#{basename}.#{Time.now.strftime('%Y%m%d%H%M%S%L')}.zip"
|
117
|
+
RServiceBus2.log "Writing to archive, #{new_file_path}"
|
118
|
+
|
119
|
+
Zip::ZipOutputStream.open(new_file_path) do |zos|
|
120
|
+
zos.put_next_entry(basename)
|
121
|
+
zos.puts content
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
113
125
|
def look
|
114
126
|
file_processed = 0
|
115
127
|
max_files_processed = 10
|
@@ -123,21 +135,12 @@ module RServiceBus2
|
|
123
135
|
RServiceBus2.log "Ready to process, #{file_path}"
|
124
136
|
content = process_path(file_path)
|
125
137
|
|
126
|
-
unless @archivedir.nil?
|
127
|
-
basename = File.basename(file_path)
|
128
|
-
new_file_path = "#{@archivedir}/#{basename}.#{Time.now.strftime('%Y%m%d%H%M%S%L')}.zip"
|
129
|
-
RServiceBus2.log "Writing to archive, #{new_file_path}"
|
130
|
-
|
131
|
-
Zip::ZipOutputStream.open(new_file_path) do |zos|
|
132
|
-
zos.put_next_entry(basename)
|
133
|
-
zos.puts content
|
134
|
-
end
|
135
|
-
end
|
138
|
+
archive_file(file_path, content) unless @archivedir.nil?
|
136
139
|
File.unlink(file_path)
|
137
140
|
|
138
141
|
file_processed += 1
|
139
|
-
RServiceBus2.log "Processed #{file_processed} of #{file_list.length}."
|
140
|
-
|
142
|
+
RServiceBus2.log "Processed #{file_processed} of #{file_list.length}.\nAllow system tick #{self.class.name}"
|
143
|
+
|
141
144
|
break if file_processed >= max_files_processed
|
142
145
|
end
|
143
146
|
end
|
@@ -14,21 +14,19 @@ module RServiceBus2
|
|
14
14
|
begin
|
15
15
|
open_folder uri.path
|
16
16
|
unless File.writable?(uri.path)
|
17
|
-
puts "***** Directory is not writable, #{uri.path}
|
18
|
-
|
17
|
+
puts "***** Directory is not writable, #{uri.path}.\n" \
|
18
|
+
"***** Make the directory, #{uri.path}, writable and try again."
|
19
19
|
abort
|
20
20
|
end
|
21
21
|
rescue Errno::ENOENT
|
22
|
-
puts "***** Directory does not exist, #{uri.path}
|
23
|
-
|
24
|
-
|
22
|
+
puts "***** Directory does not exist, #{uri.path}.\n" \
|
23
|
+
"***** Create the directory, #{uri.path}, and try again.\n" \
|
24
|
+
"***** eg, mkdir #{uri.path}"
|
25
25
|
abort
|
26
26
|
rescue Errno::ENOTDIR
|
27
|
-
puts "***** The specified path does not point to a directory,
|
28
|
-
|
29
|
-
|
30
|
-
and create it as a directory."
|
31
|
-
puts "***** eg, rm #{uri.path} && mkdir #{uri.path}"
|
27
|
+
puts "***** The specified path does not point to a directory, #{uri.path}." \
|
28
|
+
"***** Either repoint path to a directory, or remove, #{uri.path}, and create it as a directory." \
|
29
|
+
"***** eg, rm #{uri.path} && mkdir #{uri.path}"
|
32
30
|
abort
|
33
31
|
end
|
34
32
|
|
@@ -48,26 +46,21 @@ module RServiceBus2
|
|
48
46
|
begin
|
49
47
|
open_folder processing_uri.path
|
50
48
|
unless File.writable?(processing_uri.path)
|
51
|
-
puts "*****
|
49
|
+
puts "***** 1Processing Directory is not writable,
|
52
50
|
#{processing_uri.path}."
|
53
51
|
puts "***** Make the directory, #{processing_uri.path},
|
54
52
|
writable and try again."
|
55
53
|
abort
|
56
54
|
end
|
57
55
|
rescue Errno::ENOENT
|
58
|
-
puts "***** Processing Directory does not exist,
|
59
|
-
|
60
|
-
|
61
|
-
again."
|
62
|
-
puts "***** eg, mkdir #{processing_uri.path}"
|
56
|
+
puts "***** Processing Directory does not exist, #{processing_uri.path}." \
|
57
|
+
"***** Create the directory, #{processing_uri.path}, and try again." \
|
58
|
+
"***** eg, mkdir #{processing_uri.path}"
|
63
59
|
abort
|
64
60
|
rescue Errno::ENOTDIR
|
65
|
-
puts "***** Processing Directory does not point to a directory,
|
66
|
-
|
67
|
-
|
68
|
-
#{processing_uri.path}, and create it as a directory."
|
69
|
-
puts "***** eg, rm #{processing_uri.path} && mkdir
|
70
|
-
#{processing_uri.path}"
|
61
|
+
puts "***** Processing Directory does not point to a directory, #{processing_uri.path}." \
|
62
|
+
"***** Either repoint path to a directory, or remove, #{processing_uri.path}, and create it as a directory.\n" \
|
63
|
+
"***** eg, rm #{processing_uri.path} && mkdir #{processing_uri.path}"
|
71
64
|
abort
|
72
65
|
end
|
73
66
|
|
@@ -80,7 +73,7 @@ module RServiceBus2
|
|
80
73
|
end
|
81
74
|
|
82
75
|
def look
|
83
|
-
file_list =
|
76
|
+
file_list = files
|
84
77
|
file_list.each do |file_path|
|
85
78
|
new_path = move_file(file_path, @processing_folder)
|
86
79
|
send(nil, URI.parse("file://#{new_path}"))
|
@@ -97,8 +90,8 @@ module RServiceBus2
|
|
97
90
|
Pathname.new(dest).join(filename)
|
98
91
|
end
|
99
92
|
|
100
|
-
def
|
101
|
-
Dir.glob(Pathname.new(
|
93
|
+
def files
|
94
|
+
Dir.glob(Pathname.new(@path).join(@filter)).select { |f| File.file?(f) }
|
102
95
|
end
|
103
96
|
end
|
104
97
|
end
|
@@ -57,6 +57,9 @@ module RServiceBus2
|
|
57
57
|
when 'dirnotifier'
|
58
58
|
require 'rservicebus2/monitor/dirnotifier'
|
59
59
|
monitor = MonitorDirNotifier.new(@host, name, uri)
|
60
|
+
when 'beanstalk'
|
61
|
+
require 'rservicebus2/monitor/beanstalk'
|
62
|
+
monitor = MonitorBeanstalk.new(@host, name, uri)
|
60
63
|
else
|
61
64
|
abort("Scheme, #{uri.scheme}, not recognised when configuring
|
62
65
|
Monitor, #{key}=#{val}")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rservicebus2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guy Irvine
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: beanstalk-client
|
@@ -129,6 +129,7 @@ files:
|
|
129
129
|
- lib/rservicebus2/monitor.rb
|
130
130
|
- lib/rservicebus2/monitor/awss3.rb
|
131
131
|
- lib/rservicebus2/monitor/awssqs.rb
|
132
|
+
- lib/rservicebus2/monitor/beanstalk.rb
|
132
133
|
- lib/rservicebus2/monitor/dir.rb
|
133
134
|
- lib/rservicebus2/monitor/dirnotifier.rb
|
134
135
|
- lib/rservicebus2/monitor/message.rb
|