datawire_mdk 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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