evt-telemetry-logger 0.5.1.2

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4fa78e17af434e16e3d6cb9cec295a3f6c613a45
4
+ data.tar.gz: 2e07f132799a4a90311c9847b6f2a20fac4b7f6f
5
+ SHA512:
6
+ metadata.gz: b3827dc61365389e75c9079e5073e346f757d15532293970ddf69fbf0dfe95a609049ebdbd34355a427197027b0aae773c3fc2c0a864026023ddef07cd93e547
7
+ data.tar.gz: 81b83031ec93965b4c7d136ca74a6d5951ae50ac02672fbac7b8f0a304a40c1dfb46ed29c2e114cacf0fc536895d83f363f27b3ac9130cbada4349e61e5124b2
@@ -0,0 +1,18 @@
1
+ class Telemetry
2
+ module Logger
3
+ module AdHoc
4
+ def self.activate(target_class=nil)
5
+ target_class ||= Object
6
+
7
+ return if target_class.is_a? self
8
+
9
+ target_class.send :include, self
10
+ end
11
+
12
+ def __logger(subject=nil)
13
+ subject ||= caller[0].split('/').last
14
+ Telemetry::Logger.build subject
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,75 @@
1
+ class Telemetry
2
+ module Logger
3
+ module Color
4
+ extend self
5
+
6
+ def apply(level, message)
7
+ if respond_to? level
8
+ send level, message
9
+ else
10
+ message
11
+ end
12
+ end
13
+
14
+ def metadata(text)
15
+ Rainbow(text).yellow
16
+ end
17
+
18
+ def todo(message)
19
+ Rainbow(message).bright.white.bg(:white)
20
+ end
21
+
22
+ def fubar(message)
23
+ Rainbow(message).red.bg(:yellow)
24
+ end
25
+
26
+ def obsolete(message)
27
+ Rainbow(message).bright.white
28
+ end
29
+
30
+ def opt_data(message)
31
+ data(message)
32
+ end
33
+
34
+ def data(message)
35
+ Rainbow(message).cyan
36
+ end
37
+
38
+ def opt_trace(message)
39
+ trace(message)
40
+ end
41
+
42
+ def trace(message)
43
+ Rainbow(message).white
44
+ end
45
+
46
+ def info(message)
47
+ Rainbow(message).green
48
+ end
49
+
50
+ def pass(message)
51
+ Rainbow(message).black.bg(:green)
52
+ end
53
+
54
+ def fail(message)
55
+ Rainbow(message).black.bg(:red)
56
+ end
57
+
58
+ def focus(message)
59
+ Rainbow(message).bright.white.bg(:blue)
60
+ end
61
+
62
+ def warn(message)
63
+ Rainbow(message).yellow.bg(:black)
64
+ end
65
+
66
+ def error(message)
67
+ Rainbow(message).red.bg(:black)
68
+ end
69
+
70
+ def fatal(message)
71
+ Rainbow(message).white.bg(:black)
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,115 @@
1
+ class Telemetry
2
+ module Logger
3
+ class ConsoleLogger
4
+ include Levels
5
+
6
+ attr_reader :name
7
+ attr_reader :device
8
+
9
+ attr_reader :level
10
+ attr_reader :level_number
11
+
12
+ dependency :clock, Clock::Local
13
+
14
+ def self.build(subject)
15
+ name = logger_name(subject)
16
+ device = Defaults.device
17
+ instance = new(name, device)
18
+ instance.level = Defaults.level
19
+ Clock::Local.configure instance
20
+ instance
21
+ end
22
+
23
+ def self.logger_name(subject)
24
+ if subject.is_a?(Class) || subject.is_a?(Module)
25
+ name = subject.name
26
+ elsif subject.is_a? String
27
+ name = subject
28
+ else
29
+ name = subject.class.name
30
+ end
31
+ name
32
+ end
33
+
34
+ def initialize(name, device)
35
+ @name = name
36
+ @device = device
37
+ end
38
+
39
+ def write(message)
40
+ return if Defaults.activation == 'off'
41
+ device.write "#{message}#{$INPUT_RECORD_SEPARATOR}"
42
+ end
43
+
44
+ def format(message, level)
45
+ return message if Defaults.color == 'off'
46
+ Telemetry::Logger::Color.apply(level, message)
47
+ end
48
+
49
+ def format_metadata(text)
50
+ return text if Defaults.color == 'off'
51
+ Telemetry::Logger::Color.metadata(text)
52
+ end
53
+
54
+ def level=(level)
55
+ index = ordinal(level)
56
+
57
+ raise "Unknown logger level: #{level}" unless index
58
+
59
+ @level_number = index
60
+ @level = level
61
+ end
62
+
63
+ module Defaults
64
+ def self.level
65
+ level = ENV['LOG_LEVEL']
66
+ return level.to_sym if level
67
+
68
+ :info
69
+ end
70
+
71
+ def self.device
72
+ setting = ENV['CONSOLE_DEVICE']
73
+ device = nil
74
+ if setting && !['stderr', 'stdout'].include?(setting)
75
+ raise "The CONSOLE_DEVICE should be either 'stderr' (default) or 'stdout'"
76
+ elsif setting
77
+ device = setting == 'stderr' ? STDERR : STDOUT
78
+ else
79
+ device = STDERR
80
+ end
81
+ device.sync = true
82
+ device
83
+ end
84
+
85
+ def self.activation
86
+ activation = ENV['LOGGER']
87
+ return activation if activation
88
+
89
+ 'on'
90
+ end
91
+
92
+ def self.color
93
+ color = ENV['LOG_COLOR']
94
+
95
+ # CONSOLE_COLOR is obsolete. It is here for backwards compatibility
96
+ if color.nil?
97
+ color = ENV['CONSOLE_COLOR']
98
+
99
+ unless color.nil?
100
+ puts '*** WARNING: The CONSOLE_COLOR environment variable is obsolete. Use LOG_COLOR instead. Support for CONSOLE_COLOR will be discontinued.'
101
+ end
102
+ end
103
+
104
+ return color if color
105
+
106
+ if device.tty?
107
+ 'on'
108
+ else
109
+ 'off'
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,15 @@
1
+ class Telemetry
2
+ module Logger
3
+ module Dependency
4
+ def self.included(cls)
5
+ cls.class_exec do
6
+ dependency :logger, Telemetry::Logger
7
+
8
+ def logger
9
+ @logger ||= Logger.configure self
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,141 @@
1
+ class Telemetry
2
+ module Logger
3
+ module Levels
4
+ def self.levels
5
+ [
6
+ :todo,
7
+ :fubar,
8
+ :obsolete,
9
+ :data,
10
+ :trace,
11
+ :debug,
12
+ :opt_data,
13
+ :opt_trace,
14
+ :opt_debug,
15
+ :info,
16
+ :pass,
17
+ :fail,
18
+ :focus,
19
+ :warn,
20
+ :error,
21
+ :fatal
22
+ ]
23
+ end
24
+
25
+ def self.included(cls)
26
+ levels.each do |level|
27
+ define_level level, cls
28
+ end
29
+ end
30
+
31
+ def self.define_level(level, cls)
32
+ cls.send :define_method, level do |message|
33
+ write_level(__method__, message)
34
+ end
35
+ end
36
+
37
+ def self.level_index
38
+ @level_index ||= build_level_index
39
+ end
40
+
41
+ def self.build_level_index
42
+ table = {}
43
+
44
+ levels.each_with_index do |level, index|
45
+ table[level] = index
46
+ end
47
+
48
+ table
49
+ end
50
+
51
+ def level_index
52
+ Levels.level_index
53
+ end
54
+
55
+ def ordinal(level)
56
+ if [:_min, :_max].include?(level)
57
+ if level == :_min
58
+ return level_index.values.last
59
+ else
60
+ return level_index.values.first
61
+ end
62
+ end
63
+
64
+ level_index[level]
65
+ end
66
+
67
+ def write_level(level, message)
68
+ level_ordinal = ordinal(level)
69
+ write_message(message, level) if sufficient_level?(level_ordinal) && !omit?(level)
70
+ end
71
+
72
+ def write_message(message, level)
73
+ message = message.to_s
74
+
75
+ if message.length == 0
76
+ message = '(empty log message)'
77
+ end
78
+
79
+ message.each_line do |line|
80
+ line = line.chomp("\n") unless line.end_with?("\r\n") || line == "\n"
81
+ line = line.gsub("\r", "\\r")
82
+ line = line.gsub("\n", "\\n")
83
+
84
+ message = implementer.format(line, level)
85
+ metadata = metadata(level)
86
+ header = implementer.format_metadata(metadata)
87
+
88
+ implementer.write "#{header}#{message}"
89
+ end
90
+ end
91
+
92
+ def metadata(level)
93
+ if Defaults.metadata == 'off'
94
+ return nil
95
+ elsif Defaults.metadata == 'minimal'
96
+ return "#{name.split('::').last}: "
97
+ else
98
+ level = String(level)
99
+
100
+ if level.start_with?('opt_')
101
+ level = "(#{level.split('_').last})"
102
+ end
103
+
104
+ return "[#{implementer.clock.iso8601}] #{name} #{level.upcase}: "
105
+ end
106
+ end
107
+
108
+ def sufficient_level?(level_ordinal)
109
+ level_ordinal >= level_number
110
+ end
111
+
112
+ def omit?(level)
113
+ Defaults.optional == 'off' && optional_level?(level)
114
+ end
115
+
116
+ def optional_level?(level)
117
+ String(level).start_with?('opt_')
118
+ end
119
+
120
+ def implementer
121
+ self
122
+ end
123
+
124
+ module Defaults
125
+ def self.metadata
126
+ metadata = ENV['LOG_METADATA']
127
+ return metadata if metadata
128
+
129
+ 'on'
130
+ end
131
+
132
+ def self.optional
133
+ optional = ENV['LOG_OPTIONAL']
134
+ return optional if optional
135
+
136
+ 'off'
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,47 @@
1
+ class Telemetry
2
+ module Logger
3
+ extend self
4
+
5
+ def build(subject, implementation=nil)
6
+ implementation ||= Defaults.implementation
7
+ logger = implementation.build(subject)
8
+ logger
9
+ end
10
+
11
+ def get(subject, implementation=nil)
12
+ build(subject, implementation)
13
+ end
14
+
15
+ def register(subject, implementation=nil)
16
+ logger = Logger.build self
17
+ logger.obsolete "The \"register\" method is obsolete (#{caller[0]}). It is replaced with the \"build\" method."
18
+
19
+ build(subject, implementation)
20
+ end
21
+
22
+ def configure(receiver, implementation=nil)
23
+ logger = build(receiver, implementation)
24
+ receiver.logger = logger
25
+ logger
26
+ end
27
+
28
+ def self.debug(message)
29
+ write message
30
+ end
31
+
32
+ def self.write(message, level=nil, subject=nil, implementation=nil)
33
+ level ||= :debug
34
+ subject ||= '***'
35
+
36
+ logger = build subject, implementation
37
+
38
+ logger.write_message message, level
39
+ end
40
+
41
+ module Defaults
42
+ def self.implementation
43
+ ConsoleLogger
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,18 @@
1
+ class Telemetry
2
+ module Logger
3
+ class NullLogger
4
+ include Levels
5
+ end
6
+
7
+ module NullObject
8
+ def self.build
9
+ cls = Naught.build do |config|
10
+ config.singleton
11
+ config.mimic NullLogger
12
+ end
13
+
14
+ cls.get
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ require 'English'
2
+
3
+ require 'rainbow'; Rainbow.enabled = true
4
+
5
+ require 'pathname'
6
+ require 'clock'
7
+ require 'dependency'; Dependency.activate
8
+
9
+ require 'telemetry/logger/logger'
10
+ require 'telemetry/logger/levels'
11
+ require 'telemetry/logger/color'
12
+ require 'telemetry/logger/null_object'
13
+ require 'telemetry/logger/console_logger'
14
+ require 'telemetry/logger/ad_hoc'
15
+ require 'telemetry/logger/dependency'
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evt-telemetry-logger
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1.2
5
+ platform: ruby
6
+ authors:
7
+ - The Eventide Project
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: evt-clock
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: evt-dependency
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'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rainbow
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ntl-test_bench
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
+ description: " "
70
+ email: opensource@eventide-project.org
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - lib/telemetry/logger.rb
76
+ - lib/telemetry/logger/ad_hoc.rb
77
+ - lib/telemetry/logger/color.rb
78
+ - lib/telemetry/logger/console_logger.rb
79
+ - lib/telemetry/logger/dependency.rb
80
+ - lib/telemetry/logger/levels.rb
81
+ - lib/telemetry/logger/logger.rb
82
+ - lib/telemetry/logger/null_object.rb
83
+ homepage: https://github.com/eventide-project/telemetry-logger
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 2.3.3
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.5.2
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Logging to STDERR with coloring and levels of severity
107
+ test_files: []