locd 0.1.4 → 0.1.5

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