chili_logger 0.0.3 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.byebug_history +78 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +12 -4
- data/README.md +1051 -25
- data/assets/images/chili-logger-flow.png +0 -0
- data/assets/images/chiligum-logging-system.gif +0 -0
- data/assets/images/rabbit-basic-functioning.png +0 -0
- data/assets/images/rabbit-topic-explanation.webp +0 -0
- data/chili_logger-0.0.6.gem +0 -0
- data/chili_logger-0.0.7.gem +0 -0
- data/chili_logger-0.0.8.gem +0 -0
- data/chili_logger.gemspec +3 -3
- data/lib/brokers/rabbit_broker.rb +4 -4
- data/lib/{errors/logging_error_handler/sqs_handler.rb → brokers/sqs_broker.rb} +4 -14
- data/lib/chili_logger.rb +33 -14
- data/lib/chili_logger/version.rb +1 -1
- data/lib/current_log_accessor.rb +77 -53
- data/lib/errors/logging_error_handler/logging_error_handler.rb +29 -12
- data/lib/{logs_coverage → helpers/logs_coverage}/chili_logger_coverage.yml +0 -0
- data/lib/{logs_coverage → helpers/logs_coverage}/coverage_writer.rb +20 -14
- data/lib/{logs_coverage → helpers/logs_coverage}/levantamento_provis/303/263rio.yaml +0 -0
- data/lib/helpers/values/default.rb +92 -0
- data/lib/helpers/values/type_uniformizer/desc.rb +64 -0
- data/lib/helpers/values/type_uniformizer/main_content.rb +62 -0
- data/lib/helpers/values/type_uniformizer/user.rb +43 -0
- data/lib/message_writer/aws_ops_metadata.rb +1 -1
- data/lib/message_writer/message_writer.rb +21 -18
- data/log/chili-logger-coverage.yml +50 -1
- metadata +33 -18
- data/chili_logger-0.0.1.gem +0 -0
- data/lib/errors/error_messages/rabbitmq_error.rb +0 -9
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/chili_logger.gemspec
CHANGED
@@ -11,9 +11,9 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.homepage = 'https://gitlab.com/chiligumdev/chili_logger'
|
12
12
|
spec.license = 'MIT'
|
13
13
|
spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
|
14
|
-
spec.add_dependency 'aws-sdk', '~> 2.9.
|
15
|
-
spec.add_dependency 'bunny'
|
16
|
-
spec.add_dependency 'httparty'
|
14
|
+
spec.add_dependency 'aws-sdk', '~> 2.9', '>= 2.9.0'
|
15
|
+
spec.add_dependency 'bunny'
|
16
|
+
spec.add_dependency 'httparty'
|
17
17
|
|
18
18
|
# Specify which files should be added to the gem when it is released.
|
19
19
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'bunny'
|
2
|
-
require '
|
3
|
-
require 'errors/logging_error_handler/logging_error_handler'
|
2
|
+
require 'brokers/sqs_broker'
|
4
3
|
|
5
4
|
# class for centralizing Creative's logging logic
|
6
5
|
class ChiliLogger
|
@@ -18,7 +17,7 @@ class ChiliLogger
|
|
18
17
|
@ip = config[:ip]
|
19
18
|
@port = config[:port]
|
20
19
|
@exchange_name = config[:exchange_name]
|
21
|
-
@routing_key_overwriter = config[:
|
20
|
+
@routing_key_overwriter = config[:routing_key_overwriter]
|
22
21
|
|
23
22
|
connect
|
24
23
|
end
|
@@ -48,6 +47,7 @@ class ChiliLogger
|
|
48
47
|
# temporary solution so we can force configure ChiliLogger to use a specific routing_key
|
49
48
|
key = @routing_key_overwriter || routing_key
|
50
49
|
@exchange.publish(message.to_json, routing_key: key)
|
50
|
+
puts "sent message to #{@exchange_name}, with routing_key = '#{key}'"
|
51
51
|
|
52
52
|
rescue StandardError => e
|
53
53
|
@logging_error_handler.handle_error(e, message)
|
@@ -80,7 +80,7 @@ class ChiliLogger
|
|
80
80
|
def validate_config(config)
|
81
81
|
raise(ChiliLogger::ConfigError, invalid_config_format_error) unless config.is_a?(Hash)
|
82
82
|
|
83
|
-
main_config_keys = %i[user password ip port exchange_name
|
83
|
+
main_config_keys = %i[user password ip port exchange_name]
|
84
84
|
main_config_keys.each { |key| raise(ChiliLogger::ConfigError, config_attr_error(key)) unless config[key] }
|
85
85
|
end
|
86
86
|
end
|
@@ -1,21 +1,21 @@
|
|
1
1
|
require 'aws-sdk'
|
2
|
-
require 'errors/error_messages/rabbitmq_error'
|
3
2
|
|
4
3
|
# class for centralizing Creative's logging logic
|
5
4
|
class ChiliLogger
|
6
5
|
# module with classes using Amazon Web Services services
|
7
6
|
module AWS
|
8
7
|
# class that handles errors when message broker can't be reached, etc...
|
9
|
-
class
|
8
|
+
class SqsBroker
|
10
9
|
def initialize(config)
|
11
10
|
@sqs_config = validate_config(config)
|
12
11
|
@queue_name = config[:queue_name]
|
12
|
+
@default = ChiliLogger::Values::Default.new
|
13
13
|
|
14
14
|
@sqs = Aws::SQS::Client.new(@sqs_config)
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
message_body =
|
17
|
+
def publish(message = @default.sqs_message)
|
18
|
+
message_body = { body: message }
|
19
19
|
queue_message = queue_message(message_body)
|
20
20
|
|
21
21
|
@sqs.send_message(queue_message)
|
@@ -32,16 +32,6 @@ class ChiliLogger
|
|
32
32
|
}
|
33
33
|
end
|
34
34
|
|
35
|
-
def message_body(error, log)
|
36
|
-
message_body = {
|
37
|
-
error_type: error.class.name,
|
38
|
-
error_message: error.message,
|
39
|
-
log: log
|
40
|
-
}
|
41
|
-
|
42
|
-
{ body: message_body }
|
43
|
-
end
|
44
|
-
|
45
35
|
def queue_url(queue_name)
|
46
36
|
@sqs.get_queue_url(queue_name: queue_name).queue_url
|
47
37
|
end
|
data/lib/chili_logger.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
require 'chili_logger/version'
|
2
2
|
require 'current_log_accessor'
|
3
3
|
require 'errors/error_messages/config_error'
|
4
|
+
require 'errors/logging_error_handler/logging_error_handler'
|
4
5
|
require 'brokers/rabbit_broker'
|
5
6
|
require 'message_writer/message_writer'
|
6
|
-
require '
|
7
|
+
require 'brokers/sqs_broker'
|
8
|
+
require 'helpers/values/default'
|
9
|
+
require 'helpers/values/type_uniformizer/desc'
|
10
|
+
require 'helpers/values/type_uniformizer/user'
|
11
|
+
require 'helpers/values/type_uniformizer/main_content'
|
7
12
|
require 'singleton'
|
8
13
|
|
9
14
|
# class for centralizing Creative's logging logic
|
@@ -14,6 +19,13 @@ class ChiliLogger
|
|
14
19
|
# initialize it with ChiliLogger.instance
|
15
20
|
include Singleton
|
16
21
|
|
22
|
+
def initialize
|
23
|
+
@default = ChiliLogger::Values::Default.new
|
24
|
+
@user_uniformizer = ChiliLogger::Values::TypeUniformizer::User.new
|
25
|
+
@desc_uniformizer = ChiliLogger::Values::TypeUniformizer::Desc.new
|
26
|
+
@main_content_uniformizer = ChiliLogger::Values::TypeUniformizer::MainContent.new
|
27
|
+
end
|
28
|
+
|
17
29
|
def config(config)
|
18
30
|
@deactivated = config[:deactivated] || false # ChilLogger can be deactivated for test environents
|
19
31
|
|
@@ -28,19 +40,26 @@ class ChiliLogger
|
|
28
40
|
@current_log_accessor
|
29
41
|
end
|
30
42
|
|
31
|
-
def start_new_log(
|
43
|
+
def start_new_log(**options)
|
32
44
|
current_log.clear_log_info
|
33
45
|
|
34
|
-
current_log.
|
35
|
-
current_log.
|
36
|
-
current_log.
|
46
|
+
current_log.update_desc(options[:desc])
|
47
|
+
current_log.update_user(options[:user])
|
48
|
+
current_log.update_main_content(options[:main_content])
|
37
49
|
|
38
50
|
current_log
|
39
51
|
end
|
40
52
|
|
41
|
-
def publish_instant_log(
|
42
|
-
|
43
|
-
|
53
|
+
def publish_instant_log(**options)
|
54
|
+
# enforces that all attributes have valid primitive types
|
55
|
+
if options
|
56
|
+
options[:desc] = @desc_uniformizer.desc(options[:desc])
|
57
|
+
options[:user] = @user_uniformizer.user(options[:user])
|
58
|
+
options[:main_content] = @main_content_uniformizer.main_content(options[:main_content])
|
59
|
+
end
|
60
|
+
|
61
|
+
message = @msg_writer.write(options)
|
62
|
+
routing_key = @msg_writer.write_description_tag(options[:desc])
|
44
63
|
|
45
64
|
@msg_broker.publish(message, routing_key)
|
46
65
|
end
|
@@ -48,11 +67,11 @@ class ChiliLogger
|
|
48
67
|
private
|
49
68
|
|
50
69
|
def config_logging_error_handler(general_config)
|
51
|
-
return @logging_error_handler = nil if @deactivated
|
70
|
+
return @logging_error_handler = nil if @deactivated
|
52
71
|
|
53
|
-
|
54
|
-
|
55
|
-
@logging_error_handler = LoggingErrorHandler.new(
|
72
|
+
fallback_name = general_config[:fallback_broker]
|
73
|
+
fallback_config = general_config[:fallback_broker_config]
|
74
|
+
@logging_error_handler = LoggingErrorHandler.new(fallback_name, fallback_config)
|
56
75
|
end
|
57
76
|
|
58
77
|
def config_msg_writer(general_config)
|
@@ -67,8 +86,8 @@ class ChiliLogger
|
|
67
86
|
end
|
68
87
|
|
69
88
|
def config_msg_broker(general_config)
|
70
|
-
msg_broker_name = general_config[:msg_broker_name] ||
|
71
|
-
msg_broker_config = general_config[:msg_broker_config] ||
|
89
|
+
msg_broker_name = general_config[:msg_broker_name] || @default.msg_broker
|
90
|
+
msg_broker_config = general_config[:msg_broker_config] || @default.msg_broker_config
|
72
91
|
@msg_broker = supported_msg_brokers[msg_broker_name.to_sym]
|
73
92
|
raise(ConfigError, broker_name_error(msg_broker_name)) unless @msg_broker
|
74
93
|
|
data/lib/chili_logger/version.rb
CHANGED
data/lib/current_log_accessor.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
require 'message_writer/message_writer'
|
2
|
+
require 'helpers/values/default'
|
3
|
+
require 'helpers/values/type_uniformizer/desc'
|
4
|
+
require 'helpers/values/type_uniformizer/main_content'
|
5
|
+
require 'helpers/values/type_uniformizer/user'
|
2
6
|
require 'byebug'
|
3
7
|
|
4
8
|
# class for centralizing Creative's logging logic
|
@@ -8,14 +12,16 @@ class ChiliLogger
|
|
8
12
|
def initialize(msg_broker, msg_writer)
|
9
13
|
@msg_broker = msg_broker
|
10
14
|
@msg_writer = msg_writer
|
15
|
+
@default = ChiliLogger::Values::Default.new
|
16
|
+
@user_uniformizer = ChiliLogger::Values::TypeUniformizer::User.new
|
17
|
+
@desc_uniformizer = ChiliLogger::Values::TypeUniformizer::Desc.new
|
18
|
+
@main_content_uniformizer = ChiliLogger::Values::TypeUniformizer::MainContent.new
|
11
19
|
end
|
12
20
|
|
13
|
-
def publish(
|
14
|
-
|
15
|
-
overwrite_agent(new_agent) if new_agent
|
16
|
-
overwrite_main_content(new_main_content) if new_main_content
|
21
|
+
def publish(**options)
|
22
|
+
update_current_log(options)
|
17
23
|
|
18
|
-
message = @msg_writer.write(desc,
|
24
|
+
message = @msg_writer.write(desc: desc, user: user, main_content: main_content)
|
19
25
|
routing_key = @msg_writer.write_description_tag(desc)
|
20
26
|
|
21
27
|
@msg_broker.publish(message, routing_key)
|
@@ -23,98 +29,116 @@ class ChiliLogger
|
|
23
29
|
end
|
24
30
|
|
25
31
|
# ACCESSOR METHODS BELOW
|
26
|
-
#
|
27
|
-
|
28
|
-
|
29
|
-
Thread.current[:current_log_agent] ||= 'not_specified'
|
32
|
+
# current log infos are stored in thread variables, so they can be accessed anywhere(controllers, models, tasks...)
|
33
|
+
def user
|
34
|
+
Thread.current[:current_log_user] ||= @default.user
|
30
35
|
end
|
31
36
|
|
32
|
-
def
|
33
|
-
Thread.current[:
|
34
|
-
|
37
|
+
def update_user(new_user)
|
38
|
+
return Thread.current[:current_log_user] = nil if new_user.nil?
|
39
|
+
|
40
|
+
uniformized_user = @user_uniformizer.user(new_user)
|
41
|
+
Thread.current[:current_log_user] = user.merge(uniformized_user)
|
35
42
|
end
|
36
43
|
|
37
44
|
def desc
|
38
|
-
Thread.current[:current_log_desc] ||=
|
45
|
+
Thread.current[:current_log_desc] ||= @default.desc
|
39
46
|
end
|
40
47
|
|
41
|
-
def
|
42
|
-
desc[:type] = new_type_name
|
48
|
+
def update_type(new_type_name)
|
49
|
+
desc[:type] = @desc_uniformizer.type(new_type_name)
|
43
50
|
end
|
44
51
|
|
45
|
-
def
|
46
|
-
desc[:service] = new_service_name
|
52
|
+
def update_service(new_service_name)
|
53
|
+
desc[:service] = @desc_uniformizer.service(new_service_name)
|
47
54
|
end
|
48
55
|
|
49
|
-
def
|
50
|
-
desc[:action] = new_action_name
|
56
|
+
def update_action(new_action_name)
|
57
|
+
desc[:action] = @desc_uniformizer.action(new_action_name)
|
51
58
|
end
|
52
59
|
|
53
|
-
def
|
60
|
+
def update_desc(new_desc)
|
54
61
|
return Thread.current[:current_log_desc] = nil if new_desc.nil?
|
55
|
-
return unless new_desc.is_a?(Hash)
|
56
62
|
|
57
|
-
|
58
|
-
desc
|
63
|
+
uniformized_desc = @desc_uniformizer.desc(new_desc)
|
64
|
+
Thread.current[:current_log_desc] = desc.merge(uniformized_desc)
|
59
65
|
end
|
60
66
|
|
61
67
|
def main_content
|
62
|
-
Thread.current[:current_log_main_content] ||=
|
68
|
+
Thread.current[:current_log_main_content] ||= @default.main_content
|
63
69
|
end
|
64
70
|
|
65
|
-
def
|
66
|
-
return Thread.current[:current_log_main_content] = nil if
|
67
|
-
|
71
|
+
def update_main_content(new_content)
|
72
|
+
return Thread.current[:current_log_main_content] = nil if new_content.nil?
|
73
|
+
|
74
|
+
uniform_content = @main_content_uniformizer.main_content(new_content)
|
75
|
+
uniform_recs = @main_content_uniformizer.modified_records(uniform_content[:modified_records])
|
76
|
+
uniform_errors = @main_content_uniformizer.errors(uniform_content[:errors])
|
68
77
|
|
69
|
-
|
78
|
+
# only overwrite if key was explicitly set
|
79
|
+
main_content[:modified_records] = uniform_recs if uniform_content.key?(:modified_records)
|
80
|
+
main_content[:errors] = uniform_errors if uniform_content.key?(:errors)
|
70
81
|
end
|
71
82
|
|
72
83
|
def add_to_main_content(new_content)
|
73
|
-
|
84
|
+
uniform_content = @main_content_uniformizer.main_content(new_content)
|
85
|
+
uniform_recs = uniform_content[:modified_records]
|
86
|
+
uniform_errs = uniform_content[:errors]
|
74
87
|
|
75
|
-
|
88
|
+
# only overwrite if key was explicitly set
|
89
|
+
main_content[:modified_records] = modified_records.merge(uniform_recs) if uniform_recs
|
90
|
+
main_content[:errors] = errors + uniform_errs if uniform_errs
|
76
91
|
end
|
77
92
|
|
78
93
|
def modified_records
|
79
|
-
main_content[:modified_records] ||=
|
94
|
+
main_content[:modified_records] ||= @default.modified_records
|
80
95
|
end
|
81
96
|
|
82
|
-
def overwrite_modified_records(
|
83
|
-
return
|
84
|
-
return unless modified_records.is_a?(Hash)
|
97
|
+
def overwrite_modified_records(new_mod_recs)
|
98
|
+
return main_content[:modified_records] = nil if new_mod_recs.nil?
|
85
99
|
|
86
|
-
|
100
|
+
uniformized_recs = @main_content_uniformizer.modified_records(new_mod_recs)
|
101
|
+
main_content[:modified_records] = uniformized_recs
|
87
102
|
end
|
88
103
|
|
89
|
-
def add_modified_record(table_name,
|
90
|
-
return unless table_name
|
104
|
+
def add_modified_record(table_name, new_mod_rec)
|
91
105
|
return unless table_name.is_a?(String)
|
92
|
-
return unless modified_record_hash
|
93
|
-
return unless modified_record_hash.is_a?(Hash)
|
94
106
|
|
107
|
+
uniformized_rec = @main_content_uniformizer.modified_record(new_mod_rec)
|
95
108
|
modified_records[table_name] ||= []
|
96
|
-
modified_records[table_name] = modified_records[table_name].push(
|
109
|
+
modified_records[table_name] = modified_records[table_name].push(uniformized_rec)
|
97
110
|
end
|
98
111
|
|
99
|
-
def
|
100
|
-
|
101
|
-
overwrite_agent(nil)
|
102
|
-
overwrite_main_content(nil)
|
112
|
+
def errors
|
113
|
+
main_content[:errors] ||= @default.log_errors
|
103
114
|
end
|
104
115
|
|
105
|
-
|
116
|
+
def overwrite_errors(new_errors)
|
117
|
+
return main_content[:errors] = nil if new_errors.nil?
|
106
118
|
|
107
|
-
|
108
|
-
|
119
|
+
uniformized_errors = @main_content_uniformizer.errors(new_errors)
|
120
|
+
main_content[:errors] = uniformized_errors
|
109
121
|
end
|
110
122
|
|
111
|
-
def
|
112
|
-
|
113
|
-
|
123
|
+
def add_error(error)
|
124
|
+
uniformized_error = @main_content_uniformizer.error(error)
|
125
|
+
|
126
|
+
main_content[:errors] = errors.push(uniformized_error)
|
127
|
+
errors
|
128
|
+
end
|
129
|
+
|
130
|
+
def clear_log_info
|
131
|
+
update_desc(nil)
|
132
|
+
update_user(nil)
|
133
|
+
update_main_content(nil)
|
134
|
+
end
|
135
|
+
|
136
|
+
private
|
114
137
|
|
115
|
-
|
116
|
-
|
117
|
-
|
138
|
+
def update_current_log(options)
|
139
|
+
update_desc(options[:desc]) if options[:desc]
|
140
|
+
update_user(options[:user]) if options[:user]
|
141
|
+
update_main_content(options[:main_content]) if options[:main_content]
|
118
142
|
end
|
119
143
|
end
|
120
144
|
end
|
@@ -1,36 +1,53 @@
|
|
1
|
-
require '
|
1
|
+
require 'brokers/sqs_broker'
|
2
2
|
require 'errors/error_messages/config_error'
|
3
3
|
|
4
4
|
# class for centralizing Creative's logging logic
|
5
5
|
class ChiliLogger
|
6
6
|
# class that handles errors when message broker can't be reached, etc...
|
7
7
|
class LoggingErrorHandler
|
8
|
-
def initialize(
|
9
|
-
raise(ChiliLogger::ConfigError, ':
|
8
|
+
def initialize(fallback_name, config)
|
9
|
+
raise(ChiliLogger::ConfigError, ':fallback_broker_config must be present and be a hash') unless config.is_a?(Hash)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
fallback_name = fallback_name.to_sym if fallback_name
|
12
|
+
fallback_broker_class = supported_fallback_brokers[fallback_name]
|
13
|
+
unsupported_fallback_broker_error unless fallback_broker_class
|
14
14
|
|
15
|
-
@
|
15
|
+
@fallback_broker = fallback_broker_class.new(config)
|
16
16
|
end
|
17
17
|
|
18
18
|
def handle_error(error, log = nil)
|
19
|
-
|
19
|
+
message = message(error, log)
|
20
|
+
@fallback_broker.publish(message)
|
21
|
+
rescue StandardError => e
|
22
|
+
puts '
|
23
|
+
There was a problem with both the Message Broker and the Fallback Broker simultaneously.
|
24
|
+
To keep the application running and prevent downtime,
|
25
|
+
ChiliLogger will ignore this errors and discard the log it was currently trying to publish.
|
26
|
+
Please note that logs are being permanently lost.
|
27
|
+
'
|
28
|
+
puts e
|
20
29
|
end
|
21
30
|
|
22
31
|
private
|
23
32
|
|
24
|
-
def
|
25
|
-
|
33
|
+
def message(error, log)
|
34
|
+
{
|
35
|
+
error_type: error.class.name,
|
36
|
+
error_message: error.message,
|
37
|
+
log: log
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def unsupported_fallback_broker_error
|
42
|
+
error_handlers = supported_fallback_brokers.keys.join(', ')
|
26
43
|
unsupported_err = ":error_handler must be present and have one of the following values: #{error_handlers}"
|
27
44
|
|
28
45
|
raise(ChiliLogger::ConfigError, unsupported_err)
|
29
46
|
end
|
30
47
|
|
31
|
-
def
|
48
|
+
def supported_fallback_brokers
|
32
49
|
{
|
33
|
-
aws_sqs: AWS::
|
50
|
+
aws_sqs: AWS::SqsBroker
|
34
51
|
}
|
35
52
|
end
|
36
53
|
end
|