service_skeleton 0.0.0.3.g1269800 → 0.0.0.3.g1269800.1.gaaa2fa1

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: 54f7ce2f282a5da9818948a40ec390c7c5cb13f0
4
- data.tar.gz: 83fa2415988d4c7ec93098be26424cbd73dc5ee3
3
+ metadata.gz: 217daf5c11dec98416acbde668b1dc611aa33858
4
+ data.tar.gz: df99d97d1611db368e17a970d0306522532ddb82
5
5
  SHA512:
6
- metadata.gz: 81fb4b71d9a0c17264dc11721df78b720d35e0fbdcc9c8ece31c223571d72e3f9c825fe96ef5c4c0ed8877b11d86bef9c0132c9557f963f5aa8a6b559b10b920
7
- data.tar.gz: ec0db152836431cf3891de6802fda44b0dc4816f352fae76a897059f15badf7bc98f1f468e5b44942846c0489a8e3816dbcfdeed506abe5af71b3d83605b1df9
6
+ metadata.gz: 95be950d0c0d0f3163386eff63509d771b11c279886e28095780836235f78d446a117df2468f3f56c0cdae342febec97398611ed00eb475797afa48dad17307f
7
+ data.tar.gz: d9c5fb3b6662c245006cb1c7887d6e681ae2c41542aa1f7c5469539b50ff24e277eaf54020a7370d64ae696412ae1699fef8b275c31503eb9f07ed76c7879985
data/README.md CHANGED
@@ -304,6 +304,10 @@ using Unix signals or the admin HTTP interface (if enabled), you can tell the
304
304
  logger to increase or decrease logging verbosity *without interrupting
305
305
  service*. We are truly living in the future.
306
306
 
307
+ Finally, if you're a devotee of the ELK stack, we can automagically send log
308
+ entries straight into logstash, rather than you having to do it in some
309
+ more roundabout fashion.
310
+
307
311
 
308
312
  ### Logging Configuration
309
313
 
@@ -342,6 +346,15 @@ All are all-uppercase, and the `<SERVICENAME>_` portion is the all-uppercase
342
346
  Logging levels can be changed at runtime, via [signals](#default-signals) or
343
347
  [the HTTP admin interface](#http-admin-interface).
344
348
 
349
+ * **`<SERVICENAME>_LOGSTASH_SERVER`** (string; default `""`) -- if set to a
350
+ non-empty string, we will engage the services of the [loggerstash
351
+ gem](https://github.com/discourse/loggerstash) on your behalf to send all log
352
+ entries to the logstash server you specify (as [an `address:port`,
353
+ `hostname:port`, or SRV
354
+ record](https://github.com/discourse/logstash_writer#usage). Just be sure
355
+ and [configure logstash
356
+ appropriately](https://github.com/discourse/loggerstash#logstash-configuration).
357
+
345
358
  * **`<SERVICENAME>_LOG_ENABLE_TIMESTAMPS`** (boolean; default: `"no"`) -- if
346
359
  set to a true-ish value (`yes`/`y`/`on`/`true`/`1`), then the log entries
347
360
  emitted by the logger will have the current time (to the nearest nanosecond)
@@ -2,12 +2,14 @@ require "to_regexp"
2
2
 
3
3
  require_relative "./filtering_logger"
4
4
 
5
+ require "loggerstash"
6
+
5
7
  class ServiceSkeleton
6
8
  class Config
7
9
  attr_reader :logger
8
10
 
9
11
  def initialize(env, svc)
10
- @env = env.to_hash.freeze
12
+ @env = env.to_hash.dup.freeze
11
13
  @svc = svc
12
14
 
13
15
  parse_registered_variables(env)
@@ -46,6 +48,12 @@ class ServiceSkeleton
46
48
 
47
49
  @logger = Logger.new(log_file || $stderr, shift_age, shift_size)
48
50
 
51
+ if self.logstash_server && !self.logstash_server.empty?
52
+ loggerstash = Loggerstash.new(logstash_server: logstash_server, logger: @logger)
53
+ loggerstash.metrics_registry = @svc.metrics
54
+ loggerstash.attach(@logger)
55
+ end
56
+
49
57
  if log_enable_timestamps
50
58
  @logger.formatter = ->(s, t, p, m) { "#{t.utc.strftime("%FT%T.%NZ")} #{s[0]} [#{p}] #{m}\n" }
51
59
  else
@@ -63,11 +63,13 @@ class ServiceSkeleton
63
63
 
64
64
  def stop(force = false)
65
65
  if force
66
+ #:nocov:
66
67
  @op_mutex.synchronize do
67
68
  if @thread
68
69
  @thread.raise(ServiceSkeleton::Terminate)
69
70
  end
70
71
  end
72
+ #:nocov:
71
73
  else
72
74
  shutdown
73
75
  end
@@ -99,6 +101,7 @@ class ServiceSkeleton
99
101
  end
100
102
 
101
103
  def shutdown
104
+ #:nocov:
102
105
  @op_mutex.synchronize do
103
106
  if @thread
104
107
  @thread.raise(ServiceSkeleton::Terminate)
@@ -106,6 +109,7 @@ class ServiceSkeleton
106
109
  @thread = nil
107
110
  end
108
111
  end
112
+ #:nocov:
109
113
  end
110
114
 
111
115
  def setup_metrics
@@ -135,7 +139,7 @@ class ServiceSkeleton
135
139
  end
136
140
 
137
141
  def setup_signals
138
- @signal_handler = ServiceSkeleton::SignalHandler.new(logger: logger, service: self, signal_counter: metrics.counter(:"#{service_name}_signals_handled_total", "How many of each type of signal have been handled"))
142
+ @signal_handler = ServiceSkeleton::SignalHandler.new(logger: logger, service: self, signal_counter: metrics.counter(:"#{self.service_name}_signals_handled_total", "How many of each type of signal have been handled"))
139
143
 
140
144
  @signal_handler.hook_signal("USR1") do
141
145
  logger.level -= 1 unless logger.level == Logger::DEBUG
@@ -173,6 +177,7 @@ class ServiceSkeleton
173
177
 
174
178
  @registered_variables = [
175
179
  ServiceSkeleton::ConfigVariable.new(:SERVICE_SKELETON_LOG_LEVEL) { "INFO" },
180
+ ServiceSkeleton::ConfigVariable.new(:SERVICE_SKELETON_LOGSTASH_SERVER) { "" },
176
181
  ServiceSkeleton::ConfigVariable.new(:SERVICE_SKELETON_LOG_ENABLE_TIMESTAMPS) { false },
177
182
  ServiceSkeleton::ConfigVariable.new(:SERVICE_SKELETON_LOG_FILE) { nil },
178
183
  ServiceSkeleton::ConfigVariable.new(:SERVICE_SKELETON_LOG_MAX_FILE_SIZE) { 1048576 },
@@ -182,6 +187,7 @@ class ServiceSkeleton
182
187
 
183
188
  def self.inherited(subclass)
184
189
  subclass.string(:"#{subclass.service_name.upcase}_LOG_LEVEL", default: "INFO")
190
+ subclass.string(:"#{subclass.service_name.upcase}_LOGSTASH_SERVER", default: "")
185
191
  subclass.boolean(:"#{subclass.service_name.upcase}_LOG_ENABLE_TIMESTAMPS", default: false)
186
192
  subclass.string(:"#{subclass.service_name.upcase}_LOG_FILE", default: nil)
187
193
  subclass.integer(:"#{subclass.service_name.upcase}_LOG_MAX_FILE_SIZE", default: 1048576, range: 0..Float::INFINITY)
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  s.required_ruby_version = ">= 2.3.0"
32
32
 
33
33
  s.add_runtime_dependency "frankenstein", "~> 1.2"
34
+ s.add_runtime_dependency "loggerstash", "~> 0.0"
34
35
  # prometheus-client provides no guaranteed backwards compatibility,
35
36
  # and in fact happily breaks things with no notice, so we're stuck
36
37
  # with hard-coding a specific version to avoid unexpected disaster.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: service_skeleton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0.3.g1269800
4
+ version: 0.0.0.3.g1269800.1.gaaa2fa1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Palmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-15 00:00:00.000000000 Z
11
+ date: 2018-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: frankenstein
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: loggerstash
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: prometheus-client
29
43
  requirement: !ruby/object:Gem::Requirement