locd 0.1.4 → 0.1.5

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