rule_engine_client 0.1.5 → 0.1.6

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 +38 -17
  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: 662785d935e308ee876e6afdc5cb9d9cce37fb52a0dad42303764b910a6b03d1
4
+ data.tar.gz: 7f4f77c3bf3c71c26caa486690745832c0274c6399e6ee015d72305be157020f
5
5
  SHA512:
6
- metadata.gz: 7f6a51bba1a075f3e4bc1072b099966782962455ddaf8968203efb0aa7d2c3d7e0739d9aaddb3d44eb1b334d8100759fadbf5868ac2f17331dacd26ecc40c9a0
7
- data.tar.gz: 65d8692664b462e7e17dce000209bc7e7d59b3d390a7a51b5c29a5167c92b08c5cb794eed07c8544ef2f1b2333b4762a6c1545fcf230c085e58cbd10dcd4b5b6
6
+ metadata.gz: 1b15ac7e0d62019dc546ad8acd861c947733daec7aafc3c63abdb15ef588c1c11247e8640fa9dfd0b5462eda8953c1da9fc3ef96f297b57e552a9900bfdb5303
7
+ data.tar.gz: 9fc0c71c8e56006c72075d9badfd206df4a1b9461e95e0666816250df208a0b297b2782fab881482e84bfe22a9c7512b04ed22de9b8a48ef56e156f8b7256c82
@@ -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', time_out_duration = 5, verbose = false)
6
9
  @server = server
7
10
  @verbose = verbose
11
+ @logger = Logger.new(STDOUT)
12
+ @time_out_duration = time_out_duration
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('debug: ' + 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,38 @@ 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(work_space, params, mode = 'production')
57
+ url = URI.parse("#{@server}/run?e=#{work_space}&m=#{mode}")
45
58
  log("Will send post request: #{url}")
46
59
  req = Net::HTTP::Post.new(url.to_s)
47
60
  req['Content-Type'] = 'application/json'
48
61
  req.body = params.to_json
49
- # req.body = {"order":{"price":"374"}}.to_json
50
62
  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
63
+ begin
64
+ status = Timeout.timeout(@time_out_duration) do
65
+ @result = Net::HTTP.start(url.host, url.port, use_ssl: true) { |http| http.request(req) }
66
+ log('request sent')
67
+ log("result: #{@result.code} type #{@result.code.class}")
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}")
79
+ def work_space_exists?(work_space)
80
+ log("checking if work space (#{work_space}) exists")
81
+ url = URI.parse("http://#{@server}/engine/export?e=#{work_space}")
61
82
  req = Net::HTTP::Get.new(url.to_s)
62
83
  response = Net::HTTP.new(url.host, url.port).start { |http| http.request(req) }
63
- engine_exists = response.code == 200
84
+ work_space_exists = response.code == 200
64
85
 
65
- log_message = engine_exists ? "engine #{engine_name} exists" : "engine #{engine_name} not found"
86
+ log_message = work_space_exists ? "work space #{work_space} exists" : "work space #{work_space} not found"
66
87
  log(log_message)
67
- engine_exists
88
+ work_space_exists
68
89
  end
69
90
  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.6
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-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: integration with rule server
14
14
  email: