bmc-daemon-lib 0.12.2 → 0.13.2
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 +5 -5
- data/bmc-daemon-lib.gemspec +4 -4
- data/lib/bmc-daemon-lib/conf.rb +150 -123
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c82b143ff8a357de485934538617e19a176535ed160cf608ccd652ded70abaee
|
4
|
+
data.tar.gz: 46f2b9db709b3197195eadfbd68378407cd1212c8ad61e63ef0c3856d7059814
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 396b40feb073d614a22ffc7b3999981bb2539d28fe44494aa790b8c0428183fc3d73cb1d2c545553ad88bbf6d86cfa1cc13654c974d55b3eb61736c40d793772
|
7
|
+
data.tar.gz: b5f46871abf578101a6bf51078811a9c432276b382c02e7fd623c0b5d674b4635622552be6c466172435d79bdd389d94067b6cf3b646f9d8d97a445eb68c34ba
|
data/bmc-daemon-lib.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
Gem::Specification.new do |spec|
|
3
3
|
# Project version
|
4
|
-
spec.version = "0.
|
4
|
+
spec.version = "0.13.2"
|
5
5
|
|
6
6
|
# Project description
|
7
7
|
spec.name = "bmc-daemon-lib"
|
@@ -24,12 +24,12 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "rake"
|
25
25
|
spec.add_development_dependency "rspec"
|
26
26
|
spec.add_development_dependency "rubocop"
|
27
|
-
|
28
|
-
|
27
|
+
|
29
28
|
# Runtime dependencies
|
30
29
|
# spec.add_runtime_dependency "hashie" , "~> 3.4.6" # upgrading to 3.5.4 breaks things !
|
31
30
|
# spec.add_runtime_dependency "chamber" , "~> 2.9.1"
|
32
31
|
|
33
|
-
spec.add_runtime_dependency "hashie" , "~> 3.4.6" # upgrading to 3.5.4 breaks things !
|
32
|
+
# spec.add_runtime_dependency "hashie" , "~> 3.4.6" # upgrading to 3.5.4 breaks things !
|
33
|
+
spec.add_runtime_dependency "hashie" , "~> 3" # upgrading to 3.5.4 breaks things !
|
34
34
|
spec.add_runtime_dependency "chamber"
|
35
35
|
end
|
data/lib/bmc-daemon-lib/conf.rb
CHANGED
@@ -14,99 +14,67 @@ module BmcDaemonLib
|
|
14
14
|
extend Chamber
|
15
15
|
PIDFILE_DIR = "/tmp/"
|
16
16
|
|
17
|
+
# Set up encodings
|
18
|
+
Encoding.default_internal = "utf-8"
|
19
|
+
Encoding.default_external = "utf-8"
|
20
|
+
|
21
|
+
# Some global init
|
22
|
+
@app_started = Time.now
|
23
|
+
@app_name = ""
|
24
|
+
@app_env = "production"
|
25
|
+
@app_host = `hostname`.to_s.chomp.split(".").first
|
26
|
+
|
27
|
+
# By default, Newrelic is disabled
|
28
|
+
ENV["NEWRELIC_AGENT_ENABLED"] = "false"
|
29
|
+
|
17
30
|
class << self
|
18
|
-
attr_accessor :app_env
|
19
31
|
attr_reader :app_root
|
20
|
-
attr_reader :
|
32
|
+
attr_reader :app_started
|
21
33
|
attr_reader :app_name
|
34
|
+
attr_reader :app_env
|
35
|
+
attr_reader :app_host
|
22
36
|
attr_reader :app_ver
|
23
|
-
attr_reader :app_started
|
24
37
|
attr_reader :app_spec
|
25
|
-
attr_reader :
|
26
|
-
attr_reader :host
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.init app_root
|
30
|
-
# Permanent flags
|
31
|
-
@initialized = true
|
32
|
-
@app_started = Time.now
|
33
|
-
|
34
|
-
# Default values
|
35
|
-
@files ||= []
|
36
|
-
@app_name ||= "app_name"
|
37
|
-
@app_env ||= "production"
|
38
|
-
@host ||= `hostname`.to_s.chomp.split(".").first
|
39
|
-
|
40
|
-
# Store and clean app_root
|
41
|
-
@app_root = File.expand_path(app_root)
|
42
|
-
gemspec_path = "#{@app_root}/*.gemspec"
|
43
|
-
|
44
|
-
# Try to find any gemspec file
|
45
|
-
matches = Dir[gemspec_path]
|
46
|
-
fail ConfigGemspecMissing, "gemspec file not found: #{gemspec_path}" if matches.size < 1
|
47
|
-
fail ConfigGemspecNotUnique, "gemspec file not found: #{gemspec_path}" if matches.size > 1
|
48
|
-
|
49
|
-
# Load Gemspec (just the only match)
|
50
|
-
@spec = Gem::Specification::load(matches.first)
|
51
|
-
fail ConfigGemspecInvalid, "gemspec not readable: #{gemspec_path}" unless @spec
|
52
|
-
|
53
|
-
# Extract useful information from gemspec
|
54
|
-
@app_name = @spec.name.to_s
|
55
|
-
@app_ver = @spec.version.to_s
|
56
|
-
fail ConfigMissingParameter, "gemspec: missing name" unless @app_name
|
57
|
-
fail ConfigMissingParameter, "gemspec: missing version" unless @app_ver
|
38
|
+
attr_reader :app_config
|
58
39
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
ENV["NEWRELIC_AGENT_ENABLED"] = "false"
|
64
|
-
|
65
|
-
# Add other config files
|
66
|
-
add_config generate_config_defaults
|
67
|
-
add_config generate_config_etc
|
68
|
-
|
69
|
-
# Return something
|
70
|
-
return @app_name
|
71
|
-
end
|
40
|
+
def app_env= value
|
41
|
+
@app_env = value
|
42
|
+
ENV["RACK_ENV"] = value.to_s
|
43
|
+
end
|
72
44
|
|
73
|
-
|
74
|
-
|
45
|
+
def app_config= path
|
46
|
+
@app_config= path
|
47
|
+
end
|
75
48
|
|
76
|
-
|
77
|
-
|
78
|
-
|
49
|
+
def cmd_config= path
|
50
|
+
@app_config= path
|
51
|
+
end
|
79
52
|
|
80
|
-
#
|
81
|
-
|
53
|
+
# def self.init app_root = nil
|
54
|
+
def app_root= path
|
55
|
+
self.init_from path
|
56
|
+
end
|
82
57
|
|
83
|
-
|
84
|
-
|
85
|
-
|
58
|
+
def init_from path
|
59
|
+
# Store it
|
60
|
+
@app_root = ::File.expand_path(path)
|
61
|
+
return unless @app_root
|
86
62
|
|
87
|
-
|
88
|
-
|
63
|
+
# Read the gemspec
|
64
|
+
gemspec = init_from_gemspec
|
89
65
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
fail ConfigOtherError, "#{e.message} \n #{e.backtrace.to_yaml}"
|
94
|
-
end
|
95
|
-
|
96
|
-
# Reload files
|
97
|
-
def self.reload!
|
98
|
-
ensure_init
|
99
|
-
load_files
|
100
|
-
end
|
66
|
+
#return gemspec
|
67
|
+
return @app_root
|
68
|
+
end
|
101
69
|
|
102
|
-
|
103
|
-
|
104
|
-
|
70
|
+
def dump
|
71
|
+
to_hash.to_yaml(indent: 4, useheader: true, useversion: false )
|
72
|
+
end
|
73
|
+
|
105
74
|
end
|
106
75
|
|
107
76
|
# Direct access to any depth
|
108
77
|
def self.at *path
|
109
|
-
ensure_init
|
110
78
|
path.reduce(Conf) { |m, key| m && m[key.to_s] }
|
111
79
|
end
|
112
80
|
|
@@ -140,17 +108,13 @@ module BmcDaemonLib
|
|
140
108
|
def self.gem_installed? gemname
|
141
109
|
Gem::Specification.collect(&:name).include? gemname
|
142
110
|
end
|
143
|
-
|
144
|
-
|
145
111
|
def self.feature_newrelic?
|
146
|
-
ensure_init
|
147
112
|
return false unless gem_installed?('newrelic_rpm')
|
148
113
|
return false if self.at(:newrelic, :enabled) == false
|
149
114
|
return false if self.at(:newrelic, :disabled) == true
|
150
115
|
return self.at(:newrelic, :license) || false
|
151
116
|
end
|
152
117
|
def self.feature_rollbar?
|
153
|
-
ensure_init
|
154
118
|
return false unless gem_installed?('rollbar')
|
155
119
|
return false if self.at(:rollbar, :enabled) == false
|
156
120
|
return false if self.at(:rollbar, :disabled) == true
|
@@ -168,36 +132,46 @@ module BmcDaemonLib
|
|
168
132
|
end
|
169
133
|
|
170
134
|
# Generators
|
171
|
-
def self.
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
def self.generate_config_defaults
|
176
|
-
ensure_init
|
177
|
-
"#{@app_root}/defaults.yml" if @app_root
|
135
|
+
def self.app_libs
|
136
|
+
check_presence_of @app_name, @app_root
|
137
|
+
|
138
|
+
::File.expand_path("lib/#{@app_name}/", @app_root)
|
178
139
|
end
|
179
|
-
|
180
|
-
|
181
|
-
|
140
|
+
|
141
|
+
def self.generate_user_agent
|
142
|
+
check_presence_of @app_name, @app_ver
|
143
|
+
|
144
|
+
"#{@app_name}/#{@app_ver}"
|
182
145
|
end
|
146
|
+
|
183
147
|
def self.generate_process_name
|
184
|
-
|
148
|
+
check_presence_of @app_name, @app_env
|
149
|
+
|
185
150
|
parts = [@app_name, @app_env]
|
186
151
|
parts << self[:port] if self[:port]
|
187
152
|
parts.join('-')
|
188
153
|
end
|
154
|
+
|
155
|
+
def self.generate_config_defaults
|
156
|
+
check_presence_of @app_root
|
157
|
+
"#{@app_root}/defaults.yml"
|
158
|
+
end
|
159
|
+
|
160
|
+
def self.generate_config_etc
|
161
|
+
check_presence_of @app_name
|
162
|
+
"/etc/#{@app_name}.yml"
|
163
|
+
end
|
164
|
+
|
189
165
|
def self.generate_pidfile
|
190
|
-
|
191
|
-
process_name = self.generate_process_name
|
192
|
-
File.expand_path "#{process_name}.pid", PIDFILE_DIR
|
166
|
+
::File.expand_path "#{self.generate_process_name}.pid", PIDFILE_DIR
|
193
167
|
end
|
168
|
+
|
194
169
|
def self.generate_config_message
|
195
|
-
|
196
|
-
|
197
|
-
config_etc = self.generate(:config_etc)
|
198
|
-
"A default configuration is available (#{config_defaults}) and can be copied to the default location (#{config_etc}): \n sudo cp #{config_defaults} #{config_etc}"
|
170
|
+
return unless self.generate_config_defaults && self.generate_config_etc
|
171
|
+
"A default configuration is available (#{self.generate_config_defaults}) and can be copied to the default location (#{self.generate_config_etc}): \n sudo cp #{self.generate_config_defaults} #{self.generate_config_etc}"
|
199
172
|
end
|
200
173
|
|
174
|
+
# Plugins
|
201
175
|
def self.prepare_newrelic
|
202
176
|
# Disable if no config present
|
203
177
|
return unless self.feature?(:newrelic)
|
@@ -217,17 +191,6 @@ module BmcDaemonLib
|
|
217
191
|
ENV["NEW_RELIC_LOG"] = logfile_path(:newrelic)
|
218
192
|
ENV["NEW_RELIC_LICENSE_KEY"] = conf[:license].to_s
|
219
193
|
ENV["NEW_RELIC_APP_NAME"] = conf[:app_name].to_s
|
220
|
-
|
221
|
-
# logger_newrelic = Logger.new('/tmp/newrelic.log')
|
222
|
-
# logger_newrelic.debug Time.now()
|
223
|
-
# Start the agent
|
224
|
-
# NewRelic::Agent.manual_start({
|
225
|
-
# agent_enabled: true,
|
226
|
-
# log: logger_newrelic,
|
227
|
-
# env: @app_env,
|
228
|
-
# license_key: conf[:license].to_s,
|
229
|
-
# app_name: conf[:app_name].to_s,
|
230
|
-
# })
|
231
194
|
end
|
232
195
|
|
233
196
|
def self.prepare_rollbar
|
@@ -254,7 +217,7 @@ module BmcDaemonLib
|
|
254
217
|
end
|
255
218
|
|
256
219
|
# Notify startup
|
257
|
-
Rollbar.info("[#{@app_ver}] #{@
|
220
|
+
Rollbar.info("[#{@app_ver}] #{@app_host}")
|
258
221
|
end
|
259
222
|
|
260
223
|
def self.log origin, message
|
@@ -268,9 +231,37 @@ module BmcDaemonLib
|
|
268
231
|
|
269
232
|
protected
|
270
233
|
|
234
|
+
def self.init_from_gemspec
|
235
|
+
# Check conditions
|
236
|
+
check_presence_of @app_root
|
237
|
+
|
238
|
+
# puts "Conf.init_from_gemspec"
|
239
|
+
gemspec_path = "#{@app_root}/*.gemspec"
|
240
|
+
|
241
|
+
# Try to find any gemspec file
|
242
|
+
matches = Dir[gemspec_path]
|
243
|
+
fail ConfigGemspecMissing, "gemspec file not found: #{gemspec_path}" if matches.size < 1
|
244
|
+
fail ConfigGemspecNotUnique, "gemspec file not found: #{gemspec_path}" if matches.size > 1
|
245
|
+
|
246
|
+
# Load Gemspec (just the only match)
|
247
|
+
@spec = Gem::Specification::load(matches.first)
|
248
|
+
fail ConfigGemspecInvalid, "gemspec not readable: #{gemspec_path}" unless @spec
|
249
|
+
|
250
|
+
# Extract useful information from gemspec
|
251
|
+
@app_name = @spec.name.to_s
|
252
|
+
@app_ver = @spec.version.to_s
|
253
|
+
fail ConfigMissingParameter, "gemspec: missing name" unless @app_name
|
254
|
+
fail ConfigMissingParameter, "gemspec: missing version" unless @app_ver
|
255
|
+
|
256
|
+
return @spec
|
257
|
+
end
|
258
|
+
|
271
259
|
def self.newrelic_init_app_name conf
|
272
260
|
# Ignore if already set
|
273
|
-
return if
|
261
|
+
return if @app_name
|
262
|
+
|
263
|
+
# Check conditions
|
264
|
+
check_presence_of @app_env
|
274
265
|
|
275
266
|
# Stack all those parts
|
276
267
|
stack = []
|
@@ -280,25 +271,53 @@ module BmcDaemonLib
|
|
280
271
|
text = stack.join('-')
|
281
272
|
|
282
273
|
# Return a composite appname
|
283
|
-
conf[:app_name] = "#{text}; #{text}-#{@
|
274
|
+
conf[:app_name] = "#{text}; #{text}-#{@app_host}"
|
284
275
|
end
|
285
276
|
|
286
|
-
def self.
|
287
|
-
|
277
|
+
def self.reload
|
278
|
+
files=[]
|
279
|
+
|
280
|
+
# Load defaults
|
281
|
+
add_config(files, self.generate_config_defaults)
|
282
|
+
|
283
|
+
# Load etc config
|
284
|
+
add_config(files, self.generate_config_etc)
|
285
|
+
|
286
|
+
# Load app config
|
287
|
+
add_config(files, @app_config)
|
288
|
+
|
289
|
+
# Reload config
|
290
|
+
# puts "Conf.reload: loading files: #{files.inspect}"
|
291
|
+
log :conf, "reloading from files: #{files.inspect}"
|
292
|
+
load files: files, namespaces: { environment: @app_env }
|
293
|
+
|
294
|
+
# Try to access any key to force parsing of the files
|
295
|
+
self[:test35547647654856865436346453754746588586799078079876543245678654324567865432]
|
296
|
+
|
297
|
+
rescue Psych::SyntaxError => e
|
298
|
+
fail ConfigParseError, e.message
|
299
|
+
rescue StandardError => e
|
300
|
+
fail ConfigOtherError, "#{e.message} \n #{e.backtrace.to_yaml}"
|
301
|
+
|
302
|
+
else
|
303
|
+
return to_hash
|
288
304
|
end
|
289
305
|
|
290
|
-
def self.add_config path
|
291
|
-
#
|
292
|
-
return unless path
|
306
|
+
def self.add_config files, path
|
307
|
+
# Should be not empty/nil
|
308
|
+
return unless path
|
309
|
+
|
310
|
+
# Should be readable
|
311
|
+
return unless File.readable?(path)
|
293
312
|
|
294
313
|
# Check if Chamber's behaviour may cause problems with hyphens
|
295
314
|
basename = File.basename(path)
|
296
|
-
if
|
315
|
+
if basename.include?'-'
|
297
316
|
log :conf, "WARNING: files with dashes may cause unexpected behaviour with Chamber (#{basename})"
|
298
317
|
end
|
299
318
|
|
300
|
-
#
|
301
|
-
|
319
|
+
# Add it
|
320
|
+
files << File.expand_path(path)
|
302
321
|
end
|
303
322
|
|
304
323
|
def self.logfile_path pipe
|
@@ -320,9 +339,17 @@ module BmcDaemonLib
|
|
320
339
|
|
321
340
|
private
|
322
341
|
|
323
|
-
|
324
|
-
|
325
|
-
|
342
|
+
# Check every argument for value presence
|
343
|
+
def self.check_presence_of *args
|
344
|
+
# puts "check_presence_of #{args.inspect}"
|
345
|
+
args.each do |arg|
|
346
|
+
# OK if it's not empty
|
347
|
+
# puts "- [#{arg}]"
|
348
|
+
next unless arg.to_s.empty?
|
349
|
+
|
350
|
+
# Otherise, we just exit
|
351
|
+
log :conf, "FAILED: object Conf has not been initialized correctly yet"
|
352
|
+
exit 200
|
326
353
|
end
|
327
354
|
end
|
328
355
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bmc-daemon-lib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruno MEDICI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-12-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 3
|
75
|
+
version: '3'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 3
|
82
|
+
version: '3'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: chamber
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
134
|
version: '0'
|
135
135
|
requirements: []
|
136
136
|
rubyforge_project:
|
137
|
-
rubygems_version: 2.
|
137
|
+
rubygems_version: 2.7.3
|
138
138
|
signing_key:
|
139
139
|
specification_version: 4
|
140
140
|
summary: 'Shared utilities to build a daemon: logger, configuration, helpers'
|