rule_engine_client 0.1.5 → 0.1.8

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rule_engine_client.rb +55 -25
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d12c63e3fd06abc838f6462dc37f1ff857d97eeb2048e14b546ca4caf5d5f6b1
4
- data.tar.gz: 275b2a3ff4f76fd2614b530b16b611bba86fdb1217d4be65357e0d67e20ca964
3
+ metadata.gz: c4b11c9fc54e518590ffa6936dab7cc05bf8e11ab318b42f385958975f103cc2
4
+ data.tar.gz: 6a774411a6c983e01d1310f575970aad67a71bc6dc141d2c569d4233c709cf71
5
5
  SHA512:
6
- metadata.gz: 7f6a51bba1a075f3e4bc1072b099966782962455ddaf8968203efb0aa7d2c3d7e0739d9aaddb3d44eb1b334d8100759fadbf5868ac2f17331dacd26ecc40c9a0
7
- data.tar.gz: 65d8692664b462e7e17dce000209bc7e7d59b3d390a7a51b5c29a5167c92b08c5cb794eed07c8544ef2f1b2333b4762a6c1545fcf230c085e58cbd10dcd4b5b6
6
+ metadata.gz: d9c406296710023ea0cc9916d9a4139d06a2b7f0d182098f7f41bf159810a8cd3e861cb555dbe11ebb5959d038f4697fc25b6ad56e9508261bd231f11eeb7b1a
7
+ data.tar.gz: 50c045fed276f553f67c66e13943e61aaf3e451665488d569f41374f95c7d781123162651b4b695d39a2a22c8cf1bd4d237c11e23ffcff2f8a0597f14b95f485
@@ -1,15 +1,20 @@
1
1
  require 'net/http'
2
2
  require 'json'
3
+ require 'logger'
4
+ require 'timeout'
5
+
3
6
  # rule engine client class
4
7
  class RuleEngineClient
5
- def initialize(server = 'http://localhost:8088', verbose = false)
8
+ def initialize(server = 'http://localhost:8088', request_timeout_in_s = 5, verbose = false)
6
9
  @server = server
7
10
  @verbose = verbose
11
+ @logger = Logger.new($stdout)
12
+ @request_timeout_in_s = request_timeout_in_s
8
13
  log("rule engine '#{server}' client is initialized")
9
14
  end
10
15
 
11
16
  def log(message)
12
- puts message if @verbose
17
+ @logger.debug("rule engine: #{message}") if @verbose
13
18
  end
14
19
 
15
20
  def valid_json?(obj)
@@ -27,7 +32,15 @@ class RuleEngineClient
27
32
  end
28
33
 
29
34
  def response_builder
30
- if !valid_json?(@result.body)
35
+ if @time_out
36
+ errors = ['HTTP Gatway timeout!']
37
+ body = {}
38
+ code = 504
39
+ elsif @result.code == '502'
40
+ errors = ['rule engine server down']
41
+ body = {}
42
+ code = @result.code
43
+ elsif !valid_json?(@result.body)
31
44
  errors = ['could not parse response body to JSON']
32
45
  body = {}
33
46
  code = 500
@@ -40,30 +53,47 @@ class RuleEngineClient
40
53
  response_hash(code, body, errors)
41
54
  end
42
55
 
43
- def evaluate(engine_name, params, mode ='production')
44
- url = URI.parse("#{@server}/run?e=#{engine_name}&m=#{mode}")
56
+ def evaluate(engine, params, mode = 'production')
57
+ url = URI.parse("#{@server}/run?e=#{engine}&m=#{mode}")
45
58
  log("Will send post request: #{url}")
46
- req = Net::HTTP::Post.new(url.to_s)
47
- req['Content-Type'] = 'application/json'
48
- req.body = params.to_json
49
- # req.body = {"order":{"price":"374"}}.to_json
50
- log("request body created #{req.body} ")
51
- @result = Net::HTTP.start(url.host, url.port, :use_ssl => true) { |http| http.request(req) }
52
- log('request sent')
53
- respone = response_builder
54
- log("respone #{respone}")
55
- respone
59
+ begin
60
+ Timeout.timeout(@request_timeout_in_s) do
61
+ http = Net::HTTP.new(url.host, url.port)
62
+ http.use_ssl = true if url.instance_of? URI::HTTPS
63
+ request = Net::HTTP::Post.new(url.request_uri)
64
+ request['Content-Type'] = 'application/json'
65
+ request.body = params.to_json
66
+ log("request body created #{request.body} ")
67
+ @result = http.request(request)
68
+ respone = response_builder
69
+ log("respone #{respone}")
70
+ respone
71
+ end
72
+ rescue Timeout::Error
73
+ log('HTTP Gatway timeout!')
74
+ @time_out = true
75
+ response_builder
76
+ end
56
77
  end
57
78
 
58
- def engine_exists?(engine_name)
59
- log("checking if engine (#{engine_name}) exists")
60
- url = URI.parse("http://#{@server}/engine/export?e=#{engine_name}")
61
- req = Net::HTTP::Get.new(url.to_s)
62
- response = Net::HTTP.new(url.host, url.port).start { |http| http.request(req) }
63
- engine_exists = response.code == 200
64
-
65
- log_message = engine_exists ? "engine #{engine_name} exists" : "engine #{engine_name} not found"
66
- log(log_message)
67
- engine_exists
79
+ def engine_exists?(engine)
80
+ log("checking if engine (#{engine}) exists")
81
+ url = URI.parse("#{@server}/engine/export?e=#{engine}")
82
+ begin
83
+ Timeout.timeout(@request_timeout_in_s) do
84
+ http = Net::HTTP.new(url.host, url.port)
85
+ http.use_ssl = true if url.instance_of? URI::HTTPS
86
+ request = Net::HTTP::Get.new(url.request_uri)
87
+ request['Content-Type'] = 'application/json'
88
+ response = http.request(request)
89
+ engine_exists = response.code == '200'
90
+ log_message = engine_exists ? "engine #{engine} exists" : "engine #{engine} not found"
91
+ log(log_message)
92
+ engine_exists
93
+ end
94
+ rescue Timeout::Error
95
+ log('HTTP Gatway timeout!')
96
+ false
97
+ end
68
98
  end
69
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rule_engine_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Areej Nour
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-07 00:00:00.000000000 Z
11
+ date: 2022-08-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: integration with rule server
14
14
  email: