testa_logger 0.1.4 → 0.1.7

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
  SHA256:
3
- metadata.gz: 80fa24df1415f3b2f87fb943bfe01ab6d027e4636e54532468b7b732b027a9d5
4
- data.tar.gz: d13869b75f2b44dcbdf9bc8a7bb530a895e0e1b1883d626ccb3844ce31d1913b
3
+ metadata.gz: acf6ac7667563d1af6b7bdc0d5885e1fea8b59edf412aff54a8b1c09d3c94406
4
+ data.tar.gz: 7030e30e7323f680e1d8ed180c24b485da28ee6fa4560c540df3ddbb14739bb7
5
5
  SHA512:
6
- metadata.gz: '058bfb47171b98163822fd85b9ecdb1f64a1bac525c8fe579d2d3bd9979d2935bda018054d8d5991964c28824f7acc1fe48b92141446d952be4f745d17dd97ff'
7
- data.tar.gz: 92795725d8008739aee95d2c887d499443c871af7bc6742951e830e397b5a051bae25c0c29cc7a59265ff24e72289bf0665328b9ea7611bebc5926104bfb546a
6
+ metadata.gz: e339844c732ce9f23d20430907fd52c06fa380e83409b0813b5feb6e408af1f6fae5e501b71a99fbde6cb9bea5feafa424afc77e2e7194fa395f52cae36c22ac
7
+ data.tar.gz: 33d2d5db96d7e6774078b3fa537ba9b1e95d312f3bc6ed6fe7b0dddfe785290d27bac95320e380365b8227edbb2e503b97bf347cce00915ccc4866a8ffeccb59
data/Gemfile.lock CHANGED
@@ -1,13 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- testa_logger (0.1.4)
4
+ testa_logger (0.1.7)
5
5
  activesupport
6
6
  awesome_print
7
7
  aws-sdk-s3
8
8
  concurrent-ruby
9
9
  json
10
- ostruct
11
10
  securerandom
12
11
 
13
12
  GEM
@@ -43,7 +42,6 @@ GEM
43
42
  jmespath (1.6.1)
44
43
  json (2.6.2)
45
44
  minitest (5.16.2)
46
- ostruct (0.5.5)
47
45
  parallel (1.22.1)
48
46
  parser (3.1.2.1)
49
47
  ast (~> 2.4.1)
@@ -0,0 +1,78 @@
1
+ module TestaLogger
2
+ class Logger
3
+ class Options
4
+
5
+ # @return [String,Integer]
6
+ attr_accessor :shift_age
7
+
8
+ # @return [Integer]
9
+ attr_accessor :level, :tag_length
10
+
11
+ # @return [Proc]
12
+ attr_accessor :default_formatter
13
+
14
+ # @return [TrueClass, FalseClass]
15
+ attr_accessor :live, :persist
16
+
17
+ # @return [String, nil]
18
+ attr_accessor :filepath
19
+
20
+ # @return [String]
21
+ attr_accessor :faye_url, :faye_token
22
+
23
+ # @return [Hash]
24
+ attr_accessor :s3_credentials
25
+
26
+ def initialize(app, group, subgroup, options)
27
+ app_and_groups = format_app_and_groups(app, group, subgroup)
28
+ @shift_age = "daily"
29
+ @level = DEBUG
30
+ @default_formatter = proc do |severity, datetime, _, msg|
31
+ "#{app_and_groups}[#{datetime.strftime('%Y-%m-%d %H:%M:%S.%L')}] #{format('%-5.5s', severity)} -- : #{msg}\n"
32
+ end
33
+ @live = false
34
+ @filepath = nil
35
+ @tag_length = 13
36
+ @persist = true # requires aws credentials set in env variables
37
+ @faye_url = ENV["WEB_SOCKET_URL"]
38
+ @faye_token = ENV["FAYE_TOKEN"]
39
+ @s3_credentials = {
40
+ region: ENV["AWS_REGION"],
41
+ access_key_id: ENV["AWS_ACCESS_KEY_ID"],
42
+ secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
43
+ bucket_name: ENV["S3_BUCKET_NAME"],
44
+ }
45
+
46
+ handle_user_options(options)
47
+ end
48
+
49
+ def format_app_and_groups(app, group, subgroup)
50
+ string = "[ #{app} | #{group} "
51
+ if subgroup.nil?
52
+ string += "]"
53
+ else
54
+ string += "| #{subgroup} ]"
55
+ end
56
+ string
57
+ end
58
+
59
+ def handle_user_options(options)
60
+ options.deep_symbolize_keys!
61
+ @shift_age = options[:shift_age] unless options[:shift_age].nil?
62
+ unless options[:level].nil?
63
+ options[:level] = SEV_LABEL.index(options[:level].to_s.upcase).to_i unless options[:level].is_a?(Integer)
64
+ @level = options[:level]
65
+ end
66
+ @formatter = options[:formatter] unless options[:formatter].nil?
67
+ @live = options[:live] unless options[:live].nil?
68
+ @filepath = File.expand_path(options[:filepath]) unless options[:filepath].nil?
69
+ @tag_length = options[:tag_length] unless options[:tag_length].nil?
70
+ @persist = options[:persist] unless options[:persist].nil?
71
+ @faye_url = options[:faye_url] unless options[:faye_url].nil?
72
+ @faye_token = options[:faye_token] unless options[:faye_token].nil?
73
+ @s3_credentials = options[:s3_credentials].deep_symbolize_keys if options[:s3_credentials].present?
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -1,15 +1,13 @@
1
1
  module TestaLogger
2
2
  class Logger
3
3
  module Persistence
4
- def self.extended(base)
5
- require "aws-sdk-s3"
6
- base.init_s3_client
7
- end
8
-
9
4
  def init_s3_client
5
+ require "aws-sdk-s3"
10
6
  Aws.config.update(
11
- region: options.s3_creds[:region],
12
- credentials: Aws::Credentials.new(options.s3_creds[:access_key_id], options.s3_creds[:secret_access_key])
7
+ region: options.s3_credentials[:region],
8
+ credentials: Aws::Credentials.new(
9
+ options.s3_credentials[:access_key_id],
10
+ options.s3_credentials[:secret_access_key])
13
11
  )
14
12
  @s3 = Aws::S3::Client.new
15
13
  at_exit { persist rescue false }
@@ -47,7 +45,7 @@ module TestaLogger
47
45
 
48
46
  # stop writing into log file with it is being attached, otherwise checksum integrity will fail.
49
47
  response = @s3.put_object(
50
- bucket: options.s3_creds[:bucket_name],
48
+ bucket: options.s3_credentials[:bucket_name],
51
49
  key: key,
52
50
  body: IO.read(options.filepath)
53
51
  )
@@ -1,14 +1,18 @@
1
1
  require_relative "logger/persistence"
2
2
  require_relative "logger/dispatcher"
3
+ require_relative "logger/options"
3
4
 
4
5
  module TestaLogger
6
+ # noinspection RubyTooManyMethodsInspection
5
7
  class Logger
8
+ include Persistence
9
+
6
10
  TAG = "TestaLogger"
7
11
 
8
12
  # @return [String]
9
13
  attr_accessor :app, :group, :subgroup
10
14
 
11
- # @return [OpenStruct]
15
+ # @return [Options]
12
16
  attr_accessor :options
13
17
 
14
18
  # @return [Thread]
@@ -27,33 +31,17 @@ module TestaLogger
27
31
  # An unknown message that should always be logged.
28
32
  UNKNOWN = 5
29
33
 
34
+ NO_TAG = "NO-TAG"
35
+
30
36
  def initialize(app, group, subgroup = nil, options = {})
31
37
  @app = app
32
38
  @group = group
33
39
  @subgroup = subgroup
34
- handle_options(options)
40
+ @options = Options.new(app, group, subgroup, options)
35
41
  create_log_file
36
42
  setup_dispatcher
37
43
  start_write_thread
38
- self.extend Persistence if @options.persist
39
- end
40
-
41
- def handle_options(options)
42
- options.deep_symbolize_keys!
43
- @options = Logger.default_options
44
- @options.shift_age = options[:shift_age] unless options[:shift_age].nil?
45
- unless options[:level].nil?
46
- options[:level] = SEV_LABEL.index(options[:level].to_s.upcase).to_i unless options[:level].is_a?(Integer)
47
- @options.level = options[:level]
48
- end
49
- @options.formatter = options[:formatter] unless options[:formatter].nil?
50
- @options.live = options[:live] unless options[:live].nil?
51
- @options.filepath = File.expand_path(options[:filepath]) unless options[:filepath].nil?
52
- @options.tag_length = options[:tag_length] unless options[:tag_length].nil?
53
- @options.persist = options[:persist] unless options[:persist].nil?
54
- @options.faye_url = options[:faye_url] unless options[:faye_url].nil?
55
- @options.faye_token = options[:faye_token] unless options[:faye_token].nil?
56
- @options.s3_creds = options[:s3_creds].deep_symbolize_keys unless options[:s3_creds].blank?
44
+ init_s3_client if @options.persist
57
45
  end
58
46
 
59
47
  def create_log_file
@@ -90,33 +78,33 @@ module TestaLogger
90
78
  end
91
79
  end
92
80
 
93
- def debug(tag, *args, &block)
81
+ def debug(tag = NO_TAG, *args, &block)
94
82
  add_log_to_queue(DEBUG, tag, args, &block)
95
83
  end
96
84
 
97
- def info(tag, *args, &block)
85
+ def info(tag = NO_TAG, *args, &block)
98
86
  add_log_to_queue(INFO, tag, args, &block)
99
87
  end
100
88
 
101
- def warn(tag, *args, &block)
89
+ def warn(tag = NO_TAG, *args, &block)
102
90
  add_log_to_queue(WARN, tag, args, &block)
103
91
  end
104
92
 
105
- def error(tag, *args, &block)
93
+ def error(tag = NO_TAG, *args, &block)
106
94
  add_log_to_queue(ERROR, tag, args, &block)
107
95
  end
108
96
 
109
- def fatal(tag, *args, &block)
97
+ def fatal(tag = NO_TAG, *args, &block)
110
98
  add_log_to_queue(FATAL, tag, args, &block)
111
99
  end
112
100
 
113
- def unknown(tag, *args, &block)
101
+ def unknown(tag = NO_TAG, *args, &block)
114
102
  add_log_to_queue(UNKNOWN, tag, args, &block)
115
103
  end
116
104
 
117
105
  def level=(severity)
118
106
  if severity.is_a?(Integer)
119
- @level = severity
107
+ options.level = severity
120
108
  else
121
109
  SEV_LABEL.index(severity.to_s.downcase.upcase).to_i
122
110
  end
@@ -181,6 +169,14 @@ module TestaLogger
181
169
  options.level
182
170
  end
183
171
 
172
+ def silence(severity = ERROR, &block)
173
+ old_level = options.level
174
+ options.level = severity
175
+ result = block&.call
176
+ options.level = old_level
177
+ result
178
+ end
179
+
184
180
  class << self
185
181
  def default_options
186
182
  OpenStruct.new(
@@ -201,12 +197,6 @@ module TestaLogger
201
197
  }
202
198
  )
203
199
  end
204
-
205
- def default_formatter
206
- proc do |severity, datetime, _, msg|
207
- "[#{datetime.strftime('%Y-%m-%d %H:%M:%S.%L')}] #{format('%-5.5s', severity)} -- : #{msg}\n"
208
- end
209
- end
210
200
  end
211
201
 
212
202
  private
@@ -215,6 +205,7 @@ module TestaLogger
215
205
  return if level < options.level
216
206
 
217
207
  time = Time.now
208
+ tag = extract_tag(tag, args)
218
209
  text = create_log_string(tag, args, &block)
219
210
  formatted_severity = format_severity(level)
220
211
  formatted_text = format_message(formatted_severity, time, "", text)
@@ -223,16 +214,21 @@ module TestaLogger
223
214
  @dispatcher.push(level, time, tag, formatted_text) if options.live
224
215
  end
225
216
 
226
- def create_log_string(tag, args, &block)
217
+ # rails and other applications do not use tags,
218
+ # therefore, if only 1 argument is provided, that means that the message is in the tag variable
219
+ # then args array is empty.
220
+ def extract_tag(tag, args)
227
221
  if args.count.zero?
228
- if block.nil?
229
- "[NO-TAG]: #{tag}"
230
- else
231
- "[#{padded_tag(tag)}]: #{args_to_string(block.call)}"
232
- end
233
- else
234
- "[#{padded_tag(tag)}]: #{args_to_string(args)}"
222
+ # if no additional arguments is given, message is in tag variable
223
+ tag = NO_TAG
224
+ args.unshift(tag)
235
225
  end
226
+ tag
227
+ end
228
+
229
+ def create_log_string(tag, args, &block)
230
+ args.push(block.call) if block
231
+ "[#{padded_tag(tag)}]: #{args_to_string(args.compact)}"
236
232
  end
237
233
 
238
234
  def padded_tag(tag)
@@ -245,7 +241,7 @@ module TestaLogger
245
241
  if arg.instance_of?(String)
246
242
  arg
247
243
  else
248
- arg.ai(limit: 1000, plain: true)
244
+ arg.ai(limit: 1000, plain: false)
249
245
  end
250
246
  end.join("\n")
251
247
  end
@@ -1,3 +1,3 @@
1
1
  module TestaLogger
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.7"
3
3
  end
data/lib/testa_logger.rb CHANGED
@@ -4,7 +4,6 @@ require_relative "testa_logger/logger"
4
4
  require_relative "testa_logger/io_persistence_error"
5
5
  require "active_support"
6
6
  require "active_support/core_ext/hash"
7
- require "ostruct"
8
7
  require "awesome_print"
9
8
  require "concurrent-ruby"
10
9
  require "json"
data/logger.iml CHANGED
@@ -22,7 +22,6 @@
22
22
  <orderEntry type="library" scope="PROVIDED" name="jmespath (v1.6.1, RVM: ruby-2.7.6) [gem]" level="application" />
23
23
  <orderEntry type="library" scope="PROVIDED" name="json (v2.6.2, RVM: ruby-2.7.6) [gem]" level="application" />
24
24
  <orderEntry type="library" scope="PROVIDED" name="minitest (v5.16.2, RVM: ruby-2.7.6) [gem]" level="application" />
25
- <orderEntry type="library" scope="PROVIDED" name="ostruct (v0.5.5, RVM: ruby-2.7.6) [gem]" level="application" />
26
25
  <orderEntry type="library" scope="PROVIDED" name="parallel (v1.22.1, RVM: ruby-2.7.6) [gem]" level="application" />
27
26
  <orderEntry type="library" scope="PROVIDED" name="parser (v3.1.2.1, RVM: ruby-2.7.6) [gem]" level="application" />
28
27
  <orderEntry type="library" scope="PROVIDED" name="rack (v2.2.4, RVM: ruby-2.7.6) [gem]" level="application" />
@@ -43,21 +42,21 @@
43
42
  <option name="myRootTask">
44
43
  <RakeTaskImpl id="rake">
45
44
  <subtasks>
46
- <RakeTaskImpl description="Build testa_logger-0.1.1.gem into the pkg directory" fullCommand="build" id="build" />
45
+ <RakeTaskImpl description="Build testa_logger-0.1.6.gem into the pkg directory" fullCommand="build" id="build" />
47
46
  <RakeTaskImpl id="build">
48
47
  <subtasks>
49
- <RakeTaskImpl description="Generate SHA512 checksum if testa_logger-0.1.1.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
48
+ <RakeTaskImpl description="Generate SHA512 checksum if testa_logger-0.1.6.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
50
49
  </subtasks>
51
50
  </RakeTaskImpl>
52
51
  <RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
53
52
  <RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
54
- <RakeTaskImpl description="Build and install testa_logger-0.1.1.gem into system gems" fullCommand="install" id="install" />
53
+ <RakeTaskImpl description="Build and install testa_logger-0.1.6.gem into system gems" fullCommand="install" id="install" />
55
54
  <RakeTaskImpl id="install">
56
55
  <subtasks>
57
- <RakeTaskImpl description="Build and install testa_logger-0.1.1.gem into system gems without network access" fullCommand="install:local" id="local" />
56
+ <RakeTaskImpl description="Build and install testa_logger-0.1.6.gem into system gems without network access" fullCommand="install:local" id="local" />
58
57
  </subtasks>
59
58
  </RakeTaskImpl>
60
- <RakeTaskImpl description="Create tag v0.1.1 and build and push testa_logger-0.1.1.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
59
+ <RakeTaskImpl description="Create tag v0.1.6 and build and push testa_logger-0.1.6.gem to rubygems.org" fullCommand="release[remote]" id="release[remote]" />
61
60
  <RakeTaskImpl description="Run tests" fullCommand="test" id="test" />
62
61
  <RakeTaskImpl description="" fullCommand="default" id="default" />
63
62
  <RakeTaskImpl description="" fullCommand="release" id="release" />
data/testa_logger.gemspec CHANGED
@@ -23,7 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_runtime_dependency "aws-sdk-s3"
24
24
  spec.add_runtime_dependency "concurrent-ruby"
25
25
  spec.add_runtime_dependency "json"
26
- spec.add_runtime_dependency "ostruct"
27
26
  spec.add_runtime_dependency "securerandom"
28
27
 
29
28
  # Specify which files should be added to the gem when it is released.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: testa_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - karlo.razumovic
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: ostruct
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: securerandom
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -132,6 +118,7 @@ files:
132
118
  - lib/testa_logger/log_device/period.rb
133
119
  - lib/testa_logger/logger.rb
134
120
  - lib/testa_logger/logger/dispatcher.rb
121
+ - lib/testa_logger/logger/options.rb
135
122
  - lib/testa_logger/logger/persistence.rb
136
123
  - lib/testa_logger/version.rb
137
124
  - logger.iml