uu 0.1.3 → 0.2.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
  SHA256:
3
- metadata.gz: f7023bef5e1ac4552b55961c4c06ee1208176f6c98ecf229272a7838d1fb44b3
4
- data.tar.gz: 3a87f44e5294518151735954eb095028d564ae039709e13d3b77d964d0f46506
3
+ metadata.gz: 73d99f426e2be9be3bdf189a6462aca5c00d0465eb44c721679024d3e7e722f7
4
+ data.tar.gz: f9213a72553bcc9e27e97e0e5e7816d0c3fc0581626b4db5be4ffa5989a7d6b1
5
5
  SHA512:
6
- metadata.gz: 587ab7cbf357afeb0f4f2d0005207f08e24623f323d6635899b74c91ed6262877d3b7d25f84858d709344f40b4acaac0307a727c14a27d582dc617f342483ce3
7
- data.tar.gz: c80f5308e135f0a3e7b0a7ee161afc39423d91ab0992bfa21032c860edf175a104b4778bdf7cbb746a29bb59939a378440052d7a72ad2c77887679152689380c
6
+ metadata.gz: 4528a5cf71ccd0d87b4e6aa2e50b58f41cf297ab94dd801c10ac101b91d5f843fa095d40dcecc0bc8f927c759f40ca932f174da6cdd6d6bf366825624836405c
7
+ data.tar.gz: 014d2f831489df7e18fe726f58bc680976f78cac8dfc4c55bab1d652bc24ec0c577ad5b324c7a7794810b395d64b9a8403f5ef8c9cb299c3c4a7b3a29131ff03
data/.env.example ADDED
@@ -0,0 +1 @@
1
+ FLUENTD_HOST=
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /spec/examples.txt
10
+ /.byebug_history
11
+ /.env
data/.rubocop.local.yml CHANGED
@@ -0,0 +1,2 @@
1
+ Style/TrailingCommaInArguments:
2
+ Enabled: false
data/Gemfile.lock CHANGED
@@ -1,17 +1,24 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- uu (0.1.3)
4
+ uu (0.2.0)
5
+ colorize
6
+ fluent-logger
5
7
 
6
8
  GEM
7
9
  remote: https://rubygems.org/
8
10
  specs:
9
11
  ast (2.4.0)
12
+ byebug (10.0.2)
10
13
  coderay (1.1.2)
14
+ colorize (0.8.1)
11
15
  diff-lcs (1.3)
12
- ffi (1.9.25)
16
+ dotenv (2.6.0)
17
+ ffi (1.10.0)
18
+ fluent-logger (0.7.2)
19
+ msgpack (>= 1.0.0, < 2)
13
20
  formatador (0.2.5)
14
- guard (2.14.2)
21
+ guard (2.15.0)
15
22
  formatador (>= 0.2.4)
16
23
  listen (>= 2.7, < 4.0)
17
24
  lumberjack (>= 1.0.12, < 2.0)
@@ -20,8 +27,8 @@ GEM
20
27
  pry (>= 0.9.12)
21
28
  shellany (~> 0.0)
22
29
  thor (>= 0.18.1)
23
- guard-bundler (2.1.0)
24
- bundler (~> 1.0)
30
+ guard-bundler (2.2.0)
31
+ bundler (>= 1.3.0)
25
32
  guard (~> 2.2)
26
33
  guard-compat (~> 1.1)
27
34
  guard-compat (1.2.1)
@@ -35,7 +42,7 @@ GEM
35
42
  guard-yard (2.2.1)
36
43
  guard (>= 1.1.0)
37
44
  yard (>= 0.7.0)
38
- jaro_winkler (1.5.1)
45
+ jaro_winkler (1.5.2)
39
46
  listen (3.1.5)
40
47
  rb-fsevent (~> 0.9, >= 0.9.4)
41
48
  rb-inotify (~> 0.9, >= 0.9.7)
@@ -43,30 +50,31 @@ GEM
43
50
  lumberjack (1.0.13)
44
51
  mbs (0.0.3)
45
52
  thor
46
- method_source (0.9.0)
53
+ method_source (0.9.2)
54
+ msgpack (1.2.6)
47
55
  nenv (0.3.0)
48
56
  notiffany (0.1.1)
49
57
  nenv (~> 0.1)
50
58
  shellany (~> 0.0)
51
59
  parallel (1.12.1)
52
- parser (2.5.1.2)
60
+ parser (2.5.3.0)
53
61
  ast (~> 2.4.0)
54
62
  powerpack (0.1.2)
55
- pry (0.11.3)
63
+ pry (0.12.2)
56
64
  coderay (~> 1.1.0)
57
65
  method_source (~> 0.9.0)
58
66
  rainbow (3.0.0)
59
- rake (10.5.0)
67
+ rake (12.3.2)
60
68
  rb-fsevent (0.10.3)
61
- rb-inotify (0.9.10)
62
- ffi (>= 0.5.0, < 2)
69
+ rb-inotify (0.10.0)
70
+ ffi (~> 1.0)
63
71
  rspec (3.8.0)
64
72
  rspec-core (~> 3.8.0)
65
73
  rspec-expectations (~> 3.8.0)
66
74
  rspec-mocks (~> 3.8.0)
67
75
  rspec-core (3.8.0)
68
76
  rspec-support (~> 3.8.0)
69
- rspec-expectations (3.8.1)
77
+ rspec-expectations (3.8.2)
70
78
  diff-lcs (>= 1.2.0, < 2.0)
71
79
  rspec-support (~> 3.8.0)
72
80
  rspec-its (1.2.0)
@@ -76,26 +84,28 @@ GEM
76
84
  diff-lcs (>= 1.2.0, < 2.0)
77
85
  rspec-support (~> 3.8.0)
78
86
  rspec-support (3.8.0)
79
- rubocop (0.58.2)
87
+ rubocop (0.62.0)
80
88
  jaro_winkler (~> 1.5.1)
81
89
  parallel (~> 1.10)
82
90
  parser (>= 2.5, != 2.5.1.1)
83
91
  powerpack (~> 0.1)
84
92
  rainbow (>= 2.2.2, < 4.0)
85
93
  ruby-progressbar (~> 1.7)
86
- unicode-display_width (~> 1.0, >= 1.0.1)
94
+ unicode-display_width (~> 1.4.0)
87
95
  ruby-progressbar (1.10.0)
88
96
  ruby_dep (1.5.0)
89
97
  shellany (0.0.1)
90
- thor (0.20.0)
91
- unicode-display_width (1.4.0)
92
- yard (0.9.15)
98
+ thor (0.20.3)
99
+ unicode-display_width (1.4.1)
100
+ yard (0.9.16)
93
101
 
94
102
  PLATFORMS
95
103
  ruby
96
104
 
97
105
  DEPENDENCIES
98
106
  bundler
107
+ byebug
108
+ dotenv
99
109
  guard
100
110
  guard-bundler
101
111
  guard-rspec
@@ -110,4 +120,4 @@ DEPENDENCIES
110
120
  yard
111
121
 
112
122
  BUNDLED WITH
113
- 1.16.3
123
+ 1.17.2
@@ -36,6 +36,7 @@ module UU
36
36
  @mutex.synchronize do
37
37
  @count -= 1
38
38
  break unless @count <= 0
39
+
39
40
  GC.enable
40
41
  end
41
42
  end
data/lib/uu/log.rb ADDED
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module UU
4
+ class Log
5
+ include LogContext
6
+ include Loggable
7
+
8
+ def self.instance
9
+ Thread.current[:logger] ||= new
10
+ end
11
+
12
+ def initialize
13
+ @loggers = {
14
+ stderr: LoggerStderr.new(self),
15
+ fluent: LoggerFluent.new(self),
16
+ }
17
+ end
18
+
19
+ attr_accessor :loggers
20
+
21
+ %i[debug info warn error fatal].each do |severity|
22
+ define_method(severity) do |*args, &block|
23
+ @loggers.each_value.map do |logger|
24
+ logger.send(severity, *args, &block)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ module UU
6
+ module LogContext
7
+ attr_writer :context
8
+
9
+ def context
10
+ @context ||= {}
11
+ end
12
+
13
+ def with(context_)
14
+ original_context = context
15
+ self.context = context.merge(context_)
16
+ yield
17
+ ensure
18
+ self.context = original_context
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+
5
+ module UU
6
+ module Loggable
7
+ def self.included(mod)
8
+ mod.extend self
9
+ end
10
+
11
+ extend Forwardable
12
+
13
+ def_delegators \
14
+ :'::UU::Log.instance', \
15
+ :debug, :info, :warn, :error, :fatal, :with
16
+ end
17
+ end
@@ -0,0 +1,92 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fluent-logger'
4
+
5
+ module UU
6
+ class LoggerFluent
7
+ class Formatter
8
+ def initialize(context, tag)
9
+ @context = context
10
+ @tag = tag
11
+ end
12
+
13
+ attr_reader :context
14
+
15
+ def call(severity, msg)
16
+ [@tag, {
17
+ log_level: severity,
18
+ **metadata,
19
+ message: msg,
20
+ **@context.context,
21
+ }]
22
+ end
23
+
24
+ def metadata
25
+ location = find_location
26
+ {
27
+ filename: File.basename(location.path),
28
+ method: location.label,
29
+ lineno: location.lineno,
30
+ }
31
+ end
32
+
33
+ PATHS = %w[
34
+ /log.rb
35
+ /logger.rb
36
+ /loggable.rb
37
+ /forwardable.rb
38
+ ].freeze
39
+
40
+ def find_location
41
+ caller_locations.find do |location_|
42
+ location_.path != __FILE__ &&
43
+ PATHS.none? { |path| location_.path.end_with?(path) }
44
+ end
45
+ end
46
+ end
47
+
48
+ class Nil
49
+ def post(*); end
50
+ end
51
+
52
+ NIL = Nil.new
53
+
54
+ @cached_logger = Hash.new do |hash, key|
55
+ hash[key] =
56
+ Fluent::Logger::FluentLogger.new(
57
+ nil,
58
+ nanosecond_precision: true,
59
+ **key,
60
+ )
61
+ end
62
+
63
+ class << self
64
+ attr_reader :cached_logger
65
+ end
66
+
67
+ def initialize(cxt, host: ENV['FLUENTD_HOST'], port: ENV['FLUENTD_PORT'])
68
+ @logger =
69
+ if host
70
+ self.class.cached_logger[
71
+ { host: host, **(port ? { port: port.to_i } : {}) }
72
+ ]
73
+ else
74
+ NIL
75
+ end
76
+ @formatter = Formatter.new(cxt, 'tag')
77
+ end
78
+
79
+ attr_reader :logger
80
+ attr_accessor :formatter
81
+
82
+ def format_message(severity, message)
83
+ @formatter.call(severity, message)
84
+ end
85
+
86
+ %i[debug info warn error fatal].each do |severity|
87
+ define_method(severity) do |&block|
88
+ @logger.post(*format_message(severity, block.call))
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+ require 'colorize'
5
+ require 'json'
6
+
7
+ module UU
8
+ class LoggerStderr < Logger
9
+ class Formatter
10
+ DECORATION = {
11
+ 'UNKNOWN' => { color: :red, mode: :underline },
12
+ 'FATAL' => { color: :red, mode: :underline },
13
+ 'ERROR' => :red,
14
+ 'WARN' => :yellow,
15
+ 'INFO' => :default,
16
+ 'DEBUG' => :light_black,
17
+ }.freeze
18
+
19
+ def initialize(context)
20
+ @context = context
21
+ end
22
+
23
+ attr_reader :context
24
+
25
+ def call(severity, time, _progname, msg)
26
+ loc = meaningful_location
27
+ short_severity = severity[0, 1]
28
+ time_format = time.utc.strftime('%T')
29
+ context = @context.context
30
+ context_msg = context.empty? ? '' : "#{context.to_json} "
31
+
32
+ "#{short_severity}]#{time_format}" \
33
+ "[#{loc[:filename]}##{loc[:method]}:#{loc[:lineno]}] " \
34
+ "#{context_msg}" \
35
+ "#{msg}\n".colorize(DECORATION[severity])
36
+ end
37
+
38
+ def meaningful_location
39
+ location = find_location
40
+ {
41
+ filename: File.basename(location.path),
42
+ method: location.label,
43
+ lineno: location.lineno,
44
+ }
45
+ end
46
+
47
+ PATHS = %w[
48
+ /log.rb
49
+ /logger.rb
50
+ /loggable.rb
51
+ /forwardable.rb
52
+ ].freeze
53
+
54
+ def find_location
55
+ caller_locations.find do |location_|
56
+ location_.path != __FILE__ &&
57
+ PATHS.none? { |path| location_.path.end_with?(path) }
58
+ end
59
+ end
60
+ end
61
+
62
+ def initialize(context)
63
+ super($stderr, formatter: Formatter.new(context))
64
+ end
65
+ end
66
+ end
data/lib/uu/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UU
4
- VERSION = '0.1.3'
4
+ VERSION = '0.2.0'
5
5
  end
data/lib/uu.rb CHANGED
@@ -6,4 +6,9 @@ module UU
6
6
  autoload :Remotable, 'uu/remotable'
7
7
  autoload :RemoteServer, 'uu/remote_server'
8
8
  autoload :Remote, 'uu/remote'
9
+ autoload :LoggerStderr, 'uu/logger_stderr'
10
+ autoload :LoggerFluent, 'uu/logger_fluent'
11
+ autoload :LogContext, 'uu/log_context'
12
+ autoload :Loggable, 'uu/loggable'
13
+ autoload :Log, 'uu/log'
9
14
  end
data/uu.gemspec CHANGED
@@ -24,7 +24,11 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
24
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
25
  spec.require_paths = ['lib']
26
26
 
27
+ spec.add_dependency 'colorize'
28
+ spec.add_dependency 'fluent-logger'
27
29
  spec.add_development_dependency 'bundler'
30
+ spec.add_development_dependency 'byebug'
31
+ spec.add_development_dependency 'dotenv'
28
32
  spec.add_development_dependency 'guard'
29
33
  spec.add_development_dependency 'guard-bundler'
30
34
  spec.add_development_dependency 'guard-rspec'
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Minwoo Lee
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-18 00:00:00.000000000 Z
11
+ date: 2019-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colorize
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: fluent-logger
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +52,34 @@ dependencies:
24
52
  - - ">="
25
53
  - !ruby/object:Gem::Version
26
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: dotenv
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
27
83
  - !ruby/object:Gem::Dependency
28
84
  name: guard
29
85
  requirement: !ruby/object:Gem::Requirement
@@ -185,6 +241,7 @@ executables: []
185
241
  extensions: []
186
242
  extra_rdoc_files: []
187
243
  files:
244
+ - ".env.example"
188
245
  - ".gitignore"
189
246
  - ".rspec"
190
247
  - ".rubocop.local.yml"
@@ -201,6 +258,11 @@ files:
201
258
  - lib/drb/http0helper.rb
202
259
  - lib/drb/http0serv.rb
203
260
  - lib/uu.rb
261
+ - lib/uu/log.rb
262
+ - lib/uu/log_context.rb
263
+ - lib/uu/loggable.rb
264
+ - lib/uu/logger_fluent.rb
265
+ - lib/uu/logger_stderr.rb
204
266
  - lib/uu/remotable.rb
205
267
  - lib/uu/remote.rb
206
268
  - lib/uu/remote_server.rb
@@ -225,8 +287,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
287
  - !ruby/object:Gem::Version
226
288
  version: '0'
227
289
  requirements: []
228
- rubyforge_project:
229
- rubygems_version: 2.7.3
290
+ rubygems_version: 3.0.1
230
291
  signing_key:
231
292
  specification_version: 4
232
293
  summary: UU