gorg_service 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 73ff949459f530d6de5e500a065a69082b633c13
4
- data.tar.gz: f33f7599bf4a38afd2c3c3070757109c45e69f61
3
+ metadata.gz: 05925a6b430592a5e9c01f98423987239a0302d7
4
+ data.tar.gz: 55dd773958591108940af27364b2c5707f0d1209
5
5
  SHA512:
6
- metadata.gz: 1d857d88511bd782177f455248b3ce26d9847916250b8f29658c7e678344fbbabc015570d54e4f5d54e8b461aa706c46578eebb42b696f7bfec9e3891d218255
7
- data.tar.gz: bcfb9af25144da6982cabc973c5d1ffb9c70502987bc6faeb7263ce8ad7f9d04fb5e9f946285f98a0e2363d17e8e9876a1d0bcc972bd99aac988f276072676b2
6
+ metadata.gz: a06683f30182e6942c534c87d4fecea0203ba2e869e8fa1f94ce2d824c7ec6d5454e34b189488312505973d0a6c6c24ed1b5653a2fb73e10ed93569e2334a9c0
7
+ data.tar.gz: c315f15ab148e9309252d75d4867bd929aa76e7704cf54fb3dee7afb7abbc865283d941732579fbee7217bad23ac382f9369bd04e67164cb6f5ff37bea56d32d
data/README.md CHANGED
@@ -139,11 +139,26 @@ It provides the following attributes :
139
139
 
140
140
  - `event` : this is the same as the routing key
141
141
  - `id`: message UUID
142
- - `errors`: `Hash` containing the message error log with previous errors
142
+ - `errors`: A list of `GorgService::Message::ErrorLog`
143
143
  - `data`: `Hash` containing the data to be processed
144
144
  - `creation_time`: message emission date as `DateTime`
145
145
  - `sender` : message producer id
146
146
 
147
+
148
+ Error log structure :
149
+
150
+ - `id` : Error uuid
151
+ - `type` : Type of error (debug, info, warning, softerror, harderror)
152
+ - `sender` : Id of service emitting this error
153
+ - `message` : Error message
154
+ - `debug` : Hash containing debug infos
155
+
156
+ ## To Do
157
+
158
+ - Internal logs using Logger
159
+ - Allow disable JSON Schema Validation on incomming messages
160
+ - Message and ErrorLog attributes validation
161
+
147
162
  ## Development
148
163
 
149
164
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -6,6 +6,7 @@ require 'json-schema'
6
6
  require 'securerandom'
7
7
 
8
8
  require "gorg_service/message/json_schema"
9
+ require "gorg_service/message/error_log"
9
10
 
10
11
  class GorgService
11
12
  class Message
@@ -26,7 +27,7 @@ class GorgService
26
27
  @id=id
27
28
  @event=event
28
29
  @data=data
29
- @errors=errors
30
+ @errors=errors&&errors.map{|e| e.is_a?(GorgService::Message::ErrorLog) ? e : GorgService::Message::ErrorLog.parse(e)}
30
31
  @creation_time=creation_time
31
32
  @sender= sender
32
33
  end
@@ -41,7 +42,7 @@ class GorgService
41
42
  }
42
43
  if errors.any?
43
44
  body[:errors_count]=@errors.count
44
- body[:errors]=@errors
45
+ body[:errors]=@errors.map{|e| e.to_h}
45
46
  end
46
47
  body
47
48
  end
@@ -53,16 +54,12 @@ class GorgService
53
54
 
54
55
  # Log FailError in message body
55
56
  def log_error error
56
- hsh={
57
- error_type: error.type.downcase,
58
- error_uuid: generate_id,
59
- error_sender: application_id ,
60
- error_message: error.message||"",
61
- timestamp: DateTime.now.iso8601,
62
- error_debug: {internal_error: error.error_raised.inspect},
63
- }
64
- hsh[:error_debug] = {internal_error: error.error_raised.inspect} if error.error_raised
65
- errors<<hsh
57
+ e=GorgService::Message::ErrorLog.new(
58
+ type: error.type.downcase,
59
+ message: error.message||"",
60
+ debug: error.error_raised && {internal_error: error.error_raised.inspect}
61
+ )
62
+ errors<<e
66
63
  end
67
64
 
68
65
  ### Class methods
@@ -78,18 +75,16 @@ class GorgService
78
75
 
79
76
  JSON::Validator.validate!(GorgService::Message::JSON_SCHEMA,json_body)
80
77
 
78
+ puts json_body["errors"].inspect
79
+
81
80
  msg=self.new(
82
81
  id: json_body["event_uuid"],
83
82
  event: json_body["event_name"],
84
83
  data: convert_keys_to_sym(json_body["data"]),
85
84
  creation_time: json_body["event_creation_time"] && DateTime.parse(json_body["event_creation_time"]),
86
85
  sender: json_body["event_sender_id"],
87
- errors: json_body["errors"]&&json_body["errors"].map{|e| convert_keys_to_sym(e)},
86
+ errors: json_body["errors"]&&json_body["errors"].map{|e| GorgService::Message::ErrorLog.parse(e)},
88
87
  )
89
-
90
- msg.errors=msg.errors.each do |e|
91
- e[:timestamp]=(e[:timestamp] ? DateTime.parse(e[:timestamp]) : nil)
92
- end
93
88
  msg
94
89
  rescue JSON::ParserError => e
95
90
  raise GorgService::HardfailError.new(e), "Unprocessable message : Unable to parse JSON message body"
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'json'
5
+ require 'securerandom'
6
+
7
+ class GorgService
8
+ class Message
9
+ class ErrorLog
10
+
11
+ attr_accessor :type, :id, :sender, :message, :timestamp, :debug
12
+
13
+ def initialize( type: "info",
14
+ id: SecureRandom.uuid,
15
+ sender: GorgService.configuration.application_id,
16
+ message: "",
17
+ timestamp: DateTime.now,
18
+ debug: {})
19
+ @type=type
20
+ @id=id
21
+ @sender=sender
22
+ @message=message
23
+ @timestamp=timestamp
24
+ @debug=debug
25
+ end
26
+
27
+ def to_h
28
+ h={"error_type" => type,
29
+ "error_uuid" => id,
30
+ "error_sender" => sender,
31
+ "error_message" => message,
32
+ "timestamp" => timestamp.iso8601,
33
+ }
34
+ h["error_debug"]= debug if debug
35
+ h
36
+ end
37
+
38
+ def to_json
39
+ to_h.to_json
40
+ end
41
+
42
+ class << self
43
+ def parse(obj)
44
+ obj=JSON.parse(obj) unless obj.is_a? Hash
45
+
46
+ obj=convert_keys_to_sym(obj)
47
+
48
+ self.new( type: obj[:error_type],
49
+ id: obj[:error_uuid],
50
+ sender: obj[:error_sender],
51
+ message: obj[:error_message],
52
+ timestamp: DateTime.parse(obj[:timestamp]),
53
+ debug: obj[:error_debug])
54
+
55
+ end
56
+
57
+ protected
58
+
59
+ def convert_keys_to_sym input_hash
60
+ s2s =
61
+ lambda do |h|
62
+ Hash === h ?
63
+ Hash[
64
+ h.map do |k, v|
65
+ [k.respond_to?(:to_sym) ? k.to_sym : k, s2s[v]]
66
+ end
67
+ ] : h
68
+ end
69
+ s2s[input_hash]
70
+ end
71
+
72
+ end
73
+
74
+ end
75
+ end
76
+ end
@@ -2,5 +2,5 @@
2
2
  # encoding: utf-8
3
3
 
4
4
  class GorgService
5
- VERSION = "1.2.0"
5
+ VERSION = "2.0.0"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gorg_service
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Narbonne
@@ -151,6 +151,7 @@ files:
151
151
  - lib/gorg_service/errors.rb
152
152
  - lib/gorg_service/listener.rb
153
153
  - lib/gorg_service/message.rb
154
+ - lib/gorg_service/message/error_log.rb
154
155
  - lib/gorg_service/message/json_schema.rb
155
156
  - lib/gorg_service/message_handler.rb
156
157
  - lib/gorg_service/version.rb