ree_lib 1.0.4 → 1.0.5

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
  SHA256:
3
- metadata.gz: f6993bc1d11274673b58043eb21b76ac10a725ee12f1718858573c946eb8c209
4
- data.tar.gz: dd9829fb7303a8faf0794bd429413e45be81a9cc603436c4286ef5b707751944
3
+ metadata.gz: 9481a0ea7f7bebebf1386a48fb558859ff18c761ebece7f56b0e43e279fd1945
4
+ data.tar.gz: 98aa337a94ab47d178e45f54f94b15027c0d6a71c164df5d0450874fe8e876d1
5
5
  SHA512:
6
- metadata.gz: 134160befab48d3efebc41320ecdcba87abbd898110a9b5f11218ac3dbc6f7c010193db04c66d4e25b22f858d353c895187f9bce67e2de47984736c28cb4add3
7
- data.tar.gz: 929156910d1168bd58d78a00da630bcea2eec737914ce4adbbe037da161169a8865d33c4e207753d5bf631d51a24a30eba5d034640ee91246c2283d7f4083489
6
+ metadata.gz: 7b5b129cb9045109d08a53a938d446eb6210ea23f63f9656abd77d0c1344fb2c7297c51a5983e1ebb61d9829977f40facc83ae6e4f8c8e7f9845e869292c25be
7
+ data.tar.gz: b1e945345d629c4fe23283660d0328a186308559f2b3c4c6fd2e2ed2cadcf6d300f8c9946e947b51010902a732547dbe408e2248075030466d0a9387871d3f08
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.4)
4
+ ree_lib (1.0.5)
5
5
  binding_of_caller (~> 1.0.0)
6
6
  i18n (~> 1.12.0)
7
7
  loofah (~> 2.18.0)
@@ -49,6 +49,7 @@ GEM
49
49
  ree (1.0.2)
50
50
  commander (~> 4.6.0)
51
51
  rexml (3.2.5)
52
+ rollbar (3.3.1)
52
53
  rspec (3.11.0)
53
54
  rspec-core (~> 3.11.0)
54
55
  rspec-expectations (~> 3.11.0)
@@ -82,6 +83,7 @@ DEPENDENCIES
82
83
  pg (~> 1.4.1)
83
84
  rake (~> 13.0)
84
85
  ree_lib!
86
+ rollbar (~> 3.3.1)
85
87
  rspec
86
88
  sqlite3 (~> 1.4.4)
87
89
  timecop (~> 0.9.5)
@@ -16,6 +16,9 @@
16
16
  {
17
17
  "name": "ree_object"
18
18
  },
19
+ {
20
+ "name": "ree_swagger"
21
+ },
19
22
  {
20
23
  "name": "ree_validator"
21
24
  }
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'appender'
4
+ require 'rollbar'
5
+ require 'digest'
6
+
7
+ class ReeLogger::RollbarAppender < ReeLogger::Appender
8
+ include Ree::LinkDSL
9
+
10
+ link 'ree_logger/log_event', -> { LogEvent }
11
+
12
+ contract(
13
+ Symbol,
14
+ Kwargs[
15
+ access_token: String,
16
+ environment: String,
17
+ ],
18
+ Ksplat[
19
+ branch?: Nilor[String],
20
+ host?: Nilor[String],
21
+ ] => Any
22
+ )
23
+ def initialize(level, access_token:, environment:, **opts)
24
+ super(level, nil)
25
+
26
+ Rollbar.configure do |config|
27
+ config.enabled = true
28
+ config.access_token = access_token
29
+ config.environment = environment
30
+ config.branch = opts[:branch] if opts[:branch]
31
+ config.host = opts[:host] if opts[:host]
32
+ end
33
+ end
34
+
35
+ contract(LogEvent, Nilor[String] => nil)
36
+ def append(event, progname = nil)
37
+ rollbar_level =
38
+ case event.level
39
+ when :fatal
40
+ 'critical'
41
+ when :unknown
42
+ 'critical'
43
+ else
44
+ event.level.to_s
45
+ end
46
+
47
+ fingerprint = event.message.to_s
48
+
49
+ if event.exception
50
+ fingerprint += event.exception.class.to_s
51
+ end
52
+
53
+ scope = {}
54
+ parameters = event.parameters.dup
55
+
56
+ if parameters.key?(:rollbar_scope) && parameters[:rollbar_scope].is_a?(Hash)
57
+ scope = scope.merge(
58
+ parameters.delete(:rollbar_scope)
59
+ )
60
+ end
61
+
62
+ if !scope[:fingerprint]
63
+ fingerprint = event.message.to_s
64
+
65
+ if event.exception
66
+ fingerprint += event.exception.class.to_s
67
+ end
68
+
69
+ scope[:fingerprint] = Digest::MD5.new.update(fingerprint).to_s
70
+ end
71
+
72
+ Rollbar.scoped(scope) do
73
+ Rollbar.log(rollbar_level, event.message, event.exception, parameters)
74
+ end
75
+
76
+ nil
77
+ end
78
+ end
@@ -14,6 +14,7 @@ class ReeLogger::Logger
14
14
  link 'ree_logger/rate_limiter', -> { RateLimiter }
15
15
  link 'ree_logger/appenders/file_appender', -> { FileAppender }
16
16
  link 'ree_logger/appenders/stdout_appender', -> { StdoutAppender }
17
+ link 'ree_logger/appenders/rollbar_appender', -> { RollbarAppender }
17
18
  end
18
19
 
19
20
  def build
@@ -35,6 +36,19 @@ class ReeLogger::Logger
35
36
  )
36
37
  end
37
38
 
39
+ if config.rollbar.enabled
40
+ opts = {}
41
+ opts[:branch] = config.rollbar.branch if config.rollbar.branch
42
+ opts[:host] = config.rollbar.host if config.rollbar.host
43
+
44
+ appenders << RollbarAppender.new(
45
+ config.levels.rollbar,
46
+ access_token: config.rollbar.access_token,
47
+ environment: config.rollbar.environment,
48
+ **opts
49
+ )
50
+ end
51
+
38
52
  build_logger(
39
53
  appenders,
40
54
  ENV['APP_NAME'],
@@ -17,12 +17,22 @@ class ReeLogger::Config
17
17
  RATE_LIMIT_MAX_COUNT = 600
18
18
 
19
19
  def build
20
+ is_rollbar_enabled = parse_bool_string(ENV['LOG_ROLLBAR_ENABLED'])
21
+
20
22
  to_obj({
21
23
  file_path: ENV['LOG_FILE_PATH'],
22
24
  file_auto_flush: parse_bool_string(ENV['LOG_FILE_AUTO_FLUSH']),
23
25
  levels: {
24
26
  file: parse_level(ENV['LOG_LEVEL_FILE']),
25
27
  stdout: parse_level(ENV['LOG_LEVEL_STDOUT']),
28
+ rollbar: is_rollbar_enabled ? parse_level(ENV['LOG_LEVEL_ROLLBAR']) : nil,
29
+ },
30
+ rollbar: {
31
+ enabled: is_rollbar_enabled,
32
+ access_token: is_rollbar_enabled ? ENV.fetch('LOG_ROLLBAR_ACCESS_TOKEN') : nil,
33
+ environment: is_rollbar_enabled ? ENV.fetch('LOG_ROLLBAR_ENVIRONMENT') : nil,
34
+ branch: ENV['LOG_ROLLBAR_BRANCH'],
35
+ host: ENV['LOG_ROLLBAR_HOST']
26
36
  },
27
37
  rate_limit: {
28
38
  interval: get_int_value('LOG_RATE_LIMIT_INTERVAL', RATE_LIMIT_INTERVAL),
@@ -134,6 +134,14 @@ class ReeLogger::MultiLogger < Logger
134
134
  end
135
135
  end
136
136
 
137
+ parameters = transform_values(parameters) do |k, v|
138
+ if @filter_words.any? { k.to_s.include?(_1) }
139
+ 'FILTERED'
140
+ else
141
+ v
142
+ end
143
+ end
144
+
137
145
  event = LogEvent.new(level, message, exception, parameters)
138
146
 
139
147
  appenders.each do |appender|
@@ -11,6 +11,7 @@ module ReeLogger
11
11
  depends_on :ree_datetime
12
12
  depends_on :ree_validator
13
13
  depends_on :ree_hash
14
+ depends_on :ree_swagger
14
15
 
15
16
  env_var 'LOG_FILE_PATH'
16
17
  env_var 'LOG_LEVEL_FILE'
@@ -0,0 +1,33 @@
1
+ #frozen_string_literal = true
2
+
3
+ package_require('ree_logger/appenders/rollbar_appender')
4
+
5
+ RSpec.describe ReeLogger::RollbarAppender do
6
+ let(:rollbar_appender) { described_class }
7
+
8
+ let(:log_event) {
9
+ ReeLogger::LogEvent.new(
10
+ :info,
11
+ "Some message",
12
+ nil,
13
+ {}
14
+ )
15
+ }
16
+
17
+ # comment "before" block to test sending to api
18
+ before do
19
+ allow(Rollbar).to receive(:log)
20
+ end
21
+
22
+ it "sends log event to Rollbar" do
23
+ appender = rollbar_appender.new(
24
+ :info,
25
+ access_token: ENV['LOG_ROLLBAR_ACCESS_TOKEN'],
26
+ environment: ENV['LOG_ROLLBAR_ENVIRONMENT']
27
+ )
28
+
29
+ expect(appender).to respond_to(:append)
30
+ expect { appender.append(log_event) }.not_to raise_error
31
+ expect(Rollbar).to have_received(:log)
32
+ end
33
+ end
@@ -8,12 +8,16 @@ RSpec.describe :logger do
8
8
 
9
9
  before(:all) do
10
10
  tmp_file_log = ENV['LOG_FILE_PATH']
11
-
11
+
12
12
  if !is_blank(tmp_file_log)
13
13
  File.open(tmp_file_log, 'w') {|file| file.truncate(0) }
14
14
  end
15
15
  end
16
16
 
17
+ before(:each) do
18
+ allow(Rollbar).to receive(:log)
19
+ end
20
+
17
21
  let(:log_file_path) { ENV['LOG_FILE_PATH'] }
18
22
 
19
23
  let(:exception) {
@@ -22,21 +26,25 @@ RSpec.describe :logger do
22
26
 
23
27
  it {
24
28
  expect { logger.info('hello world') }.to output(/hello world/).to_stdout
29
+ expect(Rollbar).to have_received(:log)
25
30
  expect(File.read(log_file_path)).to match("hello world")
26
31
  }
27
32
 
28
33
  it {
29
- expect { logger.info('hello world', { param: 1, another_param: { name: 'John'} }) }.to output(/John/).to_stdout
34
+ expect { logger.info('hello world', { rollbar_scope: {fingerprint: 'test', test: 'test'}, param: 1, another_param: { name: 'John'} }) }.to output(/John/).to_stdout
35
+ expect(Rollbar).to have_received(:log)
30
36
  expect(File.read(log_file_path)).to match("John")
31
37
  }
32
-
38
+
33
39
  it {
34
40
  expect { logger.debug('debug message') }.to_not output(/debug message/).to_stdout
41
+ expect(Rollbar).not_to have_received(:log)
35
42
  expect(File.read(log_file_path)).to_not match("debug")
36
43
  }
37
44
 
38
45
  it {
39
46
  expect { logger.warn('warning message') }.to output(/warning message/).to_stdout
47
+ expect(Rollbar).to have_received(:log)
40
48
  expect(File.read(log_file_path)).to match("warning message")
41
49
  }
42
50
 
@@ -46,17 +54,20 @@ RSpec.describe :logger do
46
54
  }
47
55
  expect(output).to match(/some error message/)
48
56
  expect(output).to_not match(/method|args/)
57
+ expect(Rollbar).to have_received(:log)
49
58
  expect(File.read(log_file_path)).to match("some error message")
50
59
  expect(File.read(log_file_path)).to_not match("PARAMETERS: {:method=>{:name=>:call, :args=>{:block=>{}}}}")
51
60
  }
52
61
 
53
62
  it {
54
63
  expect { logger.fatal('some fatal message', {}, exception) }.to output(/some fatal message/).to_stdout
64
+ expect(Rollbar).to have_received(:log)
55
65
  expect(File.read(log_file_path)).to match("some fatal message")
56
66
  }
57
67
 
58
68
  it {
59
69
  expect { logger.unknown('unknown message') }.to output(/unknown message/).to_stdout
70
+ expect(Rollbar).to have_received(:log)
60
71
  expect(File.read(log_file_path)).to match("unknown message")
61
72
  }
62
73
  end
@@ -1,15 +1,17 @@
1
1
  #frozen_string_literal = true
2
2
 
3
+ require 'rollbar'
3
4
  package_require('ree_logger/multi_logger')
4
5
  package_require('ree_logger/appenders/stdout_appender')
5
6
  package_require('ree_logger/appenders/file_appender')
7
+ package_require('ree_logger/appenders/rollbar_appender')
6
8
 
7
9
  RSpec.describe ReeLogger::MultiLogger do
8
10
  link :is_blank, from: :ree_object
9
11
 
10
12
  before(:all) do
11
13
  tmp_file_log = ENV['LOG_FILE_PATH']
12
-
14
+
13
15
  if !is_blank(tmp_file_log)
14
16
  File.open(tmp_file_log, 'w') {|file| file.truncate(0) }
15
17
  end
@@ -37,6 +39,14 @@ RSpec.describe ReeLogger::MultiLogger do
37
39
  )
38
40
  }
39
41
 
42
+ let(:rollbar_appender) {
43
+ ReeLogger::RollbarAppender.new(
44
+ :info,
45
+ access_token: ENV['LOG_ROLLBAR_ACCESS_TOKEN'],
46
+ environment: ENV['LOG_ROLLBAR_ENVIRONMENT']
47
+ )
48
+ }
49
+
40
50
  let(:logger) {
41
51
  multi_logger.new(
42
52
  'SomeCoolApp',
@@ -46,37 +56,47 @@ RSpec.describe ReeLogger::MultiLogger do
46
56
  }
47
57
 
48
58
  let(:logger_with_appenders) {
49
- [file_appender, stdout_appender].map { logger.add_appender(_1) }
59
+ [file_appender, stdout_appender, rollbar_appender].map { logger.add_appender(_1) }
50
60
 
51
61
  logger
52
62
  }
53
63
 
64
+ before(:each) do
65
+ allow(Rollbar).to receive(:log)
66
+ end
67
+
54
68
  it {
55
69
  expect { logger.add_appender(stdout_appender) }.to change { logger.appenders }
56
70
  }
57
71
 
58
72
  it {
59
73
  expect { logger.info('any message') }.to_not output(/any message/).to_stdout
60
- expect(File.read(log_file_path)).to_not match('any message')
74
+ expect(Rollbar).not_to have_received(:log)
75
+ expect(File.read(log_file_path)).to_not match('any message')
61
76
  }
62
77
 
63
78
  it {
64
79
  expect { logger_with_appenders.info('hello world') }.to output(/hello world/).to_stdout
65
- expect(File.read(log_file_path)).to match("hello world")
80
+ expect(Rollbar).to have_received(:log)
81
+ expect(File.read(log_file_path)).to match("hello world")
66
82
  }
67
83
 
68
84
  it {
69
- expect { logger_with_appenders.info('hello world', { param: 1, another_param: { name: 'John'} }) }.to output(/John/).to_stdout
85
+ expect { logger_with_appenders.info('hello world', { param: 1, another_param: { name: 'John'}, password: 'password01' }) }.to output(/John/).to_stdout
86
+ expect(Rollbar).to have_received(:log)
70
87
  expect(File.read(log_file_path)).to match("John")
88
+ expect(File.read(log_file_path)).to match(":password=>\"FILTERED\"")
71
89
  }
72
-
90
+
73
91
  it {
74
92
  expect { logger_with_appenders.debug('debug message') }.to_not output(/debug message/).to_stdout
93
+ expect(Rollbar).not_to have_received(:log)
75
94
  expect(File.read(log_file_path)).to_not match("debug")
76
95
  }
77
96
 
78
97
  it {
79
98
  expect { logger_with_appenders.warn('warning message') }.to output(/warning message/).to_stdout
99
+ expect(Rollbar).to have_received(:log)
80
100
  expect(File.read(log_file_path)).to match("warning message")
81
101
  }
82
102
 
@@ -87,16 +107,20 @@ RSpec.describe ReeLogger::MultiLogger do
87
107
  expect(output).to match(/some error message/)
88
108
  expect(output).to_not match(/method|args/)
89
109
  expect(File.read(log_file_path)).to match("some error message")
110
+ expect(Rollbar).to have_received(:log)
90
111
  expect(File.read(log_file_path)).to_not match("PARAMETERS: {:method=>{:name=>:call, :args=>{:block=>{}}}}")
91
112
  }
92
113
 
93
114
  it {
94
- expect { logger_with_appenders.fatal('some fatal message', {}, exception) }.to output(/some fatal message/).to_stdout
115
+ expect { logger_with_appenders.fatal('some fatal message', { email: 'some@mail.com', password: 'password01' }, exception) }.to output(/some fatal message/).to_stdout
116
+ expect(Rollbar).to have_received(:log)
95
117
  expect(File.read(log_file_path)).to match("some fatal message")
118
+ expect(File.read(log_file_path)).to match(":password=>\"FILTERED\"")
96
119
  }
97
120
 
98
121
  it {
99
122
  expect { logger_with_appenders.unknown('unknown message') }.to output(/unknown message/).to_stdout
123
+ expect(Rollbar).to have_received(:log)
100
124
  expect(File.read(log_file_path)).to match("unknown message")
101
125
  }
102
126
 
@@ -113,5 +137,5 @@ RSpec.describe ReeLogger::MultiLogger do
113
137
  }.to_not output.to_stdout
114
138
  }
115
139
 
116
-
140
+
117
141
  end
@@ -15,5 +15,9 @@ ENV['LOG_FILE_PATH'] = '/tmp/ree_logger.log'
15
15
  ENV['LOG_FILE_AUTO_FLUSH'] = 'true'
16
16
  ENV['LOG_LEVEL_FILE'] = 'info'
17
17
  ENV['LOG_LEVEL_STDOUT'] = 'info'
18
+ ENV['LOG_LEVEL_ROLLBAR'] = 'info'
18
19
  ENV['LOG_RATE_LIMIT_INTERVAL'] = '60'
19
- ENV['LOG_RATE_LIMIT_COUNT'] = '600'
20
+ ENV['LOG_RATE_LIMIT_COUNT'] = '600'
21
+ ENV['LOG_ROLLBAR_ACCESS_TOKEN'] = 'SET_YOUR_TOKEN'
22
+ ENV['LOG_ROLLBAR_ENABLED'] = 'true'
23
+ ENV['LOG_ROLLBAR_ENVIRONMENT'] = 'test'
@@ -6,4 +6,5 @@ ENV['LOG_FILE_PATH'] =
6
6
  ENV['LOG_LEVEL_FILE'] = ''
7
7
  ENV['LOG_LEVEL_STDOUT'] = ''
8
8
  ENV['LOG_RATE_LIMIT_INTERVAL'] = ''
9
- ENV['LOG_RATE_LIMIT_COUNT'] = ''
9
+ ENV['LOG_RATE_LIMIT_COUNT'] = ''
10
+ ENV['LOG_ROLLBAR_ENABLED'] = 'false'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.4"
4
+ VERSION = "1.0.5"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: 0.9.5
167
+ - !ruby/object:Gem::Dependency
168
+ name: rollbar
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 3.3.1
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 3.3.1
167
181
  description: Ree Lib provides set of packages to extend Ruby Standard Library
168
182
  email:
169
183
  - ruslan.gatiyatov@gmail.com
@@ -869,6 +883,7 @@ files:
869
883
  - lib/ree_lib/packages/ree_logger/package/ree_logger.rb
870
884
  - lib/ree_lib/packages/ree_logger/package/ree_logger/appenders/appender.rb
871
885
  - lib/ree_lib/packages/ree_logger/package/ree_logger/appenders/file_appender.rb
886
+ - lib/ree_lib/packages/ree_logger/package/ree_logger/appenders/rollbar_appender.rb
872
887
  - lib/ree_lib/packages/ree_logger/package/ree_logger/appenders/stdout_appender.rb
873
888
  - lib/ree_lib/packages/ree_logger/package/ree_logger/beans/logger.rb
874
889
  - lib/ree_lib/packages/ree_logger/package/ree_logger/config.rb
@@ -887,6 +902,7 @@ files:
887
902
  - lib/ree_lib/packages/ree_logger/spec/package_schema_spec.rb
888
903
  - lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/appender_spec.rb
889
904
  - lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/file_appender_spec.rb
905
+ - lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/rollbar_appender_spec.rb
890
906
  - lib/ree_lib/packages/ree_logger/spec/ree_logger/appenders/stdout_appender_spec.rb
891
907
  - lib/ree_lib/packages/ree_logger/spec/ree_logger/beans/logger_spec.rb
892
908
  - lib/ree_lib/packages/ree_logger/spec/ree_logger/formatters/colorized_formatter_spec.rb