gorg_service 0.2.0 → 1.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 +4 -4
- data/gorg_service.gemspec +1 -0
- data/lib/gorg_service/errors.rb +2 -2
- data/lib/gorg_service/message.rb +32 -12
- data/lib/gorg_service/message/json_schema.rb +98 -0
- data/lib/gorg_service/message_handler.rb +2 -2
- data/lib/gorg_service/version.rb +1 -1
- metadata +16 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4202710bccd62ba26cc53da5903a84e570bc3ca6
|
4
|
+
data.tar.gz: 7b7a517db9b978955a768471aad1e3685b8a89bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36684953d4b5825695b0b2f5e970c69ea2ba9dc05158180f4db95d6d22bde0369938aa2c448157e4ac4d297eea3a3e843ff7c16487448eda9a14759031135e4b
|
7
|
+
data.tar.gz: bca143a3e2bbbaa1154e92e5f2f1d26f32db5fc5044eac750038e8bdfd2e4d33db3cc4bc42513f902c73c9011322dda24c4b544afbe0ba880b2bbffc77d3ccd3
|
data/gorg_service.gemspec
CHANGED
data/lib/gorg_service/errors.rb
CHANGED
@@ -24,14 +24,14 @@ class GorgService
|
|
24
24
|
#Softfail error : This message should be processed again later
|
25
25
|
class SoftfailError < FailError
|
26
26
|
def type
|
27
|
-
"
|
27
|
+
"softerror"
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
#Hardfail error : This message is not processable and will never be
|
32
32
|
class HardfailError < FailError
|
33
33
|
def type
|
34
|
-
"
|
34
|
+
"harderror"
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
data/lib/gorg_service/message.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
require 'json'
|
4
4
|
require 'time'
|
5
5
|
|
6
|
+
require "gorg_service/message/json_schema"
|
7
|
+
|
6
8
|
class GorgService
|
7
9
|
class Message
|
8
10
|
|
@@ -10,24 +12,30 @@ class GorgService
|
|
10
12
|
attr_accessor :id
|
11
13
|
attr_accessor :data
|
12
14
|
attr_accessor :errors
|
15
|
+
attr_accessor :creation_time
|
16
|
+
attr_accessor :sender
|
13
17
|
|
14
18
|
def errors
|
15
19
|
@errors||=[]
|
16
20
|
end
|
17
21
|
|
18
22
|
|
19
|
-
def initialize(id:
|
20
|
-
@id=id
|
23
|
+
def initialize(id: generate_id, data: nil, event: nil, creation_time: DateTime.now.iso8601, sender: application_id , errors: [])
|
24
|
+
@id=id
|
21
25
|
@event=event
|
22
26
|
@data=data
|
23
27
|
@errors=errors
|
28
|
+
@creation_time=creation_time
|
29
|
+
@sender= sender
|
24
30
|
end
|
25
31
|
|
26
32
|
# Generate RabbitMQ message body
|
27
33
|
def to_json
|
28
34
|
body={
|
29
|
-
|
30
|
-
|
35
|
+
event_uuid: @id,
|
36
|
+
event_name: @event,
|
37
|
+
event_sender_id: @sender,
|
38
|
+
event_creation_time: @creation_time,
|
31
39
|
data: @data,
|
32
40
|
}
|
33
41
|
if errors.any?
|
@@ -39,12 +47,16 @@ class GorgService
|
|
39
47
|
|
40
48
|
# Log FailError in message body
|
41
49
|
def log_error error
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
50
|
+
hsh={
|
51
|
+
error_type: error.type.downcase,
|
52
|
+
error_uuid: generate_id,
|
53
|
+
error_sender: application_id ,
|
54
|
+
error_message: error.message||"",
|
55
|
+
timestamp: DateTime.now.iso8601,
|
56
|
+
error_debug: {internal_error: error.error_raised.inspect},
|
47
57
|
}
|
58
|
+
hsh[:error_debug] = {internal_error: error.error_raised.inspect} if error.error_raised
|
59
|
+
errors<<hsh
|
48
60
|
end
|
49
61
|
|
50
62
|
### Class methods
|
@@ -58,10 +70,14 @@ class GorgService
|
|
58
70
|
begin
|
59
71
|
json_body=JSON.parse(body)
|
60
72
|
|
73
|
+
JSON::Validator.validate!(GorgService::Message::JSON_SCHEMA,json_body)
|
74
|
+
|
61
75
|
msg=self.new(
|
62
|
-
id: json_body["
|
63
|
-
event: json_body["
|
76
|
+
id: json_body["event_uuid"],
|
77
|
+
event: json_body["event_name"],
|
64
78
|
data: convert_keys_to_sym(json_body["data"]),
|
79
|
+
creation_time: json_body["event_creation_time"] && DateTime.parse(json_body["event_creation_time"]),
|
80
|
+
sender: json_body["event_sender_id"],
|
65
81
|
errors: json_body["errors"]&&json_body["errors"].map{|e| convert_keys_to_sym(e)},
|
66
82
|
)
|
67
83
|
|
@@ -92,7 +108,11 @@ class GorgService
|
|
92
108
|
|
93
109
|
# Generate new id
|
94
110
|
def generate_id
|
95
|
-
|
111
|
+
SecureRandom.uuid()
|
112
|
+
end
|
113
|
+
|
114
|
+
def application_id
|
115
|
+
GorgService.configuration.application_id
|
96
116
|
end
|
97
117
|
|
98
118
|
|
@@ -0,0 +1,98 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
class GorgService
|
7
|
+
class Message
|
8
|
+
|
9
|
+
JSON_SCHEMA = JSON.parse('{
|
10
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
11
|
+
"type": "object",
|
12
|
+
"properties": {
|
13
|
+
"event_name": {
|
14
|
+
"type": "string",
|
15
|
+
"pattern": "^[_a-z]+((\\.)?[_a-z]+)*$",
|
16
|
+
"description": "Event type. Must match the routing key"
|
17
|
+
},
|
18
|
+
"event_uuid": {
|
19
|
+
"type": "string",
|
20
|
+
"description": "The unique identifier of this message as UUID",
|
21
|
+
"pattern": "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
|
22
|
+
},
|
23
|
+
"event_creation_time": {
|
24
|
+
"type": "string",
|
25
|
+
"description": "Creation time in UTC ISO 8601 format",
|
26
|
+
"pattern": "^([\\\+-]?\\\d{4}(?!\\\d{2}\\\b))((-?)((0[1-9]|1[0-2])(\\\3([12]\\\d|0[1-9]|3[01]))?|W([0-4]\\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\\d|[12]\\\d{2}|3([0-5]\\\d|6[1-6])))([T\\\s]((([01]\\\d|2[0-3])((:?)[0-5]\\\d)?|24\\\:?00)([\\\.,]\\\d+(?!:))?)?(\\\17[0-5]\\\d([\\\.,]\\\d+)?)?([zZ]|([\\\+-])([01]\\\d|2[0-3]):?([0-5]\\\d)?)?)?)?$"
|
27
|
+
},
|
28
|
+
"event_sender_id": {
|
29
|
+
"type": "string",
|
30
|
+
"description": "Producer that sent the original message"
|
31
|
+
},
|
32
|
+
"data": {
|
33
|
+
"type": "object",
|
34
|
+
"description": "Data used to process this message"
|
35
|
+
},
|
36
|
+
"errors_count": {
|
37
|
+
"type": "integer",
|
38
|
+
"description": "Helper for counting errors"
|
39
|
+
},
|
40
|
+
"errors": {
|
41
|
+
"type": "array",
|
42
|
+
"items": {
|
43
|
+
"type": "object",
|
44
|
+
"properties": {
|
45
|
+
"error_type": {
|
46
|
+
"enum": [ "debug", "info", "warning", "softerror", "harderror" ],
|
47
|
+
"description": "Type of error."
|
48
|
+
},
|
49
|
+
"error_sender": {
|
50
|
+
"type": "string",
|
51
|
+
"description": "Consummer that sent this error"
|
52
|
+
},
|
53
|
+
"error_code":{
|
54
|
+
"type":"string",
|
55
|
+
"description": "Optionnal error code from the consummer"
|
56
|
+
},
|
57
|
+
"error_uuid":{
|
58
|
+
"type":"string",
|
59
|
+
"description": "The unique identifier of this error as UUID",
|
60
|
+
"pattern": "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}"
|
61
|
+
},
|
62
|
+
"error_message":{
|
63
|
+
"type":"string",
|
64
|
+
"description": "Error explanation"
|
65
|
+
},
|
66
|
+
"timestamp": {
|
67
|
+
"type": "string",
|
68
|
+
"description": "Time of occuring error in UTC ISO 8601",
|
69
|
+
"pattern": "^([\\\+-]?\\\d{4}(?!\\\d{2}\\\b))((-?)((0[1-9]|1[0-2])(\\\3([12]\\\d|0[1-9]|3[01]))?|W([0-4]\\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\\d|[12]\\\d{2}|3([0-5]\\\d|6[1-6])))([T\\\s]((([01]\\\d|2[0-3])((:?)[0-5]\\\d)?|24\\\:?00)([\\\.,]\\\d+(?!:))?)?(\\\17[0-5]\\\d([\\\.,]\\\d+)?)?([zZ]|([\\\+-])([01]\\\d|2[0-3]):?([0-5]\\\d)?)?)?)?$"
|
70
|
+
},
|
71
|
+
"error_debug": {
|
72
|
+
"type": "object",
|
73
|
+
"description": "Complementary informations for debugging"
|
74
|
+
}
|
75
|
+
},
|
76
|
+
"additionalProperties": false,
|
77
|
+
"required": [
|
78
|
+
"error_type",
|
79
|
+
"error_sender",
|
80
|
+
"timestamp",
|
81
|
+
"error_uuid",
|
82
|
+
"error_message"
|
83
|
+
]
|
84
|
+
}
|
85
|
+
}
|
86
|
+
},
|
87
|
+
"additionalProperties": false,
|
88
|
+
"required": [
|
89
|
+
"event_name",
|
90
|
+
"event_uuid",
|
91
|
+
"event_creation_time",
|
92
|
+
"event_sender_id",
|
93
|
+
"data"
|
94
|
+
]
|
95
|
+
}')
|
96
|
+
|
97
|
+
end
|
98
|
+
end
|
@@ -9,11 +9,11 @@ class GorgService
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def raise_hardfail(message, error:nil)
|
12
|
-
raise HardfailError.new(error)
|
12
|
+
raise HardfailError.new(message, error)
|
13
13
|
end
|
14
14
|
|
15
15
|
def raise_softfail(message, error:nil)
|
16
|
-
raise SoftfailError.new(error)
|
16
|
+
raise SoftfailError.new(message, error)
|
17
17
|
end
|
18
18
|
|
19
19
|
end
|
data/lib/gorg_service/version.rb
CHANGED
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: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre Narbonne
|
@@ -128,6 +128,20 @@ dependencies:
|
|
128
128
|
- - "~>"
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '9.0'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: json-schema
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
131
145
|
description:
|
132
146
|
email:
|
133
147
|
- alexandre.narbonne@gadz.org
|
@@ -151,6 +165,7 @@ files:
|
|
151
165
|
- lib/gorg_service/errors.rb
|
152
166
|
- lib/gorg_service/listener.rb
|
153
167
|
- lib/gorg_service/message.rb
|
168
|
+
- lib/gorg_service/message/json_schema.rb
|
154
169
|
- lib/gorg_service/message_handler.rb
|
155
170
|
- lib/gorg_service/version.rb
|
156
171
|
homepage: https://github.com/Zooip/gorg_service
|