rse 0.1.1 → 0.4.0

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 (6) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/rse.rb +199 -29
  4. data.tar.gz.sig +0 -0
  5. metadata +62 -37
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 893a33287506e9db67893036fc030f8c027feddc
4
- data.tar.gz: 3588af238cb00dcea8790b87867b3f5608cd3845
2
+ SHA256:
3
+ metadata.gz: f1157852fad295d25dac2a7e5e8907d3c0afd61682d4fdf2b926de56bfc116aa
4
+ data.tar.gz: 9ee0c46b6cace3db05c107f1f29e3c7ff105a8bd51b87310dcdd0895bf8d30d4
5
5
  SHA512:
6
- metadata.gz: 829b6bd1e7c32cb17cc5b351bfc8af232cb4c9c37f0d849c7091f43322c162b3f1460207530fe5c2df39202048d39734217a61690b9c0a610707ccb29047ef2b
7
- data.tar.gz: fe3bc64eda6443297f1cf24e71d320304cf783727c7099e6ec9854aec92db4c08427fedb5ed56a5a9592bbda16658a3125414da872ea6ab5ea9d7849b852f622
6
+ metadata.gz: 71df363891458d1a2f70ee1c325469395f11644dfdcfafb9965f81292340ec2833855751de0abaa09fb994f829a3b8b1ab10a077d12518f4d6a9b7ca446600b7
7
+ data.tar.gz: 8fa3a49adac81375fc07e17b9527a523703a918b48625a1e1f07f2257a4c7966133d655fc28b82f57c18860c319924195923b6f0276212ad9d526fb066919420
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/rse.rb CHANGED
@@ -4,61 +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
 
14
+ module Rse
13
15
 
14
- class Rse
15
-
16
- def initialize(package_basepath=nil, host: '', port: '61000',
17
- debug: false, loghost: 'localhost', reghost: 'localhost',
18
- spshost: 'localhost', app_rsf: nil)
16
+ class Server
17
+ using ColouredText
19
18
 
20
- @host, @port, @debug = host, port, debug
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)
21
22
 
22
- log = SPSPubLogDRbClient.new host: loghost
23
- reg = RemoteDwsRegistry.new domain: reghost
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}:#{@port}"
48
+ DRb.start_service "druby://#{@host}:#{@port}", @rs
49
+ DRb.thread.join
50
+
51
+ end
52
+ end
53
+
54
+ class Subscriber < SPSSub
55
+
56
+ def initialize(host: 'rse.home', spshost: 'sps.home')
57
+
58
+ @rsc = RSC.new(host)
59
+ super(host: spshost)
60
+
61
+ end
62
+
63
+ def subscribe(topic: 'rse/#')
64
+
65
+ super(topic: topic) do |msg, topic|
24
66
 
25
- @rs = rs = RSFServices.new reg,
26
- package_basepath: package_basepath, log: log, app_rsf: app_rsf
27
-
28
- sps = SPSSub.new host: spshost
29
-
30
- Thread.new do
31
- sps.subscribe(topic: 'rse/#') do |msg,topic|
32
67
  a = topic.split('/')[1..-1]
68
+
33
69
  if a.length < 2 then
70
+
34
71
  begin
35
- r = rs.run_job(a.first, msg)
72
+ r = @rsc.run_job(a.first, msg)
36
73
  rescue
37
- sps.notice 'rse_result: no job ' + a.first
74
+ self.notice 'rse_result: no job ' + a.first
38
75
  end
39
- sps.notice 'rse_result: ' + r.inspect
76
+
77
+ self.notice 'rse_result: ' + r.inspect
78
+
40
79
  else
80
+
41
81
  package, job = a
82
+
42
83
  begin
43
- r = rs.run_job(package, job, {}, msg)
44
- rescue
45
- sps.notice 'rse_result: no job ' + a.first
46
- end
47
- sps.notice "rse_result/%s/%s: %s" % [package, job, r.inspect ]
84
+ r = @rsc.run_job(package, job, {}, msg)
85
+ rescue
86
+ self.notice 'rse_result: no job ' + a.first
87
+ end
88
+
89
+ self.notice "rse_result/%s/%s: %s" % [package, job, r.inspect ]
48
90
  end
91
+
92
+ end
93
+ end
94
+
95
+ end
96
+
97
+ end
98
+
99
+
100
+ module RseProxy
101
+
102
+ class PassThru
103
+
104
+ # job_filter (which is optional) expects a block
105
+ #
106
+ def initialize(serversx=[], servers: serversx, log: nil, jobfilter: nil )
107
+
108
+ DRb.start_service
109
+
110
+ @servers = servers.map do |x|
111
+
112
+ host, port = x.is_a?(Hash) ? [x[:host], x[:port]] : x
113
+
114
+ end
115
+
116
+ @log = Logger.new log, 'daily' if log
117
+
118
+ @rse = nil
119
+ @jobfilter = jobfilter
120
+
121
+ end
122
+
123
+ def delete()
124
+ fetch_server() { |rse| rse.delete }
125
+ end
126
+
127
+ def get()
128
+ fetch_server() { |rse| rse.get }
129
+ end
130
+
131
+ def put()
132
+ fetch_server() { |rse| rse.put }
133
+ end
134
+
135
+ def post()
136
+ fetch_server() { |rse| rse.post }
137
+ end
138
+
139
+ def package_methods(name)
140
+ fetch_server() { |rse| rse.package_methods(name) }
141
+ end
142
+
143
+ def run_job(package, job, params={}, *args)
144
+
145
+ if @log then
146
+ @log.info "package: %s, job: %s, " +
147
+ "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
49
153
  end
154
+
50
155
  end
51
156
 
52
- @rs.services['sps'] = sps
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
53
210
 
54
- puts 'ready'
55
211
 
56
212
  end
57
213
 
58
- def start()
59
- puts 'starting ...'
60
- DRb.start_service "druby://#{@host}:#{@port}", @rs
61
- DRb.thread.join
214
+ class Server
62
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
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
63
232
  end
233
+
64
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.1
4
+ version: 0.4.0
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: 2018-07-31 00:00:00.000000000 Z
38
+ date: 2021-12-13 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
124
  - - "~>"
100
125
  - !ruby/object:Gem::Version
101
- version: '0.1'
126
+ version: '0.2'
102
127
  - - ">="
103
128
  - !ruby/object:Gem::Version
104
- version: 0.1.0
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
134
  - - "~>"
110
135
  - !ruby/object:Gem::Version
111
- version: '0.1'
136
+ version: '0.2'
112
137
  - - ">="
113
138
  - !ruby/object:Gem::Version
114
- version: 0.1.0
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: []
@@ -139,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
164
  version: '0'
140
165
  requirements: []
141
166
  rubyforge_project:
142
- rubygems_version: 2.6.13
167
+ rubygems_version: 2.7.10
143
168
  signing_key:
144
169
  specification_version: 4
145
170
  summary: Executes Ruby jobs (using the rsf_services gem) from a DRb server.
metadata.gz.sig CHANGED
Binary file