rservicebus 0.0.46 → 0.0.47

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,30 @@
1
1
  require 'rservicebus/Monitor/Dir'
2
2
  require 'csv'
3
3
 
4
- class Monitor_CsvDir<Monitor_Dir
4
+ module RServiceBus
5
5
 
6
-
7
- def ProcessContent( content )
8
- return CSV.parse( content )
6
+ class Monitor_CsvDir<Monitor_Dir
7
+
8
+
9
+ def checkPayloadForNumberOfColumns( payload )
10
+ if @QueryStringParts.has_key?("cols") then
11
+
12
+ cols = @QueryStringParts["cols"][0].to_i
13
+ payload.each_with_index do |row, idx|
14
+ if row.length != cols then
15
+ raise "Expected number of columns, #{cols}, Actual number of columns, #{row.length}, on line, #{idx}"
16
+ end
17
+ end
18
+ end
19
+
20
+ end
21
+
22
+ def ProcessContent( content )
23
+ payload = CSV.parse( content )
24
+ self.checkPayloadForNumberOfColumns( payload )
25
+ return payload
26
+ end
27
+
9
28
  end
10
-
11
- end
29
+
30
+ end
@@ -1,18 +1,39 @@
1
1
  require 'rservicebus/Monitor/Dir'
2
2
  require 'csv'
3
3
 
4
- class Monitor_CsvPerLineDir<Monitor_Dir
4
+ module RServiceBus
5
5
 
6
-
7
- def ProcessPath( filePath )
8
- uri = URI.parse( "file://#{filePath}" )
6
+ class Monitor_CsvPerLineDir<Monitor_Dir
7
+
9
8
 
10
- content = IO.read( filePath )
11
- CSV.parse( content ).each do |csvline|
12
- self.send( csvline, uri )
9
+ def checkPayloadForNumberOfColumns( payload )
10
+ if @QueryStringParts.has_key?("cols") then
11
+
12
+ cols = @QueryStringParts["cols"][0].to_i
13
+ payload.each_with_index do |row, idx|
14
+ if row.length != cols then
15
+ raise "Expected number of columns, #{cols}, Actual number of columns, #{row.length}, on line, #{idx}"
16
+ end
17
+ end
18
+ end
19
+
13
20
  end
14
21
 
15
- return content
16
- end
22
+ def ProcessPath( filePath )
23
+ uri = URI.parse( "file://#{filePath}" )
24
+
25
+ content = IO.read( filePath )
26
+ payload = CSV.parse( content )
27
+
28
+ self.checkPayloadForNumberOfColumns( payload )
29
+
30
+ payload.each do |csvline|
31
+ self.send( csvline, uri )
32
+ end
17
33
 
34
+ return content
35
+ end
36
+
37
+ end
38
+
18
39
  end
@@ -3,131 +3,136 @@ require 'cgi'
3
3
  require 'zip/zip'
4
4
  require 'zlib'
5
5
 
6
- class Monitor_Dir<Monitor
6
+ module RServiceBus
7
7
 
8
- @Path
9
- @ArchiveDir
10
- @InputFilter
11
-
12
- def connect(uri)
13
- #Pass the path through the Dir object to check syntax on startup
14
- inputDir = Dir.new( uri.path )
15
- @Path = inputDir.path
16
- @InputFilter = Array.new
8
+ class Monitor_Dir<Monitor
17
9
 
18
- return if uri.query.nil?
19
- parts = CGI.parse(uri.query)
20
- if parts.has_key?("archive") then
21
- archiveUri = URI.parse( parts["archive"][0] )
22
- if !File.directory?( archiveUri.path ) then
23
- puts "***** Archive file name templating not yet supported."
24
- puts "***** Directory's only."
25
- abort()
26
- end
27
- @ArchiveDir = archiveUri.path
28
- end
10
+ @Path
11
+ @ArchiveDir
12
+ @InputFilter
13
+ @QueryStringParts
29
14
 
30
- if parts.has_key?("inputfilter") then
31
- if parts["inputfilter"].count > 1 then
32
- puts "Too many inputfilters specified."
33
- puts "*** ZIP, or GZ are the only valid inputfilters."
34
- abort();
15
+ def connect(uri)
16
+ #Pass the path through the Dir object to check syntax on startup
17
+ inputDir = Dir.new( uri.path )
18
+ @Path = inputDir.path
19
+ @InputFilter = Array.new
20
+
21
+ return if uri.query.nil?
22
+ parts = CGI.parse(uri.query)
23
+ @QueryStringParts = parts
24
+ if parts.has_key?("archive") then
25
+ archiveUri = URI.parse( parts["archive"][0] )
26
+ if !File.directory?( archiveUri.path ) then
27
+ puts "***** Archive file name templating not yet supported."
28
+ puts "***** Directory's only."
29
+ abort()
30
+ end
31
+ @ArchiveDir = archiveUri.path
35
32
  end
36
33
 
37
- if parts["inputfilter"][0] == "ZIP" then
38
- elsif parts["inputfilter"][0] == "GZ" then
39
- elsif parts["inputfilter"][0] == "TAR" then
40
- else
41
- puts "Invalid inputfilter specified."
42
- puts "*** ZIP, or GZ are the only valid inputfilters."
43
- abort();
34
+ if parts.has_key?("inputfilter") then
35
+ if parts["inputfilter"].count > 1 then
36
+ puts "Too many inputfilters specified."
37
+ puts "*** ZIP, or GZ are the only valid inputfilters."
38
+ abort();
39
+ end
40
+
41
+ if parts["inputfilter"][0] == "ZIP" then
42
+ elsif parts["inputfilter"][0] == "GZ" then
43
+ elsif parts["inputfilter"][0] == "TAR" then
44
+ else
45
+ puts "Invalid inputfilter specified."
46
+ puts "*** ZIP, or GZ are the only valid inputfilters."
47
+ abort();
48
+ end
49
+ @InputFilter << parts["inputfilter"][0]
44
50
  end
45
- @InputFilter << parts["inputfilter"][0]
51
+
52
+
46
53
  end
47
54
 
55
+ def ProcessContent( content )
56
+ return content
57
+ end
48
58
 
49
- end
50
-
51
- def ProcessContent( content )
52
- return content
53
- end
54
-
55
- def ReadContentFromZipFile( filePath )
56
- zip = Zip::ZipInputStream::open(filePath)
57
- entry = zip.get_next_entry
58
- content = zip.read
59
- zip.close
59
+ def ReadContentFromZipFile( filePath )
60
+ zip = Zip::ZipInputStream::open(filePath)
61
+ entry = zip.get_next_entry
62
+ content = zip.read
63
+ zip.close
64
+
65
+ return entry, content
66
+ end
60
67
 
61
- return entry, content
62
- end
63
-
64
- def ReadContentFromGzFile( filePath )
65
- gz = Zlib::GzipReader.open(filePath)
66
- return gz.read
67
- end
68
-
69
- def ReadContentFromTarFile( filePath )
70
- content = ""
71
- Gem::Package::TarReader.new( filePath ).each do |entry|
72
- content = entry.read
73
- return content
68
+ def ReadContentFromGzFile( filePath )
69
+ gz = Zlib::GzipReader.open(filePath)
70
+ return gz.read
74
71
  end
75
- end
76
-
77
- def ReadContentFromFile( filePath )
78
- content = ""
79
- if @InputFilter.length > 0 then
80
- if @InputFilter[0] == 'ZIP' then
81
- entry, content = self.ReadContentFromZipFile( filePath )
82
- elsif @InputFilter[0] == 'GZ' then
83
- content = self.ReadContentFromGzFile( filePath )
84
- elsif @InputFilter[0] == 'TAR' then
85
- content = self.ReadContentFromTarFile( filePath )
72
+
73
+ def ReadContentFromTarFile( filePath )
74
+ content = ""
75
+ Gem::Package::TarReader.new( filePath ).each do |entry|
76
+ content = entry.read
77
+ return content
86
78
  end
87
-
88
- else
89
- content = IO.read( filePath )
90
79
  end
91
80
 
92
- return content
93
- end
94
-
95
- def ProcessPath( filePath )
96
- content = self.ReadContentFromFile( filePath )
97
- payload = self.ProcessContent( content )
81
+ def ReadContentFromFile( filePath )
82
+ content = ""
83
+ if @InputFilter.length > 0 then
84
+ if @InputFilter[0] == 'ZIP' then
85
+ entry, content = self.ReadContentFromZipFile( filePath )
86
+ elsif @InputFilter[0] == 'GZ' then
87
+ content = self.ReadContentFromGzFile( filePath )
88
+ elsif @InputFilter[0] == 'TAR' then
89
+ content = self.ReadContentFromTarFile( filePath )
90
+ end
91
+
92
+ else
93
+ content = IO.read( filePath )
94
+ end
95
+
96
+ return content
97
+ end
98
98
 
99
- self.send( payload, URI.parse( "file://#{filePath}" ) )
100
- return content
101
- end
102
-
103
- def Look
104
- fileProcessed = 0
105
- maxFilesProcessed = 10
99
+ def ProcessPath( filePath )
100
+ content = self.ReadContentFromFile( filePath )
101
+ payload = self.ProcessContent( content )
102
+
103
+ self.send( payload, URI.parse( "file://#{filePath}" ) )
104
+ return content
105
+ end
106
106
 
107
- fileList = Dir.glob( "#{@Path}/*" )
108
- fileList.each do |filePath|
109
- @Bus.log "Ready to process, #{filePath}", true
110
- content = self.ProcessPath( filePath )
107
+ def Look
108
+ fileProcessed = 0
109
+ maxFilesProcessed = 10
111
110
 
112
- if !@ArchiveDir.nil? then
113
- basename = File.basename( filePath )
114
- newFilePath = @ArchiveDir + "/" + basename + "." + DateTime.now.strftime( "%Y%m%d%H%M%S%L") + ".zip"
115
- @Bus.log "Writing to archive, #{newFilePath}", true
111
+ fileList = Dir.glob( "#{@Path}/*" )
112
+ fileList.each do |filePath|
113
+ @Bus.log "Ready to process, #{filePath}", true
114
+ content = self.ProcessPath( filePath )
116
115
 
117
- Zip::ZipOutputStream.open(newFilePath) {
118
- |zos|
119
- zos.put_next_entry(basename)
120
- zos.puts content
121
- }
116
+ if !@ArchiveDir.nil? then
117
+ basename = File.basename( filePath )
118
+ newFilePath = @ArchiveDir + "/" + basename + "." + DateTime.now.strftime( "%Y%m%d%H%M%S%L") + ".zip"
119
+ @Bus.log "Writing to archive, #{newFilePath}", true
120
+
121
+ Zip::ZipOutputStream.open(newFilePath) {
122
+ |zos|
123
+ zos.put_next_entry(basename)
124
+ zos.puts content
125
+ }
126
+ end
127
+ File.unlink( filePath )
128
+
129
+ fileProcessed = fileProcessed + 1
130
+ @Bus.log "Processed #{fileProcessed} of #{fileList.length}.", true
131
+ @Bus.log "Allow system tick #{self.class.name}", true
132
+ return if fileProcessed >= maxFilesProcessed
122
133
  end
123
- File.unlink( filePath )
124
134
 
125
- fileProcessed = fileProcessed + 1
126
- @Bus.log "Processed #{fileProcessed} of #{fileList.length}.", true
127
- @Bus.log "Allow system tick #{self.class.name}", true
128
- return if fileProcessed >= maxFilesProcessed
129
135
  end
130
136
 
131
137
  end
132
-
133
138
  end
@@ -1,12 +1,16 @@
1
- class Monitor_Message
2
- attr_reader :payload, :uri
3
-
4
- @payload
5
- @uri
6
-
7
- def initialize( payload, uri )
8
- @payload = payload
9
- @uri = uri
1
+ module RServiceBus
2
+
3
+ class Monitor_Message
4
+ attr_reader :payload, :uri
5
+
6
+ @payload
7
+ @uri
8
+
9
+ def initialize( payload, uri )
10
+ @payload = payload
11
+ @uri = uri
12
+ end
13
+
10
14
  end
11
15
 
12
16
  end
@@ -1,11 +1,15 @@
1
1
  require 'rservicebus/Monitor/Dir'
2
2
  require 'xmlsimple'
3
3
 
4
- class Monitor_XmlDir<Monitor_Dir
5
-
6
-
7
- def ProcessContent( content )
8
- return XmlSimple.xml_in( content )
4
+ module RServiceBus
5
+
6
+ class Monitor_XmlDir<Monitor_Dir
7
+
8
+
9
+ def ProcessContent( content )
10
+ return XmlSimple.xml_in( content )
11
+ end
12
+
9
13
  end
10
-
14
+
11
15
  end
@@ -1,64 +1,67 @@
1
- class Monitor
2
-
3
- attr_accessor :Bus
4
-
5
- @Bus
6
- @uri
7
- @connection
8
- @MsgType
1
+ module RServiceBus
9
2
 
10
- # The method which actually connects to the resource.
11
- #
12
- def connect(uri)
13
- raise "Method, connect, needs to be implemented for resource"
14
- end
15
-
16
- # The method which actually connects to the resource.
17
- #
18
- def Look
19
- raise "Method, Look, needs to be implemented for the Monitor"
20
- end
21
-
22
- def _connect
23
- @connection = self.connect(@uri)
24
- @Bus.log "#{self.class.name}. Connected to, #{@uri.to_s}" unless !ENV["QUIET"].nil?
25
- end
26
-
27
- # Resources are attached resources, and can be specified using the URI syntax.
28
- #
29
- # @param [String] uri a location for the resource to which we will attach, eg redis://127.0.0.1/foo
30
- def initialize( bus, name, uri )
31
- @Bus = bus
32
- # @MsgType = Object.const_get( name )
33
- newAnonymousClass = Class.new(Monitor_Message)
34
- Object.const_set( name, newAnonymousClass )
35
- @MsgType = Object.const_get( name )
3
+ class Monitor
36
4
 
37
-
38
- @uri = uri
39
- self._connect
40
- end
41
-
42
- # A notification that allows cleanup
43
- def finished
44
- end
45
-
46
- # At least called in the Host rescue block, to ensure all network links are healthy
47
- def reconnect
48
- begin
49
- self.finished
50
- rescue Exception => e
51
- puts "** Monitor. An error was raised while closing connection to, " + @uri.to_s
52
- puts "Message: " + e.message
53
- puts e.backtrace
5
+ attr_accessor :Bus
6
+
7
+ @Bus
8
+ @uri
9
+ @connection
10
+ @MsgType
11
+
12
+ # The method which actually connects to the resource.
13
+ #
14
+ def connect(uri)
15
+ raise "Method, connect, needs to be implemented for resource"
54
16
  end
55
17
 
56
- self._connect
57
- end
58
-
59
- def send( payload, uri )
60
- msg = @MsgType.new( payload, uri )
61
-
62
- @Bus.Send( msg )
18
+ # The method which actually connects to the resource.
19
+ #
20
+ def Look
21
+ raise "Method, Look, needs to be implemented for the Monitor"
22
+ end
23
+
24
+ def _connect
25
+ @connection = self.connect(@uri)
26
+ @Bus.log "#{self.class.name}. Connected to, #{@uri.to_s}" unless !ENV["QUIET"].nil?
27
+ end
28
+
29
+ # Resources are attached resources, and can be specified using the URI syntax.
30
+ #
31
+ # @param [String] uri a location for the resource to which we will attach, eg redis://127.0.0.1/foo
32
+ def initialize( bus, name, uri )
33
+ @Bus = bus
34
+ # @MsgType = Object.const_get( name )
35
+ newAnonymousClass = Class.new(Monitor_Message)
36
+ Object.const_set( name, newAnonymousClass )
37
+ @MsgType = Object.const_get( name )
38
+
39
+
40
+ @uri = uri
41
+ self._connect
42
+ end
43
+
44
+ # A notification that allows cleanup
45
+ def finished
46
+ end
47
+
48
+ # At least called in the Host rescue block, to ensure all network links are healthy
49
+ def reconnect
50
+ begin
51
+ self.finished
52
+ rescue Exception => e
53
+ puts "** Monitor. An error was raised while closing connection to, " + @uri.to_s
54
+ puts "Message: " + e.message
55
+ puts e.backtrace
56
+ end
57
+
58
+ self._connect
59
+ end
60
+
61
+ def send( payload, uri )
62
+ msg = @MsgType.new( payload, uri )
63
+
64
+ @Bus.Send( msg )
65
+ end
63
66
  end
64
67
  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.0.46
4
+ version: 0.0.47
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-11 00:00:00.000000000 Z
12
+ date: 2013-03-12 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A Ruby interpretation of NServiceBus
15
15
  email: guy@guyirvine.com