datawire_mdk 2.0.5

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,494 @@
1
+ # Quark 1.0.406 run at 2016-08-31 13:21:53.028839
2
+ module Quark
3
+ def self.quark; Quark; end
4
+ module Quark
5
+ def self.behaviors; Behaviors; end
6
+ module Behaviors
7
+ require "datawire-quark-core"
8
+ require_relative 'reflect' # 1 () ()
9
+ require_relative 'error' # 1 () ()
10
+ require_relative '../datawire_mdk_md' # 0 () ('quark',)
11
+ require_relative '../quark' # 0 () ('quark',)
12
+ require_relative 'concurrent' # 1 () ()
13
+
14
+
15
+ def self.RPCError; RPCError; end
16
+ class RPCError < ::Quark.quark.error.Error
17
+ extend ::DatawireQuarkCore::Static
18
+
19
+ static quark_behaviors_RPCError_ref: -> { nil }
20
+
21
+
22
+
23
+ def initialize(message)
24
+
25
+ super(message)
26
+
27
+ nil
28
+ end
29
+
30
+
31
+
32
+
33
+ def _getClass()
34
+
35
+ return "quark.behaviors.RPCError"
36
+
37
+ nil
38
+ end
39
+
40
+ def _getField(name)
41
+
42
+ if ((name) == ("message"))
43
+ return (self).message
44
+ end
45
+ return nil
46
+
47
+ nil
48
+ end
49
+
50
+ def _setField(name, value)
51
+
52
+ if ((name) == ("message"))
53
+ (self).message = ::DatawireQuarkCore.cast(value) { ::String }
54
+ end
55
+
56
+ nil
57
+ end
58
+
59
+ def __init_fields__()
60
+
61
+ super
62
+
63
+ nil
64
+ end
65
+
66
+
67
+ end
68
+ RPCError.unlazy_statics
69
+
70
+ def self.RPC; RPC; end
71
+ class RPC < ::DatawireQuarkCore::QuarkObject
72
+ attr_accessor :service, :returned, :timeout, :methodName, :instance
73
+ extend ::DatawireQuarkCore::Static
74
+
75
+ static quark_behaviors_RPC_ref: -> { nil }
76
+
77
+
78
+
79
+ def initialize(service, methodName)
80
+
81
+ self.__init_fields__
82
+ timeout = ::DatawireQuarkCore.cast((service)._getField("timeout")) { ::Float }
83
+ if (((timeout) == (nil)) || ((timeout) <= (0.0)))
84
+ timeout = 10.0
85
+ end
86
+ override = service.getTimeout()
87
+ if (((override) != (nil)) && ((override) > (0.0)))
88
+ timeout = override
89
+ end
90
+ (self).returned = ::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(service)).getMethod(methodName).getType()
91
+ (self).timeout = timeout
92
+ (self).methodName = methodName
93
+ (self).service = service
94
+
95
+ nil
96
+ end
97
+
98
+
99
+
100
+
101
+ def call(args)
102
+
103
+ result = ::DatawireQuarkCore.cast(nil) { ::Quark.quark.concurrent.Future }
104
+ (self).instance = (self).service.getInstance()
105
+ if (((self).instance) != (nil))
106
+ request = ::DatawireQuarkCore::HTTP::Request.new((self).instance.getURL())
107
+ json = ::Quark.quark.toJSON(args, nil)
108
+ envelope = ::DatawireQuarkCore::JSONObject.new
109
+ (envelope).setObjectItem(("$method"), (::DatawireQuarkCore::JSONObject.new.setString((self).methodName)))
110
+ (envelope).setObjectItem(("$context"), (::DatawireQuarkCore::JSONObject.new.setString("TBD")))
111
+ (envelope).setObjectItem(("rpc"), (json))
112
+ body = envelope.toString()
113
+ request.setBody(body)
114
+ request.setMethod("POST")
115
+ rpc = ::Quark.quark.behaviors.RPCRequest.new(args, self)
116
+ result = rpc.call(request)
117
+ else
118
+ result = ::DatawireQuarkCore.cast(@returned.construct(::DatawireQuarkCore::List.new([]))) { ::Quark.quark.concurrent.Future }
119
+ result.finish(::Quark.quark.behaviors.RPCError.new("all services are down"))
120
+ end
121
+ ::Quark.quark.concurrent.FutureWait.waitFor(result, 10.0)
122
+ return result
123
+
124
+ nil
125
+ end
126
+
127
+ def succeed(info)
128
+
129
+ (self).instance.succeed(info)
130
+
131
+ nil
132
+ end
133
+
134
+ def fail(info)
135
+
136
+ (self).instance.fail(info)
137
+
138
+ nil
139
+ end
140
+
141
+ def toString()
142
+
143
+ return (((((("RPC ") + ((self).service.getName())) + (" at ")) + ((self).instance.getURL())) + (": ")) + ((self).methodName)) + ("(...)")
144
+
145
+ nil
146
+ end
147
+
148
+ def _getClass()
149
+
150
+ return "quark.behaviors.RPC"
151
+
152
+ nil
153
+ end
154
+
155
+ def _getField(name)
156
+
157
+ if ((name) == ("service"))
158
+ return (self).service
159
+ end
160
+ if ((name) == ("returned"))
161
+ return (self).returned
162
+ end
163
+ if ((name) == ("timeout"))
164
+ return (self).timeout
165
+ end
166
+ if ((name) == ("methodName"))
167
+ return (self).methodName
168
+ end
169
+ if ((name) == ("instance"))
170
+ return (self).instance
171
+ end
172
+ return nil
173
+
174
+ nil
175
+ end
176
+
177
+ def _setField(name, value)
178
+
179
+ if ((name) == ("service"))
180
+ (self).service = ::DatawireQuarkCore.cast(value) { ::Quark.quark.Service }
181
+ end
182
+ if ((name) == ("returned"))
183
+ (self).returned = ::DatawireQuarkCore.cast(value) { ::Quark.quark.reflect.QuarkClass }
184
+ end
185
+ if ((name) == ("timeout"))
186
+ (self).timeout = ::DatawireQuarkCore.cast(value) { ::Float }
187
+ end
188
+ if ((name) == ("methodName"))
189
+ (self).methodName = ::DatawireQuarkCore.cast(value) { ::String }
190
+ end
191
+ if ((name) == ("instance"))
192
+ (self).instance = ::DatawireQuarkCore.cast(value) { ::Quark.quark.ServiceInstance }
193
+ end
194
+
195
+ nil
196
+ end
197
+
198
+ def __init_fields__()
199
+
200
+ self.service = nil
201
+ self.returned = nil
202
+ self.timeout = nil
203
+ self.methodName = nil
204
+ self.instance = nil
205
+
206
+ nil
207
+ end
208
+
209
+
210
+ end
211
+ RPC.unlazy_statics
212
+
213
+ def self.RPCRequest; RPCRequest; end
214
+ class RPCRequest < ::DatawireQuarkCore::QuarkObject
215
+ attr_accessor :rpc, :retval, :args, :timeout
216
+ extend ::DatawireQuarkCore::Static
217
+
218
+ static quark_behaviors_RPCRequest_ref: -> { nil }
219
+
220
+
221
+
222
+ def initialize(args, rpc)
223
+
224
+ self.__init_fields__
225
+ (self).retval = ::DatawireQuarkCore.cast((rpc).returned.construct(::DatawireQuarkCore::List.new([]))) { ::Quark.quark.concurrent.Future }
226
+ (self).args = args
227
+ (self).timeout = ::Quark.quark.concurrent.Timeout.new((rpc).timeout)
228
+ (self).rpc = rpc
229
+
230
+ nil
231
+ end
232
+
233
+
234
+
235
+
236
+ def call(request)
237
+
238
+ (self).timeout.start(self)
239
+ ::Quark.quark.concurrent.Context.runtime().request(request, self)
240
+ return (self).retval
241
+
242
+ nil
243
+ end
244
+
245
+ def onHTTPResponse(rq, response)
246
+
247
+ info = nil
248
+ (self).timeout.cancel()
249
+ if ((response.getCode()) != (200))
250
+ info = (((self).rpc.toString()) + (" failed: Server returned error ")) + ((response.getCode()).to_s)
251
+ (self).retval.finish(::Quark.quark.behaviors.RPCError.new(info))
252
+ (self).rpc.fail(info)
253
+ return
254
+ end
255
+ body = response.getBody()
256
+ obj = ::DatawireQuarkCore::JSONObject.parse(body)
257
+ classname = (obj).getObjectItem("$class").getString()
258
+ if ((classname) == (nil))
259
+ info = ((self).rpc.toString()) + (" failed: Server returned unrecognizable content")
260
+ (self).retval.finish(::Quark.quark.behaviors.RPCError.new(info))
261
+ (self).rpc.fail(info)
262
+ return
263
+ else
264
+ ::Quark.quark.fromJSON(((self).rpc).returned, (self).retval, obj)
265
+ (self).retval.finish(nil)
266
+ (self).rpc.succeed("Success in the future...")
267
+ end
268
+
269
+ nil
270
+ end
271
+
272
+ def onTimeout(timeout)
273
+
274
+ (self).retval.finish(::Quark.quark.behaviors.RPCError.new("request timed out"))
275
+ (self).rpc.fail("request timed out")
276
+
277
+ nil
278
+ end
279
+
280
+ def _getClass()
281
+
282
+ return "quark.behaviors.RPCRequest"
283
+
284
+ nil
285
+ end
286
+
287
+ def _getField(name)
288
+
289
+ if ((name) == ("rpc"))
290
+ return (self).rpc
291
+ end
292
+ if ((name) == ("retval"))
293
+ return (self).retval
294
+ end
295
+ if ((name) == ("args"))
296
+ return (self).args
297
+ end
298
+ if ((name) == ("timeout"))
299
+ return (self).timeout
300
+ end
301
+ return nil
302
+
303
+ nil
304
+ end
305
+
306
+ def _setField(name, value)
307
+
308
+ if ((name) == ("rpc"))
309
+ (self).rpc = ::DatawireQuarkCore.cast(value) { ::Quark.quark.behaviors.RPC }
310
+ end
311
+ if ((name) == ("retval"))
312
+ (self).retval = ::DatawireQuarkCore.cast(value) { ::Quark.quark.concurrent.Future }
313
+ end
314
+ if ((name) == ("args"))
315
+ (self).args = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
316
+ end
317
+ if ((name) == ("timeout"))
318
+ (self).timeout = ::DatawireQuarkCore.cast(value) { ::Quark.quark.concurrent.Timeout }
319
+ end
320
+
321
+ nil
322
+ end
323
+
324
+ def onHTTPInit(request)
325
+
326
+ nil
327
+
328
+ nil
329
+ end
330
+
331
+ def onHTTPError(request, message)
332
+
333
+ nil
334
+
335
+ nil
336
+ end
337
+
338
+ def onHTTPFinal(request)
339
+
340
+ nil
341
+
342
+ nil
343
+ end
344
+
345
+ def __init_fields__()
346
+
347
+ self.rpc = nil
348
+ self.retval = nil
349
+ self.args = nil
350
+ self.timeout = nil
351
+
352
+ nil
353
+ end
354
+
355
+
356
+ end
357
+ RPCRequest.unlazy_statics
358
+
359
+ def self.CircuitBreaker; CircuitBreaker; end
360
+ class CircuitBreaker < ::DatawireQuarkCore::QuarkObject
361
+ attr_accessor :id, :failureLimit, :retestDelay, :active, :failureCount, :mutex
362
+ extend ::DatawireQuarkCore::Static
363
+
364
+ static quark_behaviors_CircuitBreaker_ref: -> { nil }
365
+
366
+
367
+
368
+ def initialize(id, failureLimit, retestDelay)
369
+
370
+ self.__init_fields__
371
+ (self).id = id
372
+ (self).failureLimit = failureLimit
373
+ (self).retestDelay = retestDelay
374
+
375
+ nil
376
+ end
377
+
378
+
379
+
380
+
381
+ def succeed()
382
+
383
+ (self).mutex.acquire()
384
+ if (((self).failureCount) > (0))
385
+ ::Quark.quark.Client.logger.info(("- CLOSE breaker on ") + ((self).id))
386
+ end
387
+ (self).failureCount = 0
388
+ (self).mutex.release()
389
+
390
+ nil
391
+ end
392
+
393
+ def fail()
394
+
395
+ doSchedule = false
396
+ (self).mutex.acquire()
397
+ (self).failureCount = ((self).failureCount) + (1)
398
+ if (((self).failureCount) >= ((self).failureLimit))
399
+ (self).active = false
400
+ doSchedule = true
401
+ ::Quark.quark.Client.logger.warn(("- OPEN breaker on ") + ((self).id))
402
+ end
403
+ (self).mutex.release()
404
+ if (doSchedule)
405
+ ::Quark.quark.concurrent.Context.runtime().schedule(self, (self).retestDelay)
406
+ end
407
+
408
+ nil
409
+ end
410
+
411
+ def onExecute(runtime)
412
+
413
+ (self).mutex.acquire()
414
+ (self).active = true
415
+ ::Quark.quark.Client.logger.warn(("- RETEST breaker on ") + ((self).id))
416
+ (self).mutex.release()
417
+
418
+ nil
419
+ end
420
+
421
+ def _getClass()
422
+
423
+ return "quark.behaviors.CircuitBreaker"
424
+
425
+ nil
426
+ end
427
+
428
+ def _getField(name)
429
+
430
+ if ((name) == ("id"))
431
+ return (self).id
432
+ end
433
+ if ((name) == ("failureLimit"))
434
+ return (self).failureLimit
435
+ end
436
+ if ((name) == ("retestDelay"))
437
+ return (self).retestDelay
438
+ end
439
+ if ((name) == ("active"))
440
+ return (self).active
441
+ end
442
+ if ((name) == ("failureCount"))
443
+ return (self).failureCount
444
+ end
445
+ if ((name) == ("mutex"))
446
+ return (self).mutex
447
+ end
448
+ return nil
449
+
450
+ nil
451
+ end
452
+
453
+ def _setField(name, value)
454
+
455
+ if ((name) == ("id"))
456
+ (self).id = ::DatawireQuarkCore.cast(value) { ::String }
457
+ end
458
+ if ((name) == ("failureLimit"))
459
+ (self).failureLimit = ::DatawireQuarkCore.cast(value) { ::Integer }
460
+ end
461
+ if ((name) == ("retestDelay"))
462
+ (self).retestDelay = ::DatawireQuarkCore.cast(value) { ::Float }
463
+ end
464
+ if ((name) == ("active"))
465
+ (self).active = ::DatawireQuarkCore.cast(value) { ::Object }
466
+ end
467
+ if ((name) == ("failureCount"))
468
+ (self).failureCount = ::DatawireQuarkCore.cast(value) { ::Integer }
469
+ end
470
+ if ((name) == ("mutex"))
471
+ (self).mutex = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::Lock }
472
+ end
473
+
474
+ nil
475
+ end
476
+
477
+ def __init_fields__()
478
+
479
+ self.id = nil
480
+ self.failureLimit = nil
481
+ self.retestDelay = nil
482
+ self.active = true
483
+ self.failureCount = 0
484
+ self.mutex = ::DatawireQuarkCore::Lock.new()
485
+
486
+ nil
487
+ end
488
+
489
+
490
+ end
491
+ CircuitBreaker.unlazy_statics
492
+ end # module Behaviors
493
+ end # module Quark
494
+ end # module Quark