bmc-daemon-lib 0.3.18 → 0.4.0
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 +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +2 -2
- data/bmc-daemon-lib.gemspec +1 -1
- data/lib/bmc-daemon-lib/logger.rb +97 -0
- data/lib/bmc-daemon-lib/logger_formatter.rb +0 -4
- data/lib/bmc-daemon-lib/logger_helper.rb +31 -54
- data/lib/bmc-daemon-lib/logger_pool.rb +2 -2
- data/lib/bmc-daemon-lib/mq_consumer.rb +0 -2
- data/lib/bmc-daemon-lib/mq_endpoint.rb +0 -5
- data/lib/bmc-daemon-lib/worker_base.rb +3 -16
- data/lib/bmc-daemon-lib.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6003c5c0de9402b624030ffc916167fe5d220286
|
4
|
+
data.tar.gz: 98df2f514f440a1a8ef06915cfb0aaddbd172a7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c583268f6fb0e802a5ff8c4ea47ec8fa4ef34534cc14b92be74cda70bcc892cab263f35898d0efef32809a6694a891b18008142ede3d29fee09c470192ab994
|
7
|
+
data.tar.gz: 595ad7d343c8880c992e2b4701f079e841205ebe0ae792ecac836a8c5b368dd13501ed0ca508b8821298f9d4f5230654b0d198e0545943c7a035007303a53236
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bmc-daemon-lib (0.
|
4
|
+
bmc-daemon-lib (0.4.0)
|
5
5
|
chamber (~> 2.9)
|
6
6
|
|
7
7
|
GEM
|
@@ -12,7 +12,7 @@ GEM
|
|
12
12
|
thor (~> 0.19.1)
|
13
13
|
diff-lcs (1.2.5)
|
14
14
|
hashie (3.4.6)
|
15
|
-
rake (11.
|
15
|
+
rake (11.3.0)
|
16
16
|
rspec (3.5.0)
|
17
17
|
rspec-core (~> 3.5.0)
|
18
18
|
rspec-expectations (~> 3.5.0)
|
data/bmc-daemon-lib.gemspec
CHANGED
@@ -0,0 +1,97 @@
|
|
1
|
+
require "logger"
|
2
|
+
module BmcDaemonLib
|
3
|
+
class Logger < Logger
|
4
|
+
|
5
|
+
DEFAULT_FORMAT = {
|
6
|
+
# header: "%s ‡ %d\t%-8s %-12s ",
|
7
|
+
header: "%{time} %7{pid} %-6{severity} %-10{pipe} | %{context}",
|
8
|
+
# header: "%{time} %7{pid} %-6{severity} %-10{pipe}(-‡-)%{context}",
|
9
|
+
time: "%Y-%m-%d %H:%M:%S",
|
10
|
+
context: "[%s]",
|
11
|
+
text: "%s",
|
12
|
+
array: " ·%s",
|
13
|
+
hash: " ·%-15s %s",
|
14
|
+
trim: 400,
|
15
|
+
}
|
16
|
+
|
17
|
+
def initialize filename, rotation
|
18
|
+
# Initialize
|
19
|
+
super
|
20
|
+
@format = DEFAULT_FORMAT
|
21
|
+
|
22
|
+
# Import LOGGER_FORMAT if defined
|
23
|
+
if (defined?'LOGGER_FORMAT') && (LOGGER_FORMAT.is_a? Hash)
|
24
|
+
@format.merge! LOGGER_FORMAT
|
25
|
+
end
|
26
|
+
|
27
|
+
# Define formatter
|
28
|
+
self.formatter = proc do |severity, datetime, progname, messages|
|
29
|
+
formatter(severity, datetime, progname, messages)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def add severity, message, context = nil, details = nil
|
34
|
+
# Start from an empty messages list with the main message
|
35
|
+
messages = []
|
36
|
+
messages << sprintf(@format[:text], message) if message
|
37
|
+
|
38
|
+
# Add details from array
|
39
|
+
details.each do |line|
|
40
|
+
messages << sprintf(@format[:array], line)
|
41
|
+
end if details.is_a? Array
|
42
|
+
|
43
|
+
# Add details from hash
|
44
|
+
details.each do |key, value|
|
45
|
+
messages << sprintf(@format[:hash], key, value)
|
46
|
+
end if details.is_a? Hash
|
47
|
+
|
48
|
+
# Pass all that stuff to my parent
|
49
|
+
super severity, messages, context
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
def trimmed line
|
55
|
+
line.to_s.rstrip[0..@format[:trim].to_i].force_encoding(Encoding::UTF_8)
|
56
|
+
end
|
57
|
+
|
58
|
+
def formatter severity, datetime, context, messages
|
59
|
+
# Build header with time and context
|
60
|
+
header = @format[:header] % {
|
61
|
+
time: datetime.strftime(@format[:time]),
|
62
|
+
pid: Process.pid,
|
63
|
+
severity: severity,
|
64
|
+
pipe: self.progname,
|
65
|
+
context: build_context(context)
|
66
|
+
}
|
67
|
+
|
68
|
+
# If we have a plain message, we're done
|
69
|
+
return "#{header} #{trimmed(payload)}\n" unless messages.is_a?(Array)
|
70
|
+
|
71
|
+
# If we have a bunch of lines, prefix them and send them together
|
72
|
+
return messages.collect do |line|
|
73
|
+
"#{header} #{trimmed(line)}\n"
|
74
|
+
end.join
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
# Builds prefix from @format[:context] and values
|
80
|
+
def build_context values
|
81
|
+
# Skip if no format defined
|
82
|
+
return "[context is not a hash]" unless @format[:context].is_a? Hash
|
83
|
+
|
84
|
+
# Call the instance's method to get hash values
|
85
|
+
return "[log_context is not a hash]" unless values.is_a? Hash
|
86
|
+
|
87
|
+
# Build each context part
|
88
|
+
return @format[:context].collect do |key, format|
|
89
|
+
sprintf(format, values[key])
|
90
|
+
end.join
|
91
|
+
|
92
|
+
rescue KeyError, ArgumentError => ex
|
93
|
+
return "[context: #{ex.message}]"
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
@@ -2,77 +2,54 @@ require "logger"
|
|
2
2
|
|
3
3
|
module BmcDaemonLib
|
4
4
|
module LoggerHelper
|
5
|
+
# Use accessor to expose logger to Grape, who uses .logger
|
6
|
+
attr_accessor :logger
|
5
7
|
|
6
8
|
protected
|
7
9
|
|
8
|
-
def
|
9
|
-
|
10
|
+
def log_pipe pipe, caller = nil
|
11
|
+
@log_pipe = pipe
|
12
|
+
@logger = BmcDaemonLib::LoggerPool.instance.get pipe
|
13
|
+
@caller = caller
|
14
|
+
#Conf.log "log #{@log_pipe}", "log_to pipe: #{pipe} logger class: #{@logger.class}"
|
15
|
+
#return @logger
|
10
16
|
end
|
11
17
|
|
12
|
-
def
|
13
|
-
|
18
|
+
def log_context
|
19
|
+
{} # ['DEFAULT', self.class.name.split('::').last]
|
14
20
|
end
|
15
21
|
|
16
|
-
def
|
17
|
-
|
22
|
+
def log_info message, details = nil
|
23
|
+
logger.add Logger::INFO, message, get_full_context, details
|
18
24
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
def log severity, message, details = nil
|
25
|
-
fail "LoggerHelper.log: invalid logger" unless logger.respond_to? :add
|
26
|
-
|
27
|
-
messages = []
|
28
|
-
|
29
|
-
prefix = build_prefix
|
30
|
-
|
31
|
-
# Add main message
|
32
|
-
messages << sprintf(LOG_MESSAGE_TEXT, prefix, message) if message
|
33
|
-
|
34
|
-
# Add details from array
|
35
|
-
details.each do |line|
|
36
|
-
messages << sprintf(LOG_MESSAGE_ARRAY, prefix, line)
|
37
|
-
end if details.is_a? Array
|
38
|
-
|
39
|
-
# Add details from hash
|
40
|
-
details.each do |key, value|
|
41
|
-
messages << sprintf(LOG_MESSAGE_HASH, prefix, key, value)
|
42
|
-
end if details.is_a? Hash
|
43
|
-
|
44
|
-
# Return all that stuff
|
45
|
-
logger.add severity, messages
|
25
|
+
def log_error message, details = nil
|
26
|
+
logger.add Logger::ERROR, message, get_full_context, details
|
27
|
+
end
|
28
|
+
def log_debug message, details = nil
|
29
|
+
logger.add Logger::DEBUG, message, get_full_context, details
|
46
30
|
end
|
47
31
|
|
48
32
|
private
|
49
33
|
|
50
|
-
|
51
|
-
|
52
|
-
# Skip if no format defined
|
53
|
-
return unless defined?('LOG_PREFIX_FORMAT')
|
54
|
-
return unless LOG_PREFIX_FORMAT.is_a? String
|
55
|
-
|
56
|
-
# At start, values is an empty array
|
57
|
-
values = nil
|
34
|
+
def get_full_context
|
35
|
+
context = nil
|
58
36
|
|
59
|
-
#
|
60
|
-
if respond_to?(:
|
61
|
-
values = log_prefix
|
62
|
-
end
|
37
|
+
# Grab the classe's context
|
38
|
+
context = log_context() if self.respond_to?(:log_context)
|
63
39
|
|
64
|
-
#
|
65
|
-
|
40
|
+
# Initialize an empty context, if log_context returned something else, or it the method was not exposed
|
41
|
+
context = {} unless context.is_a? Hash
|
66
42
|
|
67
|
-
#
|
68
|
-
|
43
|
+
# Who is the caller? Guess it from caller's class name if not provided
|
44
|
+
context[:caller] ||= self.class.name.to_s.split('::').last
|
69
45
|
|
70
|
-
#
|
71
|
-
return
|
72
|
-
|
73
|
-
rescue ArgumentError => ex
|
74
|
-
return "(LOG_PREFIX_FORMAT has an invalid format)"
|
46
|
+
# Return the whole context
|
47
|
+
return context
|
75
48
|
end
|
76
49
|
|
50
|
+
# alias info log_info
|
51
|
+
# alias error log_error
|
52
|
+
# alias debug log_debug
|
53
|
+
|
77
54
|
end
|
78
55
|
end
|
@@ -21,11 +21,11 @@ module BmcDaemonLib
|
|
21
21
|
filename = Conf.logfile(pipe)
|
22
22
|
|
23
23
|
# Create the logger and return it
|
24
|
-
logger = Logger.new(filename, LOG_ROTATION) #, 10, 1024000)
|
24
|
+
logger = BmcDaemonLib::Logger.new(filename, LOG_ROTATION) #, 10, 1024000)
|
25
25
|
logger.progname = pipe.to_s.downcase
|
26
|
-
logger.formatter = LoggerFormatter
|
27
26
|
|
28
27
|
# Finally return this logger
|
28
|
+
# FIXME logger.datetime_format
|
29
29
|
logger
|
30
30
|
|
31
31
|
rescue Errno::EACCES
|
@@ -11,14 +11,9 @@ module BmcDaemonLib
|
|
11
11
|
|
12
12
|
class MqEndpoint
|
13
13
|
include LoggerHelper
|
14
|
-
attr_reader :logger
|
15
14
|
|
16
15
|
protected
|
17
16
|
|
18
|
-
def log_prefix
|
19
|
-
self.class.name.split('::').last
|
20
|
-
end
|
21
|
-
|
22
17
|
def log_message msg_way, msg_topic, msg_key, msg_body = [], msg_attrs = {}
|
23
18
|
# Message header
|
24
19
|
log_info sprintf("%4s %-20s %s", msg_way, msg_topic, msg_key)
|
@@ -3,12 +3,12 @@ module BmcDaemonLib
|
|
3
3
|
include LoggerHelper
|
4
4
|
|
5
5
|
# Class options
|
6
|
-
attr_reader :logger
|
7
6
|
attr_reader :pool
|
8
7
|
attr_reader :wid
|
9
8
|
|
10
9
|
def initialize wid, pool = nil
|
11
10
|
# Logger
|
11
|
+
# FIXME log_pipe
|
12
12
|
@logger = LoggerPool.instance.get :workers
|
13
13
|
@log_worker_status_changes = true
|
14
14
|
|
@@ -16,8 +16,8 @@ module BmcDaemonLib
|
|
16
16
|
@config = {}
|
17
17
|
|
18
18
|
# Set thread context
|
19
|
-
Thread.current.thread_variable_set :pool, (@pool = pool)
|
20
19
|
Thread.current.thread_variable_set :wid, (@wid = wid)
|
20
|
+
Thread.current.thread_variable_set :pool, (@pool = pool)
|
21
21
|
Thread.current.thread_variable_set :started_at, Time.now
|
22
22
|
worker_status WORKER_STATUS_STARTING
|
23
23
|
|
@@ -28,7 +28,7 @@ module BmcDaemonLib
|
|
28
28
|
# We're ok, let's start out loop
|
29
29
|
start_loop
|
30
30
|
end
|
31
|
-
|
31
|
+
end
|
32
32
|
|
33
33
|
protected
|
34
34
|
|
@@ -42,14 +42,6 @@ module BmcDaemonLib
|
|
42
42
|
def worker_config
|
43
43
|
end
|
44
44
|
|
45
|
-
def log_prefix
|
46
|
-
[
|
47
|
-
Thread.current.thread_variable_get(:wid),
|
48
|
-
Thread.current.thread_variable_get(:jid),
|
49
|
-
nil
|
50
|
-
]
|
51
|
-
end
|
52
|
-
|
53
45
|
def start_loop
|
54
46
|
log_info "start_loop starting", @config
|
55
47
|
loop do
|
@@ -83,11 +75,6 @@ module BmcDaemonLib
|
|
83
75
|
# end
|
84
76
|
end
|
85
77
|
|
86
|
-
def worker_jid jid
|
87
|
-
Thread.current.thread_variable_set :jid, jid
|
88
|
-
Thread.current.thread_variable_set :updated_at, Time.now
|
89
|
-
end
|
90
|
-
|
91
78
|
def config_section key
|
92
79
|
# Debugging
|
93
80
|
@log_worker_status_changes = @debug
|
data/lib/bmc-daemon-lib.rb
CHANGED
@@ -7,7 +7,7 @@ require "time"
|
|
7
7
|
|
8
8
|
# Project's libs
|
9
9
|
require_relative "bmc-daemon-lib/conf"
|
10
|
-
require_relative "bmc-daemon-lib/
|
10
|
+
require_relative "bmc-daemon-lib/logger"
|
11
11
|
require_relative "bmc-daemon-lib/logger_helper"
|
12
12
|
require_relative "bmc-daemon-lib/logger_pool"
|
13
13
|
require_relative "bmc-daemon-lib/worker_base"
|
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.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruno MEDICI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- bmc-daemon-lib.gemspec
|
83
83
|
- lib/bmc-daemon-lib.rb
|
84
84
|
- lib/bmc-daemon-lib/conf.rb
|
85
|
+
- lib/bmc-daemon-lib/logger.rb
|
85
86
|
- lib/bmc-daemon-lib/logger_formatter.rb
|
86
87
|
- lib/bmc-daemon-lib/logger_helper.rb
|
87
88
|
- lib/bmc-daemon-lib/logger_pool.rb
|