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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aca30bc6181a0452746aeb8fa262a1fe8e5b0537
4
- data.tar.gz: 6a94b47657b966b02c9b0de3dbb6acbfe4a33c65
3
+ metadata.gz: e003d57b3df40cfe17e1d4200423a7dec88583cf
4
+ data.tar.gz: 96bedb7ba58a2f2278f18dde6ead2c34533d105c
5
5
  SHA512:
6
- metadata.gz: 80c25333f1c2c26f865bf7ef6879b5dfbd10f203ca1f4df1f37c08a8f5fb26627581e4bb408e94d1e1b99f5b7168f5f73e53cfbba8295fae1b6be9ed6da167f3
7
- data.tar.gz: ff848dc6e1f90c134d518f810f30dab66526c811890692fdc84941c88a3248cae042c6fdfe582732fa26318021c32d3e112d94bf4f411eafc0030052133ebe0b
6
+ metadata.gz: d0211a56f9a20f60664bf169120b771283735b4eb9c68b6a2c26886b9d880cf0548720c3a09150748a1e06ec56e87ea926c44845d35d7207fe774df105e4fd99
7
+ data.tar.gz: fc2fba112a5e43f3cdd41b7d8686d4a8e7d51070fd6a82838d6f4dae038594c6718a9f1bb63ecf3078bc82e2ef7959e96ecb1b494a5c6b6ed5afc6c78ae30e5f
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.24
1
+ 0.3.25
@@ -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
- QB::Util::Logging.setup
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 = SemanticLogger['qb/exe/qb#main']
40
+ logger = NRSER::Logging['qb/exe/qb#main']
41
41
 
42
42
  QB::CLI.set_debug! args
43
- QB::Util::Logging.setup sync: true, dest: $stderr
43
+ NRSER::Logging.setup_for_cli! application: 'qb'
44
44
 
45
45
  logger.debug args: args
46
46
 
data/lib/qb/util.rb CHANGED
@@ -1,4 +1,3 @@
1
- require_relative './util/logging'
2
1
  require_relative './util/stdio'
3
2
  require_relative './util/interop'
4
3
  require_relative './util/bundler'
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", '< 0.3', '>= 0.2.0.pre.3'
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.24
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-09 00:00:00.000000000 Z
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.pre.3
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.pre.3
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
@@ -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