gorg_service 1.2.0 → 2.0.0

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.
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