rse 0.1.2 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/rse.rb +203 -36
  4. data.tar.gz.sig +0 -0
  5. metadata +67 -41
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36a05c67f09a77d1bdcb8afcf542ff78b0b19948651a27de39f9d572e68f0e3f
4
- data.tar.gz: 717d9df27c6c4c6dcc3e3c81feb6f00786d463e473834e81b516da562cd64984
3
+ metadata.gz: a780fa384905f730d59549d3809d4127da681dcf95b59b55dc64a5993dd86053
4
+ data.tar.gz: 620728ba13757e873a334175a6cfb2dbb1893b7315afc4bdcada6ee1af64b2c5
5
5
  SHA512:
6
- metadata.gz: ca8db30032ab3aaa604993761d13e7743df9f160a6a47a190d5d3bf3456223557e900e9b3fc34e15465d30e76c3f4238026482bc3a1bfc9084d8803a8dd2499f
7
- data.tar.gz: 72a133e9035d09d96fc11d66e73a879fb480dc0f4012c89df4d9c6199f8a3958ebc7a2bee644d7db928f9eaed86899b28384a2ae0a21a3d2b6cb8fc6a1e6b1a8
6
+ metadata.gz: aeed7f472a9ad20122dbe00f914119ee985445be1d6e88d3ad4a202962594271e4ab53c082a032d80413b543674a1025a381faed21fe63e09f3795848311529b
7
+ data.tar.gz: 65ada2f5d1f2e27a2792e9c2dd1c39ba672eda7e21c00df9f509ac9ae718ebf623868b2a77227e3048dd2a352e993d332a6557387f790801f33addf2f49cdbb5
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/rse.rb CHANGED
@@ -4,64 +4,231 @@
4
4
 
5
5
 
6
6
  require 'drb'
7
+ require 'sps-pub'
7
8
  require 'sps-sub'
8
9
  require 'rsf_services'
9
10
  require 'remote_dwsregistry'
10
11
  require 'spspublog_drb_client'
11
12
 
12
13
 
13
- class Rse
14
- using ColouredText
15
-
16
- def initialize(package_basepath=nil, host: '', port: '61000',
17
- debug: false, loghost: 'localhost', logport: '9090',
18
- reghost: 'localhost', spshost: 'localhost', app_rsf: nil)
19
-
20
- @host, @port, @debug = host, port, debug
21
-
22
- puts 'before spspublog'.info if @debug
23
- log = SPSPubLogDRbClient.new host: loghost, port: logport
24
-
25
- puts 'before reg'.info if @debug
26
- reg = RemoteDwsRegistry.new domain: reghost
27
-
28
- @rs = rs = RSFServices.new reg, package_basepath: package_basepath,
29
- log: log, app_rsf: app_rsf, debug: debug
30
-
31
- sps = SPSSub.new host: spshost
32
-
33
- Thread.new do
34
- sps.subscribe(topic: 'rse/#') do |msg,topic|
14
+ module Rse
15
+
16
+ class Server
17
+ using ColouredText
18
+
19
+ def initialize(package_basepath=nil, host: '0.0.0.0', port: '61000',
20
+ debug: false, loghost: nil, logport: '9090', log: nil,
21
+ reghost: nil, spshost: nil, app_rsf: nil)
22
+
23
+ @host, @port, @debug = host, port, debug
24
+
25
+ puts 'before spspublog'.info if @debug
26
+
27
+ log2 = if log then
28
+ log
29
+ elsif loghost
30
+ SPSPubLogDRbClient.new(host: loghost, port: logport)
31
+ end
32
+
33
+ puts 'before reg'.info if @debug
34
+ reg = reghost ? RemoteDwsRegistry.new(domain: reghost) : nil
35
+
36
+ @rs = rs = RSFServices.new reg, package_basepath: package_basepath,
37
+ log: log2, app_rsf: app_rsf, debug: debug
38
+
39
+ @rs.services['sps'] = SPSPub.new(host: spshost) if spshost
40
+
41
+ puts 'ready'
42
+
43
+ end
44
+
45
+ def start()
46
+ puts 'starting ...'
47
+ puts "druby://#{@host.to_s}:#{@port}"
48
+
49
+ DRb.start_service "druby://" + @host.to_s + ':' + @port, @rs
50
+ DRb.thread.join
51
+
52
+ end
53
+ end
54
+
55
+ class Subscriber < SPSSub
56
+
57
+ def initialize(host: 'rse.home', spshost: 'sps.home')
58
+
59
+ @rsc = RSC.new(host)
60
+ super(host: spshost)
61
+
62
+ end
63
+
64
+ def subscribe(topic: 'rse/#')
65
+
66
+ super(topic: topic) do |msg, topic|
67
+
35
68
  a = topic.split('/')[1..-1]
69
+
36
70
  if a.length < 2 then
71
+
37
72
  begin
38
- r = rs.run_job(a.first, msg)
73
+ r = @rsc.run_job(a.first, msg)
39
74
  rescue
40
- sps.notice 'rse_result: no job ' + a.first
75
+ self.notice 'rse_result: no job ' + a.first
41
76
  end
42
- sps.notice 'rse_result: ' + r.inspect
77
+
78
+ self.notice 'rse_result: ' + r.inspect
79
+
43
80
  else
81
+
44
82
  package, job = a
83
+
45
84
  begin
46
- r = rs.run_job(package, job, {}, msg)
47
- rescue
48
- sps.notice 'rse_result: no job ' + a.first
49
- end
50
- sps.notice "rse_result/%s/%s: %s" % [package, job, r.inspect ]
85
+ r = @rsc.run_job(package, job, {}, msg)
86
+ rescue
87
+ self.notice 'rse_result: no job ' + a.first
88
+ end
89
+
90
+ self.notice "rse_result/%s/%s: %s" % [package, job, r.inspect ]
51
91
  end
92
+
52
93
  end
53
94
  end
54
95
 
55
- @rs.services['sps'] = sps
96
+ end
97
+
98
+ end
99
+
100
+
101
+ module RseProxy
102
+
103
+ class PassThru
104
+
105
+ # job_filter (which is optional) expects a block
106
+ #
107
+ def initialize(serversx=[], servers: serversx, log: nil, jobfilter: nil )
108
+
109
+ DRb.start_service
110
+
111
+ @servers = servers.map do |x|
112
+
113
+ host, port = x.is_a?(Hash) ? [x[:host], x[:port]] : x
114
+
115
+ end
116
+
117
+ @log = Logger.new log, 'daily' if log
118
+
119
+ @rse = nil
120
+ @jobfilter = jobfilter
121
+
122
+ end
123
+
124
+ def delete()
125
+ fetch_server() { |rse| rse.delete }
126
+ end
127
+
128
+ def get()
129
+ fetch_server() { |rse| rse.get }
130
+ end
131
+
132
+ def put()
133
+ fetch_server() { |rse| rse.put }
134
+ end
135
+
136
+ def post()
137
+ fetch_server() { |rse| rse.post }
138
+ end
139
+
140
+ def package_methods(name)
141
+ fetch_server() { |rse| rse.package_methods(name) }
142
+ end
143
+
144
+ def run_job(package, job, params={}, *args)
145
+
146
+ if @log then
147
+ @log.info "package: %s, job: %s, params: %s, args: %s" % [package, job, params, args]
148
+ end
149
+
150
+ #we pass in the job to determine the server
151
+ fetch_server(job) do |rse|
152
+ rse.run_job package, job, params, *args
153
+ end
154
+
155
+ end
156
+
157
+ def fetch_server(job=nil)
158
+
159
+ host, port = nil, nil
160
+
161
+ exit if @servers.empty?
162
+
163
+ # using a job filter we can send a job (by checking its name) to
164
+ # a specific server
165
+ #
166
+ r = @jobfilter.call(job) if job and @jobfilter.is_a? Proc
167
+
168
+ server = if r then
169
+ r
170
+ else
171
+ @log.info 'job: ' + job.inspect if @log
172
+ @servers.first
173
+ end
174
+
175
+ puts 'server: ' + server.inspect
176
+
177
+ begin
178
+ host, port = server
179
+ @rse = DRbObject.new_with_uri("druby://#{host}:#{port}")
180
+
181
+ yield(@rse) if block_given?
182
+
183
+ rescue
184
+
185
+ @servers.shift unless port.to_i > 61005
186
+ @rse = nil
187
+ puts ($!).inspect
188
+ @log.warn "server #{host}:#{port} #{($!).inspect}" if @log
189
+ #sleep 1
190
+ #jr20210725 retry
191
+
192
+
193
+ end
194
+
195
+ end
196
+
197
+ def type()
198
+ fetch_server() { |rse| rse.type }
199
+ end
200
+
201
+ def type=(s)
202
+ fetch_server() { |rse| rse.type=(s) }
203
+ end
204
+
205
+ private
206
+
207
+ def method_missing(method_name, *args)
208
+ fetch_server() { |rse| rse.get.method(method_name).call(*args) }
209
+ end
56
210
 
57
- puts 'ready'
58
211
 
59
212
  end
60
213
 
61
- def start()
62
- puts 'starting ...'
63
- DRb.start_service "druby://#{@host}:#{@port}", @rs
64
- DRb.thread.join
214
+ class Server
215
+
216
+ def initialize(host: 'rse.home', port: '61000', servers: [], log: nil,
217
+ spshost: 'sps.home', jobfilter: nil)
218
+
219
+ @host, @port, @servers, @log = host, port, servers, log
220
+ @spshost = spshost
221
+ @jobfilter = jobfilter
65
222
 
223
+ end
224
+
225
+ def start()
226
+
227
+ DRb.start_service "druby://#{@host}:#{@port}",
228
+ PassThru.new(@servers, log: @log, jobfilter: @jobfilter)
229
+ DRb.thread.join
230
+
231
+ end
66
232
  end
233
+
67
234
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -10,28 +10,53 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQUFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTgwMzIyMTIyNjIzWhcN
15
- MTkwMzIyMTIyNjIzWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKgZh3
17
- L6Dw+LGmfDESYKAzFPLp7/DBCngXOpF9Xs67N9oWW6VvXuI4QfYP3TMWgML63LZW
18
- fPbMIiIV77DgNzKEFIdkuVw4hBdS3rOBU8CM1rsCuzTNEz5dIk3j4X8f2u1MXj+R
19
- xj8Kobrsf4T4j+GCnWmF8vs6A8mZ61ErqJZuAo/3DJk00e/feRpJMLDDauZ9jN1s
20
- q/oLq0qGjgUEMfXzBpzc6ZH4ThQ/K18gVDs/5lVok+p2PnT6eBHll8KGQHrBLJ12
21
- hOaPn2CfXXc1QIEhlFes5CuTga8UPslZKDsB0GUyP5i2UDCWtbLx3/lohits6ahB
22
- Cq9TE50l+qgNussvAgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
- HQYDVR0OBBYEFO4iKKVwKQysm3lDMP3B7tVBNZ0mMCYGA1UdEQQfMB2BG2dlbW1h
24
- c3RlckBqYW1lc3JvYmVydHNvbi5ldTAmBgNVHRIEHzAdgRtnZW1tYXN0ZXJAamFt
25
- ZXNyb2JlcnRzb24uZXUwDQYJKoZIhvcNAQEFBQADggEBABG0GDpCcLRqUaSpe01+
26
- P7faKJpVfFpGTeBOeFMhXcIfXBts6XDkt0BV5WVs8hELMOuygayayVXegSkFRPCr
27
- /f6GsmIVVUffLVoKhh8sbC9WH6ZE3hddzGZ4ak98DkYE+6a9V/07qjjjQIwYJBQ7
28
- FKi+vwEKeiIniq3jsTvxUnZBLx+FaO+vVWgbqi2LI5FjXWEU1+Pv0sF1dHXUKOiR
29
- 6VLVRd61U5PLkXgiFDUQTMQxbROuNge8Tn1sTxSPIK1FbNsKnx+1+5sonMBgu4zn
30
- gou7xRtdjGdiyT3PyvX0OQ+99BHHx73PhDP1g8iDZJM0XfIVmfFIYOOCSNgKEgUM
31
- V1M=
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjExMjEzMjE0OTI3WhcN
15
+ MjIxMjEzMjE0OTI3WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC5GgnY
17
+ 3NAIglTeWLyCCzCJEg7gjKrf9LiVJWjD7RC3Ga13pueAD94Lk8hNqb5zUt0D19nv
18
+ HpCCvxjGhYSsekaqZHY+dtR6uJKN50mdHHWU7Tg+46uUMFsgGm9pVrcLtlVlqHhs
19
+ C4agY/2p28UvU+H7fUQinkbpgaD+bMJ4oYSrTLTUGhuqWDcQpH0kH+lVAwdhjFTs
20
+ hn0K2E3ikEr0RNW0x1v+XPabxpxi58V3tqV8HpMUvrQ9nNLsjL3hi3RPOd/1yuvQ
21
+ /HsQY9W1WGdhwZ8DF94E0rS4i6pmrAYW0mNm0euGPEhrQ8FeNznaSrAGghqFJQQ4
22
+ NzkRuwBUIGj3Fg/bj7FGJn8Gbh97JMxnn9W0VrvlczKnLOH/nLVw/jc9b7hx21yh
23
+ XYDfwlWtHaPIfbqfs+p1GSP8dtWflT8cnUs/jFav0JE9B6E/5DBL09J6TJctwOEF
24
+ FQhLb45sWsXHi/wgpHwUKtdXIU1+JUYn4ZRw+RO+sYN6ii1TodgfMIjqySkCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU06PIdeEz
26
+ +zgy9XVLqBDAyk7tw10wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAb9n3/OhaFl0l0Gl6eVhG8rRmuWvOk8eLGAQmJ8RJ
29
+ qSw1990eQGzT6CIX0atlZgmqxihV2OUgivTCZZxhUYOSMN5k5YpRDp0CsudqZMBn
30
+ iR8hQguKSxvuEQYybU1e5exGWrEMXBZSqmzMBNGWO35gjtoOCWClrCN3aRzo58GG
31
+ vt3P/4N0odpk4s6CiH84pVGzclufcm4scPHhNhQBz3FSMrj3tXfLY53EjQ0r5Ih2
32
+ aIljodE+UKtgJTKsVQ8B7VOzygL5ifDq9VJ5EPvPN9CVopIHmEeJUHzDy1lO5B8m
33
+ YNYycxb46Jr0FhPdqmYV9C7kgduvaF30PUCX4nzHjIItXLvGVuhTXksSwldD85NX
34
+ 4dt+Bk5nY7dMy57gzGYIcLJSLoz0vR5V9tMoFpaATj9+QRhkuhPJAv12rers1Imr
35
+ uURNkBXNIh3CdFpGJunoxVicC2OU2CglMgh+92Fjj2tRAV1M5njVnDnXcDSIsw7T
36
+ b5bDlFc8Qgl3+y8V3vxPf7WX
32
37
  -----END CERTIFICATE-----
33
- date: 2019-01-21 00:00:00.000000000 Z
38
+ date: 2022-01-15 00:00:00.000000000 Z
34
39
  dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: sps-pub
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.5'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.5.5
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.5'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 0.5.5
35
60
  - !ruby/object:Gem::Dependency
36
61
  name: sps-sub
37
62
  requirement: !ruby/object:Gem::Requirement
@@ -41,7 +66,7 @@ dependencies:
41
66
  version: '0.3'
42
67
  - - ">="
43
68
  - !ruby/object:Gem::Version
44
- version: 0.3.6
69
+ version: 0.3.7
45
70
  type: :runtime
46
71
  prerelease: false
47
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -51,69 +76,69 @@ dependencies:
51
76
  version: '0.3'
52
77
  - - ">="
53
78
  - !ruby/object:Gem::Version
54
- version: 0.3.6
79
+ version: 0.3.7
55
80
  - !ruby/object:Gem::Dependency
56
81
  name: rsf_services
57
82
  requirement: !ruby/object:Gem::Requirement
58
83
  requirements:
59
84
  - - "~>"
60
85
  - !ruby/object:Gem::Version
61
- version: '0.7'
86
+ version: '0.9'
62
87
  - - ">="
63
88
  - !ruby/object:Gem::Version
64
- version: 0.7.1
89
+ version: 0.9.5
65
90
  type: :runtime
66
91
  prerelease: false
67
92
  version_requirements: !ruby/object:Gem::Requirement
68
93
  requirements:
69
94
  - - "~>"
70
95
  - !ruby/object:Gem::Version
71
- version: '0.7'
96
+ version: '0.9'
72
97
  - - ">="
73
98
  - !ruby/object:Gem::Version
74
- version: 0.7.1
99
+ version: 0.9.5
75
100
  - !ruby/object:Gem::Dependency
76
101
  name: remote_dwsregistry
77
102
  requirement: !ruby/object:Gem::Requirement
78
103
  requirements:
79
104
  - - "~>"
80
105
  - !ruby/object:Gem::Version
81
- version: '0.2'
106
+ version: '0.4'
82
107
  - - ">="
83
108
  - !ruby/object:Gem::Version
84
- version: 0.2.7
109
+ version: 0.4.1
85
110
  type: :runtime
86
111
  prerelease: false
87
112
  version_requirements: !ruby/object:Gem::Requirement
88
113
  requirements:
89
114
  - - "~>"
90
115
  - !ruby/object:Gem::Version
91
- version: '0.2'
116
+ version: '0.4'
92
117
  - - ">="
93
118
  - !ruby/object:Gem::Version
94
- version: 0.2.7
119
+ version: 0.4.1
95
120
  - !ruby/object:Gem::Dependency
96
121
  name: spspublog_drb_client
97
122
  requirement: !ruby/object:Gem::Requirement
98
123
  requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- version: 0.1.0
102
124
  - - "~>"
103
125
  - !ruby/object:Gem::Version
104
- version: '0.1'
126
+ version: '0.2'
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 0.2.1
105
130
  type: :runtime
106
131
  prerelease: false
107
132
  version_requirements: !ruby/object:Gem::Requirement
108
133
  requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: 0.1.0
112
134
  - - "~>"
113
135
  - !ruby/object:Gem::Version
114
- version: '0.1'
136
+ version: '0.2'
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: 0.2.1
115
140
  description:
116
- email: james@jamesrobertson.eu
141
+ email: digital.robertson@gmail.com
117
142
  executables: []
118
143
  extensions: []
119
144
  extra_rdoc_files: []
@@ -138,7 +163,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
163
  - !ruby/object:Gem::Version
139
164
  version: '0'
140
165
  requirements: []
141
- rubygems_version: 3.0.2
166
+ rubyforge_project:
167
+ rubygems_version: 2.7.10
142
168
  signing_key:
143
169
  specification_version: 4
144
170
  summary: Executes Ruby jobs (using the rsf_services gem) from a DRb server.
metadata.gz.sig CHANGED
Binary file