qb 0.3.24 → 0.3.25

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
  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