qb 0.3.24 → 0.3.25
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 +4 -4
- data/VERSION +1 -1
- data/exe/.qb_interop_receive +1 -1
- data/exe/qb +2 -2
- data/lib/qb/util.rb +0 -1
- data/qb.gemspec +1 -1
- metadata +6 -13
- data/lib/qb/util/logging.rb +0 -366
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e003d57b3df40cfe17e1d4200423a7dec88583cf
|
4
|
+
data.tar.gz: 96bedb7ba58a2f2278f18dde6ead2c34533d105c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0211a56f9a20f60664bf169120b771283735b4eb9c68b6a2c26886b9d880cf0548720c3a09150748a1e06ec56e87ea926c44845d35d7207fe774df105e4fd99
|
7
|
+
data.tar.gz: fc2fba112a5e43f3cdd41b7d8686d4a8e7d51070fd6a82838d6f4dae038594c6718a9f1bb63ecf3078bc82e2ef7959e96ecb1b494a5c6b6ed5afc6c78ae30e5f
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.25
|
data/exe/.qb_interop_receive
CHANGED
@@ -29,7 +29,7 @@ require 'qb'
|
|
29
29
|
if ENV['QB_STDIO_ERR']
|
30
30
|
$stderr = UNIXSocket.new ENV['QB_STDIO_ERR']
|
31
31
|
|
32
|
-
|
32
|
+
NRSER::Logging.setup_for_cli! application: 'qb'
|
33
33
|
|
34
34
|
QB.debug "Connected to QB stderr stream at #{ ENV['QB_STDIO_ERR'] } #{ $stderr.path }."
|
35
35
|
end
|
data/exe/qb
CHANGED
@@ -37,10 +37,10 @@ using NRSER
|
|
37
37
|
|
38
38
|
def main *args
|
39
39
|
Thread.current.name = 'main'
|
40
|
-
logger =
|
40
|
+
logger = NRSER::Logging['qb/exe/qb#main']
|
41
41
|
|
42
42
|
QB::CLI.set_debug! args
|
43
|
-
|
43
|
+
NRSER::Logging.setup_for_cli! application: 'qb'
|
44
44
|
|
45
45
|
logger.debug args: args
|
46
46
|
|
data/lib/qb/util.rb
CHANGED
data/qb.gemspec
CHANGED
@@ -195,7 +195,7 @@ Gem::Specification.new do |spec|
|
|
195
195
|
# ----------------------------------------------------------------------------
|
196
196
|
|
197
197
|
# My guns
|
198
|
-
spec.add_dependency "nrser", '
|
198
|
+
spec.add_dependency "nrser", '~> 0.2.0'
|
199
199
|
|
200
200
|
# My favorite wrapper
|
201
201
|
spec.add_dependency "cmds", '~> 0.2.10'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.25
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nrser
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -118,22 +118,16 @@ dependencies:
|
|
118
118
|
name: nrser
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
120
120
|
requirements:
|
121
|
-
- - "
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version: '0.3'
|
124
|
-
- - ">="
|
121
|
+
- - "~>"
|
125
122
|
- !ruby/object:Gem::Version
|
126
|
-
version: 0.2.0
|
123
|
+
version: 0.2.0
|
127
124
|
type: :runtime
|
128
125
|
prerelease: false
|
129
126
|
version_requirements: !ruby/object:Gem::Requirement
|
130
127
|
requirements:
|
131
|
-
- - "
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '0.3'
|
134
|
-
- - ">="
|
128
|
+
- - "~>"
|
135
129
|
- !ruby/object:Gem::Version
|
136
|
-
version: 0.2.0
|
130
|
+
version: 0.2.0
|
137
131
|
- !ruby/object:Gem::Dependency
|
138
132
|
name: cmds
|
139
133
|
requirement: !ruby/object:Gem::Requirement
|
@@ -309,7 +303,6 @@ files:
|
|
309
303
|
- lib/qb/util/bundler.rb
|
310
304
|
- lib/qb/util/docker_mixin.rb
|
311
305
|
- lib/qb/util/interop.rb
|
312
|
-
- lib/qb/util/logging.rb
|
313
306
|
- lib/qb/util/resource.rb
|
314
307
|
- lib/qb/util/stdio.rb
|
315
308
|
- lib/qb/version.rb
|
data/lib/qb/util/logging.rb
DELETED
@@ -1,366 +0,0 @@
|
|
1
|
-
# Requirements
|
2
|
-
# =======================================================================
|
3
|
-
|
4
|
-
# Stdlib
|
5
|
-
# -----------------------------------------------------------------------
|
6
|
-
require 'forwardable'
|
7
|
-
|
8
|
-
# Deps
|
9
|
-
# -----------------------------------------------------------------------
|
10
|
-
require 'awesome_print'
|
11
|
-
require 'semantic_logger'
|
12
|
-
|
13
|
-
# Project / Package
|
14
|
-
# -----------------------------------------------------------------------
|
15
|
-
|
16
|
-
|
17
|
-
# Refinements
|
18
|
-
# =======================================================================
|
19
|
-
|
20
|
-
using NRSER
|
21
|
-
using NRSER::Types
|
22
|
-
|
23
|
-
|
24
|
-
# Declarations
|
25
|
-
# =======================================================================
|
26
|
-
|
27
|
-
module QB::Util; end
|
28
|
-
|
29
|
-
|
30
|
-
# Definitions
|
31
|
-
# =======================================================================
|
32
|
-
|
33
|
-
# Utility methods to setup logging with [semantic_logger][].
|
34
|
-
#
|
35
|
-
# [semantic_logger]: http://rocketjob.github.io/semantic_logger/
|
36
|
-
#
|
37
|
-
module QB::Util::Logging
|
38
|
-
include SemanticLogger::Loggable
|
39
|
-
|
40
|
-
|
41
|
-
# @todo document Formatters module.
|
42
|
-
module Formatters
|
43
|
-
|
44
|
-
# Custom tweaked color formatter (for CLI output).
|
45
|
-
#
|
46
|
-
# - Turns on multiline output in Awesome Print by default.
|
47
|
-
#
|
48
|
-
class Color < SemanticLogger::Formatters::Color
|
49
|
-
|
50
|
-
# Constants
|
51
|
-
# ======================================================================
|
52
|
-
|
53
|
-
|
54
|
-
# Class Methods
|
55
|
-
# ======================================================================
|
56
|
-
|
57
|
-
|
58
|
-
# Attributes
|
59
|
-
# ======================================================================
|
60
|
-
|
61
|
-
|
62
|
-
# Constructor
|
63
|
-
# ======================================================================
|
64
|
-
|
65
|
-
# Instantiate a new `ColorFormatter`.
|
66
|
-
def initialize **options
|
67
|
-
super ap: { multiline: true },
|
68
|
-
color_map: SemanticLogger::Formatters::Color::ColorMap.new(
|
69
|
-
debug: SemanticLogger::AnsiColors::MAGENTA,
|
70
|
-
trace: "\e[1;30m", # "Dark Gray"
|
71
|
-
),
|
72
|
-
**options
|
73
|
-
end # #initialize
|
74
|
-
|
75
|
-
|
76
|
-
# Instance Methods
|
77
|
-
# ======================================================================
|
78
|
-
|
79
|
-
|
80
|
-
# Upcase the log level.
|
81
|
-
#
|
82
|
-
# @return [String]
|
83
|
-
#
|
84
|
-
def level
|
85
|
-
"#{ color }#{ log.level.upcase }#{ color_map.clear }"
|
86
|
-
end
|
87
|
-
|
88
|
-
|
89
|
-
# Create the log entry text. Overridden to customize appearance -
|
90
|
-
# generally reduce amount of info and put payload on it's own line.
|
91
|
-
#
|
92
|
-
# We need to replace *two* super functions, the first being
|
93
|
-
# [SemanticLogger::Formatters::Color#call][]:
|
94
|
-
#
|
95
|
-
# def call(log, logger)
|
96
|
-
# self.color = color_map[log.level]
|
97
|
-
# super(log, logger)
|
98
|
-
# end
|
99
|
-
#
|
100
|
-
# [SemanticLogger::Formatters::Color#call]: https://github.com/rocketjob/semantic_logger/blob/v4.2.0/lib/semantic_logger/formatters/color.rb#L98
|
101
|
-
#
|
102
|
-
# which doesn't do all too much, and the next being it's super-method,
|
103
|
-
# [SemanticLogger::Formatters::Default#call][]:
|
104
|
-
#
|
105
|
-
# # Default text log format
|
106
|
-
# # Generates logs of the form:
|
107
|
-
# # 2011-07-19 14:36:15.660235 D [1149:ScriptThreadProcess] Rails -- Hello World
|
108
|
-
# def call(log, logger)
|
109
|
-
# self.log = log
|
110
|
-
# self.logger = logger
|
111
|
-
#
|
112
|
-
# [time, level, process_info, tags, named_tags, duration, name, message, payload, exception].compact.join(' ')
|
113
|
-
# end
|
114
|
-
#
|
115
|
-
# [SemanticLogger::Formatters::Default#call]: https://github.com/rocketjob/semantic_logger/blob/v4.2.0/lib/semantic_logger/formatters/default.rb#L64
|
116
|
-
#
|
117
|
-
# which does most the real assembly.
|
118
|
-
#
|
119
|
-
# @param [SemanticLogger::Log] log
|
120
|
-
# The log entry to format.
|
121
|
-
#
|
122
|
-
# See [SemanticLogger::Log](https://github.com/rocketjob/semantic_logger/blob/v4.2.0/lib/semantic_logger/log.rb)
|
123
|
-
#
|
124
|
-
# @param [SemanticLogger::Logger] logger
|
125
|
-
# The logger doing the logging (pretty sure, haven't checked).
|
126
|
-
#
|
127
|
-
# See [SemanticLogger::Logger](https://github.com/rocketjob/semantic_logger/blob/v4.2.0/lib/semantic_logger/logger.rb)
|
128
|
-
#
|
129
|
-
# @return [String]
|
130
|
-
# The full log string.
|
131
|
-
#
|
132
|
-
def call log, logger
|
133
|
-
# SemanticLogger::Formatters::Color code
|
134
|
-
self.color = color_map[log.level]
|
135
|
-
|
136
|
-
# SemanticLogger::Formatters::Default code
|
137
|
-
self.log = log
|
138
|
-
self.logger = logger
|
139
|
-
|
140
|
-
is_info = log.level == :info
|
141
|
-
|
142
|
-
[
|
143
|
-
level,
|
144
|
-
tags,
|
145
|
-
named_tags,
|
146
|
-
duration,
|
147
|
-
(is_info ? nil : name),
|
148
|
-
message,
|
149
|
-
payload,
|
150
|
-
exception,
|
151
|
-
].compact.join(' ')
|
152
|
-
|
153
|
-
end # #call
|
154
|
-
|
155
|
-
|
156
|
-
end # class Color
|
157
|
-
|
158
|
-
end # module Formatters
|
159
|
-
|
160
|
-
|
161
|
-
module Appender
|
162
|
-
# Replacement for {SemanticLogger::Appender::Async} that implements the
|
163
|
-
# same interface but just logs synchronously in the current thread.
|
164
|
-
#
|
165
|
-
class Sync
|
166
|
-
extend Forwardable
|
167
|
-
|
168
|
-
# The appender we forward to, which is a {SemanticLogger::Processor}
|
169
|
-
# in practice, since it wouldn't make any sense to wrap a regular
|
170
|
-
# appender in a Sync.
|
171
|
-
#
|
172
|
-
# @return [SemanticLogger::Processor]
|
173
|
-
#
|
174
|
-
attr_accessor :appender
|
175
|
-
|
176
|
-
# Forward methods that can be called directly
|
177
|
-
def_delegator :@appender, :name
|
178
|
-
def_delegator :@appender, :should_log?
|
179
|
-
def_delegator :@appender, :filter
|
180
|
-
def_delegator :@appender, :host
|
181
|
-
def_delegator :@appender, :application
|
182
|
-
def_delegator :@appender, :level
|
183
|
-
def_delegator :@appender, :level=
|
184
|
-
def_delegator :@appender, :logger
|
185
|
-
# Added for sync
|
186
|
-
def_delegator :@appender, :log
|
187
|
-
def_delegator :@appender, :on_log
|
188
|
-
def_delegator :@appender, :flush
|
189
|
-
def_delegator :@appender, :close
|
190
|
-
|
191
|
-
class FakeQueue
|
192
|
-
def self.size
|
193
|
-
0
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
# Appender proxy to allow an existing appender to run asynchronously in a separate thread.
|
198
|
-
#
|
199
|
-
# Parameters:
|
200
|
-
# name: [String]
|
201
|
-
# Name to use for the log thread and the log name when logging any errors from this appender.
|
202
|
-
#
|
203
|
-
# lag_threshold_s [Float]
|
204
|
-
# Log a warning when a log message has been on the queue for longer than this period in seconds.
|
205
|
-
# Default: 30
|
206
|
-
#
|
207
|
-
# lag_check_interval: [Integer]
|
208
|
-
# Number of messages to process before checking for slow logging.
|
209
|
-
# Default: 1,000
|
210
|
-
def initialize(appender:,
|
211
|
-
name: appender.class.name)
|
212
|
-
|
213
|
-
@appender = appender
|
214
|
-
end
|
215
|
-
|
216
|
-
# Needs to be there to support {SemanticLogger::Processor.queue_size},
|
217
|
-
# which gets the queue and returns it's size (which will always be zero
|
218
|
-
# for us).
|
219
|
-
#
|
220
|
-
# We return {FakeQueue}, which only implements a `size` method that
|
221
|
-
# returns zero.
|
222
|
-
#
|
223
|
-
# @return [#size]
|
224
|
-
#
|
225
|
-
def queue; FakeQueue; end
|
226
|
-
|
227
|
-
def lag_check_interval; -1; end
|
228
|
-
|
229
|
-
def lag_check_interval= value
|
230
|
-
raise "Can't set `lag_check_interval` on Sync appender"
|
231
|
-
end
|
232
|
-
|
233
|
-
def lag_threshold_s; -1; end
|
234
|
-
|
235
|
-
def lag_threshold_s= value
|
236
|
-
raise "Can't set `lag_threshold_s` on Sync appender"
|
237
|
-
end
|
238
|
-
|
239
|
-
# @return [false] Sync appender is of course not size-capped.
|
240
|
-
def capped?; false; end
|
241
|
-
|
242
|
-
# The {SemanticLogger::Appender::Async} worker thread is exposed via
|
243
|
-
# this method, which creates it if it doesn't exist and returns it, but
|
244
|
-
# it doesn't seem like the returned value is ever used; the method
|
245
|
-
# call is just invoked to start the thread.
|
246
|
-
#
|
247
|
-
# Hence it seems to make most sense to just return `nil` since we don't
|
248
|
-
# have a thread, and figure out what to do if that causes errors (so far
|
249
|
-
# it seems fine).
|
250
|
-
#
|
251
|
-
# @return [nil]
|
252
|
-
#
|
253
|
-
def thread; end
|
254
|
-
|
255
|
-
# @return [true] Sync appender is always active
|
256
|
-
def active?; true; end
|
257
|
-
|
258
|
-
end # class Sync
|
259
|
-
end # module Appenders
|
260
|
-
|
261
|
-
|
262
|
-
# Module (Class) Methods
|
263
|
-
# =====================================================================
|
264
|
-
|
265
|
-
|
266
|
-
def self.level
|
267
|
-
SemanticLogger.default_level
|
268
|
-
end
|
269
|
-
|
270
|
-
|
271
|
-
def self.level= level
|
272
|
-
SemanticLogger.default_level = level
|
273
|
-
end
|
274
|
-
|
275
|
-
|
276
|
-
def self.setup?
|
277
|
-
!!@setup
|
278
|
-
end
|
279
|
-
|
280
|
-
|
281
|
-
def self.get_env_level
|
282
|
-
if ENV['QB_TRACE'].truthy?
|
283
|
-
return :trace
|
284
|
-
elsif ENV['QB_DEBUG'].truthy?
|
285
|
-
return :debug
|
286
|
-
elsif ENV['QB_LOG_LEVEL']
|
287
|
-
return ENV['QB_LOG_LEVEL'].to_sym
|
288
|
-
end
|
289
|
-
|
290
|
-
nil
|
291
|
-
end
|
292
|
-
|
293
|
-
|
294
|
-
# Setup logging.
|
295
|
-
#
|
296
|
-
# @param [type] arg_name
|
297
|
-
# @todo Add name param description.
|
298
|
-
#
|
299
|
-
# @return [return_type]
|
300
|
-
# @todo Document return value.
|
301
|
-
#
|
302
|
-
def self.setup level: nil, sync: false, dest: nil
|
303
|
-
if setup?
|
304
|
-
logger.warn "Logging is already setup!"
|
305
|
-
return false
|
306
|
-
end
|
307
|
-
|
308
|
-
SemanticLogger.application = 'qb'
|
309
|
-
|
310
|
-
level = get_env_level if level.nil?
|
311
|
-
self.level = level if level
|
312
|
-
self.appender = dest if dest
|
313
|
-
|
314
|
-
if sync
|
315
|
-
# Hack up SemanticLogger to do sync logging in the main thread
|
316
|
-
|
317
|
-
# Create a {Locd::Logging::Appender::Sync}, which implements the
|
318
|
-
# {SemanticLogger::Appender::Async} interface but just forwards directly
|
319
|
-
# to it's appender in the same thread, and point it where
|
320
|
-
# {SemanticLogger::Processor.instance} (which is an Async) points.
|
321
|
-
#
|
322
|
-
sync_appender = Appender::Sync.new \
|
323
|
-
appender: SemanticLogger::Processor.instance.appender
|
324
|
-
|
325
|
-
# Swap our sync in for the async
|
326
|
-
SemanticLogger::Processor.instance_variable_set \
|
327
|
-
:@processor,
|
328
|
-
sync_appender
|
329
|
-
end
|
330
|
-
|
331
|
-
@setup = true
|
332
|
-
|
333
|
-
true
|
334
|
-
end # .setup
|
335
|
-
|
336
|
-
|
337
|
-
def self.appender
|
338
|
-
@appender
|
339
|
-
end
|
340
|
-
|
341
|
-
|
342
|
-
def self.appender= value
|
343
|
-
# Save ref to current appender (if any) so we can remove it after adding
|
344
|
-
# the new one.
|
345
|
-
old_appender = @appender
|
346
|
-
|
347
|
-
@appender = case value
|
348
|
-
when Hash
|
349
|
-
SemanticLogger.add_appender value
|
350
|
-
when String
|
351
|
-
SemanticLogger.add_appender file_name: value
|
352
|
-
else
|
353
|
-
SemanticLogger.add_appender \
|
354
|
-
io: value,
|
355
|
-
formatter: Formatters::Color.new
|
356
|
-
end
|
357
|
-
|
358
|
-
# Remove the old appender (if there was one). This is done after adding
|
359
|
-
# the new one so that failing won't result with no appenders.
|
360
|
-
SemanticLogger.remove_appender( old_appender ) if old_appender
|
361
|
-
|
362
|
-
@appender
|
363
|
-
end
|
364
|
-
|
365
|
-
|
366
|
-
end # module QB::Util::Logging
|