rservicebus 0.1.9 → 0.1.10

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.
@@ -0,0 +1,68 @@
1
+ module RServiceBus
2
+
3
+ class State
4
+
5
+ def initialize( path )
6
+ @path = path
7
+ end
8
+
9
+ def get( name )
10
+ return -1 unless @state.has_key?("name")
11
+
12
+ return @state["name"]
13
+ end
14
+
15
+ def set( name, id )
16
+ @state["name"] = id
17
+ end
18
+
19
+ def load
20
+ if !File.exists?( @path ) then
21
+ @state = Hash.new if !File.exists?( @path )
22
+ return
23
+ end
24
+
25
+ content = IO.read( @path )
26
+ if content == "" then
27
+ @state = Hash.new
28
+ end
29
+
30
+
31
+ @state = YAML::load( content )
32
+ end
33
+
34
+ def save
35
+ content = YAML::dump( @state )
36
+ IO.write( @path, content )
37
+ end
38
+
39
+ def close
40
+
41
+ end
42
+
43
+ end
44
+
45
+
46
+ class AppResource_State<AppResource
47
+
48
+ def connect(uri)
49
+ return State.new( uri.path )
50
+ end
51
+
52
+ # Transaction Semantics
53
+ def Begin
54
+ @connection.load
55
+ end
56
+
57
+ # Transaction Semantics
58
+ def Commit
59
+ @connection.save
60
+ end
61
+
62
+ # Transaction Semantics
63
+ def Rollback
64
+ @connection.load
65
+ end
66
+ end
67
+
68
+ end
@@ -48,26 +48,44 @@ class Transporter
48
48
  abort();
49
49
  end
50
50
 
51
- def process
52
- #Get the next job from the source queue
53
- job = @source.reserve @timeout
54
- msg = YAML::load(job.body)
55
-
56
- log "job: #{job.body}", true
57
-
51
+ def connectToRemoteSSH( remoteHostName )
52
+ return if @remoteHostName == remoteHostName
58
53
 
54
+ self.disconnectFromRemoteSSH
55
+
59
56
  #Get destination url from job
60
- remote_host = msg.remoteHostName
61
- remote_user = getValue( "REMOTE_USER_#{remote_host.upcase}", "beanstalk" )
62
- gateway = Net::SSH::Gateway.new(remote_host, remote_user)
57
+ @remoteHostName = remoteHostName
58
+ @remoteUserName = getValue( "REMOTE_USER_#{remoteHostName.upcase}", "beanstalk" )
59
+ @gateway = Net::SSH::Gateway.new(remoteHostName, @remoteUserName)
63
60
 
64
61
  # Open port 27018 to forward to 127.0.0.11300 on the remote host
65
- gateway.open('127.0.0.1', 11300, 27018)
62
+ @gateway.open('127.0.0.1', 11300, 27018)
63
+ log "Connect to Remote SSH, #{@remoteHostName}"
64
+
65
+ return @gateway
66
+ end
66
67
 
67
- log "Connect to destination beanstalk"
68
+ def disconnectFromRemoteSSH
69
+ return if @gateway.nil?
70
+
71
+ log "Disconnect from Remote SSH, #{@remoteHostName}"
72
+ @gateway.shutdown!
73
+ @remoteHostName = nil
74
+ @gateway = nil
75
+ end
76
+
77
+
78
+ def connectToRemoteBeanstalk( remoteHostName, remoteQueueName )
79
+ self.connectToRemoteSSH( remoteHostName )
80
+
81
+ #Test connection
82
+ return if @remoteQueueName == remoteQueueName
83
+
84
+
85
+ log "Connect to Remote Beanstalk, #{remoteQueueName}"
68
86
  begin
69
87
  destinationUrl = '127.0.0.1:27018'
70
- destination = Beanstalk::Pool.new([destinationUrl])
88
+ @destination = Beanstalk::Pool.new([destinationUrl])
71
89
  rescue Exception => e
72
90
  if e.message == "Beanstalk::NotConnected" then
73
91
  puts "***Could not connect to destination, check beanstalk is running at, #{destinationUrl}"
@@ -75,10 +93,33 @@ class Transporter
75
93
  end
76
94
  raise
77
95
  end
96
+
97
+ log "Use queue, #{remoteQueueName}", true
98
+ @destination.use( remoteQueueName )
99
+ @remoteQueueName = remoteQueueName
100
+ end
101
+
102
+ def disconnectFromRemoteBeanstalk
103
+ self.disconnectFromRemoteSSH
104
+ return if @destination.nil?
105
+
106
+ log "Disconnect from Remote Beanstalk, #{@remoteQueueName}"
107
+ @destination.close
108
+ @remoteQueueName = nil
109
+ end
110
+
111
+
112
+ def process
113
+ #Get the next job from the source queue
114
+ job = @source.reserve @timeout
115
+ msg = YAML::load(job.body)
116
+
117
+ # log "job: #{job.body}", true
118
+
119
+ self.connectToRemoteBeanstalk( msg.remoteHostName, msg.remoteQueueName )
78
120
 
79
- log "Put msg, #{job.body}", true
80
- destination.use( msg.remoteQueueName )
81
- destination.put( job.body )
121
+ log "Put msg", true
122
+ @destination.put( job.body )
82
123
 
83
124
  if !ENV['AUDIT_QUEUE_NAME'].nil? then
84
125
  @source.use ENV['AUDIT_QUEUE_NAME']
@@ -87,11 +128,11 @@ class Transporter
87
128
  #removeJob
88
129
  job.delete
89
130
 
90
-
91
- gateway.shutdown!
92
- log "Job sent to, #{remote_user}@#{remote_host}/#{msg.remoteQueueName}"
93
-
131
+ log "Job sent to, #{@remoteUserName}@#{@remoteHostName}/#{@remoteQueueName}"
132
+
133
+
94
134
  rescue Exception => e
135
+ self.disconnectFromRemoteSSH
95
136
  if e.message == "TIMED_OUT" then
96
137
  log "No Msg", true
97
138
  return
@@ -105,6 +146,7 @@ class Transporter
105
146
  while true
106
147
  process
107
148
  end
149
+ self.disconnectFromRemoteSSH
108
150
  end
109
151
  end
110
152
 
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.9
4
+ version: 0.1.10
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-08-26 00:00:00.000000000 Z
12
+ date: 2013-08-29 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A Ruby interpretation of NServiceBus
15
15
  email: guy@guyirvine.com
@@ -35,6 +35,7 @@ files:
35
35
  - lib/rservicebus/AppResource/Redis.rb
36
36
  - lib/rservicebus/AppResource/ScpUpload.rb
37
37
  - lib/rservicebus/AppResource/Smb.rb
38
+ - lib/rservicebus/AppResource/State.rb
38
39
  - lib/rservicebus/AppResource.rb
39
40
  - lib/rservicebus/Config.rb
40
41
  - lib/rservicebus/ConfigureAppResource.rb