pantheios-ruby 0.9.6
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 +7 -0
- data/lib/pantheios.rb +39 -0
- data/lib/pantheios/api.rb +275 -0
- data/lib/pantheios/application_layer.rb +20 -0
- data/lib/pantheios/application_layer/param_name_list.rb +13 -0
- data/lib/pantheios/application_layer/stock_severity_levels.rb +146 -0
- data/lib/pantheios/core.rb +446 -0
- data/lib/pantheios/globals.rb +109 -0
- data/lib/pantheios/services/simple_console_service.rb +20 -0
- data/lib/pantheios/util.rb +5 -0
- data/lib/pantheios/util/process_util.rb +22 -0
- data/lib/pantheios/util/thread_util.rb +83 -0
- data/lib/pantheios/util/version_util.rb +44 -0
- data/lib/pantheios/version.rb +69 -0
- data/test/unit/application_layer/tc_param_name_list.rb +35 -0
- data/test/unit/application_layer/tc_stock_severity_levels.rb +103 -0
- data/test/unit/application_layer/ts_all.rb +12 -0
- data/test/unit/ts_all.rb +12 -0
- data/test/unit/util/tc_thread_util.rb +100 -0
- data/test/unit/util/tc_version_util.rb +80 -0
- data/test/unit/util/ts_all.rb +12 -0
- metadata +85 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 35032757734802235a87eb0d7ce2e6d4830a906f
|
4
|
+
data.tar.gz: 14f80938e0d943a1921449cb29025757f6e839a1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fbb767e3cea06e7612c37be433e675af34be2cad80880cb79d87857f3e88acab4f6f2db7c0e0cc88e800d7b499ffb17000bea2a5388c08a1db7da93a31ca88a7
|
7
|
+
data.tar.gz: 6019963f5c8a9e299e181f854a1190fe504d782b8b16f3d96d7ae4acf4a97617d4615b4b1939ea2362d575c6b6f2bc45eb45a491de5af00b9a9c6610bc4fd44b
|
data/lib/pantheios.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
# The main module for Pantheios
|
3
|
+
#
|
4
|
+
# Pantheios is both a namespace module and an inclusion module. When
|
5
|
+
# included, it results in the automatic inclusion of the inclusion modules
|
6
|
+
# +Pantheios::API+, +Pantheios::ApplicationLayer+, and +Pantheios::Util+ (as
|
7
|
+
# well as certain sub modules of +Pantheios::Util+; see +Pantheios::Util+
|
8
|
+
# for details), unless the global symbol
|
9
|
+
# +::Pantheios::Globals.HAS_CASCADED_INCLUDES+ is truey
|
10
|
+
module Pantheios
|
11
|
+
end # module Pantheios
|
12
|
+
|
13
|
+
require 'pantheios/globals'
|
14
|
+
|
15
|
+
require 'pantheios/api'
|
16
|
+
require 'pantheios/application_layer'
|
17
|
+
require 'pantheios/util'
|
18
|
+
require 'pantheios/version'
|
19
|
+
|
20
|
+
module Pantheios
|
21
|
+
|
22
|
+
def self.included receiver
|
23
|
+
|
24
|
+
if ::Pantheios::Globals.HAS_CASCADED_INCLUDES
|
25
|
+
|
26
|
+
receiver.class_eval do
|
27
|
+
|
28
|
+
include ::Pantheios::API
|
29
|
+
include ::Pantheios::ApplicationLayer
|
30
|
+
include ::Pantheios::Util
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
::Pantheios::Core.register_include self, receiver
|
35
|
+
end
|
36
|
+
|
37
|
+
end # module Pantheios
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,275 @@
|
|
1
|
+
|
2
|
+
# ######################################################################## #
|
3
|
+
# File: lib/pantheios/api.rb
|
4
|
+
#
|
5
|
+
# Purpose: The Pantheios.Ruby API (::Pantheios::API)
|
6
|
+
#
|
7
|
+
# Created: 2nd April 2011
|
8
|
+
# Updated: 24th December 2017
|
9
|
+
#
|
10
|
+
# Home: http://github.com/synesissoftware/Pantheios-Ruby
|
11
|
+
#
|
12
|
+
# Author: Matthew Wilson
|
13
|
+
#
|
14
|
+
# Copyright (c) 2011-2017, Matthew Wilson and Synesis Software
|
15
|
+
# All rights reserved.
|
16
|
+
#
|
17
|
+
# Redistribution and use in source and binary forms, with or without
|
18
|
+
# modification, are permitted provided that the following conditions are
|
19
|
+
# met:
|
20
|
+
#
|
21
|
+
# * Redistributions of source code must retain the above copyright
|
22
|
+
# notice, this list of conditions and the following disclaimer.
|
23
|
+
#
|
24
|
+
# * Redistributions in binary form must reproduce the above copyright
|
25
|
+
# notice, this list of conditions and the following disclaimer in the
|
26
|
+
# documentation and/or other materials provided with the distribution.
|
27
|
+
#
|
28
|
+
# * Neither the names of the copyright holder nor the names of its
|
29
|
+
# contributors may be used to endorse or promote products derived from
|
30
|
+
# this software without specific prior written permission.
|
31
|
+
#
|
32
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
33
|
+
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
34
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
35
|
+
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
36
|
+
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
37
|
+
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
38
|
+
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
39
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
40
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
41
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
42
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
43
|
+
#
|
44
|
+
# ######################################################################## #
|
45
|
+
|
46
|
+
|
47
|
+
=begin
|
48
|
+
=end
|
49
|
+
|
50
|
+
|
51
|
+
require 'pantheios/application_layer/param_name_list'
|
52
|
+
require 'pantheios/application_layer/stock_severity_levels'
|
53
|
+
require 'pantheios/util/version_util'
|
54
|
+
|
55
|
+
require 'pantheios/core'
|
56
|
+
|
57
|
+
|
58
|
+
module Pantheios
|
59
|
+
# This inclusion module specifies the main logging API methods, including:
|
60
|
+
#
|
61
|
+
# - log
|
62
|
+
# - log_v
|
63
|
+
# - trace
|
64
|
+
# - trace_v
|
65
|
+
#
|
66
|
+
# as well as those that may be overridden:
|
67
|
+
#
|
68
|
+
# - severity_logged?
|
69
|
+
# - tracing?
|
70
|
+
#
|
71
|
+
# - prefix_elements
|
72
|
+
# - process_id
|
73
|
+
# - program_name
|
74
|
+
# - severity_string severity
|
75
|
+
# - thread_id
|
76
|
+
# - timestamp t
|
77
|
+
module API
|
78
|
+
|
79
|
+
# Logs an arbitrary set of parameters at the given severity level
|
80
|
+
def log severity, *args
|
81
|
+
|
82
|
+
return nil unless severity_logged? severity
|
83
|
+
|
84
|
+
log_or_trace 1, severity, args
|
85
|
+
end
|
86
|
+
|
87
|
+
# Logs an array of parameters at the given severity level
|
88
|
+
def log_v severity, argv
|
89
|
+
|
90
|
+
return nil unless severity_logged? severity
|
91
|
+
|
92
|
+
log_or_trace 1, severity, argv
|
93
|
+
end
|
94
|
+
|
95
|
+
# Logs an arbitrary set of parameters at the Trace (:trace) level
|
96
|
+
def trace *args
|
97
|
+
|
98
|
+
return nil unless tracing?
|
99
|
+
|
100
|
+
::Pantheios::Core.trace_v_prep self, 1, args
|
101
|
+
end
|
102
|
+
|
103
|
+
# Logs an array of parameters at the Trace (:trace) level
|
104
|
+
def trace_v argv
|
105
|
+
|
106
|
+
return nil unless tracing?
|
107
|
+
|
108
|
+
::Pantheios::Core.trace_v_prep self, 1, argv
|
109
|
+
end
|
110
|
+
|
111
|
+
if Util::VersionUtil.version_compare(RUBY_VERSION, [ 2, 1 ]) >= 0
|
112
|
+
|
113
|
+
def trace_blv b, lvars
|
114
|
+
|
115
|
+
return nil unless tracing?
|
116
|
+
|
117
|
+
::Pantheios::Core.trace_v_impl self, 1, ApplicationLayer::ParamNameList[*lvars], :trace, lvars.map { |lv| b.local_variable_get(lv) }
|
118
|
+
end
|
119
|
+
end # RUBY_VERSION
|
120
|
+
|
121
|
+
if Util::VersionUtil.version_compare(RUBY_VERSION, [ 2, 2 ]) >= 0
|
122
|
+
|
123
|
+
def trace_b b
|
124
|
+
|
125
|
+
return nil unless tracing?
|
126
|
+
|
127
|
+
::Pantheios::Core.trace_v_impl self, 1, ApplicationLayer::ParamNameList[*b.local_variables], :trace, b.local_variables.map { |lv| b.local_variable_get(lv) }
|
128
|
+
end
|
129
|
+
end # RUBY_VERSION
|
130
|
+
|
131
|
+
|
132
|
+
# Determines whether a given severity is logged
|
133
|
+
#
|
134
|
+
# === Signature
|
135
|
+
#
|
136
|
+
# * *Parameters:*
|
137
|
+
# - +severity+:: The severity level, which should be a known log
|
138
|
+
# severity symbol or an integral equivalent
|
139
|
+
#
|
140
|
+
# * *Returns:*
|
141
|
+
# a +truey+ value if the severity should be logged; a +falsey+ value
|
142
|
+
# otherwise
|
143
|
+
def severity_logged? severity
|
144
|
+
|
145
|
+
::Pantheios::Core.severity_logged? severity
|
146
|
+
end
|
147
|
+
|
148
|
+
# Determines whether tracing (severity == :trace) is enabled. This is
|
149
|
+
# used in the trace methods (+trace+, +trace_v+, +trace_blv+, +trace_b+)
|
150
|
+
# and therefore it may be overridden independently of +severity_logged?+
|
151
|
+
def tracing?
|
152
|
+
|
153
|
+
severity_logged? :trace
|
154
|
+
end
|
155
|
+
|
156
|
+
|
157
|
+
|
158
|
+
# Defines the ordered list of log-statement elements
|
159
|
+
#
|
160
|
+
# === Elements
|
161
|
+
#
|
162
|
+
# Elements can be one of:
|
163
|
+
# - +:program_name+
|
164
|
+
# - +:process_id+
|
165
|
+
# - +:severity+
|
166
|
+
# - +:thread_id+
|
167
|
+
# - +:timestamp+
|
168
|
+
#
|
169
|
+
# This is called from +prefix+
|
170
|
+
def prefix_elements
|
171
|
+
|
172
|
+
[ :program_name, :thread_id, :timestamp, :severity ]
|
173
|
+
end
|
174
|
+
|
175
|
+
# Obtains the process id
|
176
|
+
#
|
177
|
+
# Unless overridden, returns the value provided by
|
178
|
+
# +::Pantheios::Core::process_id+
|
179
|
+
def process_id
|
180
|
+
|
181
|
+
::Pantheios::Core.process_id
|
182
|
+
end
|
183
|
+
|
184
|
+
# Obtains the program name
|
185
|
+
#
|
186
|
+
# Unless overridden, returns the value provided by
|
187
|
+
# +::Pantheios::Core::program_name+
|
188
|
+
def program_name
|
189
|
+
|
190
|
+
::Pantheios::Core.program_name
|
191
|
+
end
|
192
|
+
|
193
|
+
# Obtains the string corresponding to the severity
|
194
|
+
#
|
195
|
+
# Unless overridden, returns the value provided by
|
196
|
+
# +::Pantheios::Core::severity_string+
|
197
|
+
def severity_string severity
|
198
|
+
|
199
|
+
::Pantheios::Core.severity_string severity
|
200
|
+
end
|
201
|
+
|
202
|
+
# Obtains the thread id
|
203
|
+
#
|
204
|
+
# Unless overridden, returns the value provided by
|
205
|
+
# +::Pantheios::Core::thread_id+
|
206
|
+
def thread_id
|
207
|
+
|
208
|
+
::Pantheios::Core.thread_id
|
209
|
+
end
|
210
|
+
|
211
|
+
# Obtains a string-form of the timestamp
|
212
|
+
#
|
213
|
+
# Unless overridden, returns the value provided by
|
214
|
+
# +::Pantheios::Core::timestamp+
|
215
|
+
def timestamp t
|
216
|
+
|
217
|
+
::Pantheios::Core.timestamp t, nil
|
218
|
+
end
|
219
|
+
|
220
|
+
def prefix t, severity
|
221
|
+
|
222
|
+
prefix_elements.map do |el|
|
223
|
+
|
224
|
+
case el
|
225
|
+
when :program_name
|
226
|
+
|
227
|
+
program_name
|
228
|
+
when :process_id
|
229
|
+
|
230
|
+
process_id
|
231
|
+
when :severity
|
232
|
+
|
233
|
+
severity_string severity
|
234
|
+
when :thread_id
|
235
|
+
|
236
|
+
thread_id
|
237
|
+
when :timestamp
|
238
|
+
|
239
|
+
timestamp t
|
240
|
+
else
|
241
|
+
|
242
|
+
s = ::Symbol === el ? ":#{el}" : el.to_s
|
243
|
+
|
244
|
+
warn "ignoring unrecognised prefix_element '#{s}'"
|
245
|
+
|
246
|
+
nil
|
247
|
+
end
|
248
|
+
end.join(', ') # TODO: need to do more intelligent joining
|
249
|
+
end
|
250
|
+
|
251
|
+
|
252
|
+
def self.included receiver
|
253
|
+
|
254
|
+
receiver.extend self
|
255
|
+
|
256
|
+
::Pantheios::Core.register_include self, receiver
|
257
|
+
end
|
258
|
+
|
259
|
+
private
|
260
|
+
|
261
|
+
# Private implementation method that should not need to be overridden
|
262
|
+
def log_or_trace call_depth, severity, argv
|
263
|
+
|
264
|
+
if :trace == severity
|
265
|
+
|
266
|
+
return ::Pantheios::Core.trace_v_impl self, 1 + call_depth, nil, severity, argv
|
267
|
+
end
|
268
|
+
|
269
|
+
::Pantheios::Core.log_raw self, severity, argv.join
|
270
|
+
end
|
271
|
+
|
272
|
+
end # module API
|
273
|
+
end # module Pantheios
|
274
|
+
|
275
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
require 'pantheios/application_layer/param_name_list'
|
3
|
+
require 'pantheios/application_layer/stock_severity_levels'
|
4
|
+
|
5
|
+
require 'pantheios/core'
|
6
|
+
|
7
|
+
module Pantheios
|
8
|
+
module ApplicationLayer
|
9
|
+
|
10
|
+
def self.included receiver
|
11
|
+
|
12
|
+
receiver.extend self
|
13
|
+
|
14
|
+
::Pantheios::Core.register_include self, receiver
|
15
|
+
end
|
16
|
+
|
17
|
+
end # module ApplicationLayer
|
18
|
+
end # module Pantheios
|
19
|
+
|
20
|
+
|
@@ -0,0 +1,146 @@
|
|
1
|
+
|
2
|
+
# ######################################################################## #
|
3
|
+
# File: lib/pantheios/application_layer/stock_severity_levels.rb
|
4
|
+
#
|
5
|
+
# Purpose: Definition of the
|
6
|
+
# Pantheios::ApplicationLayer::StockSeverityLevels include /
|
7
|
+
# namespace module
|
8
|
+
#
|
9
|
+
# Created: 2nd April 2011
|
10
|
+
# Updated: 6th January 2018
|
11
|
+
#
|
12
|
+
# Home: http://github.com/synesissoftware/Pantheios-Ruby
|
13
|
+
#
|
14
|
+
# Author: Matthew Wilson
|
15
|
+
#
|
16
|
+
# Copyright (c) 2011-2018, Matthew Wilson and Synesis Software
|
17
|
+
# All rights reserved.
|
18
|
+
#
|
19
|
+
# Redistribution and use in source and binary forms, with or without
|
20
|
+
# modification, are permitted provided that the following conditions are
|
21
|
+
# met:
|
22
|
+
#
|
23
|
+
# * Redistributions of source code must retain the above copyright
|
24
|
+
# notice, this list of conditions and the following disclaimer.
|
25
|
+
#
|
26
|
+
# * Redistributions in binary form must reproduce the above copyright
|
27
|
+
# notice, this list of conditions and the following disclaimer in the
|
28
|
+
# documentation and/or other materials provided with the distribution.
|
29
|
+
#
|
30
|
+
# * Neither the names of the copyright holder nor the names of its
|
31
|
+
# contributors may be used to endorse or promote products derived from
|
32
|
+
# this software without specific prior written permission.
|
33
|
+
#
|
34
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
35
|
+
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
36
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
37
|
+
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
38
|
+
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
39
|
+
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
40
|
+
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
41
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
42
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
43
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
44
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
45
|
+
#
|
46
|
+
# ######################################################################## #
|
47
|
+
|
48
|
+
|
49
|
+
=begin
|
50
|
+
=end
|
51
|
+
|
52
|
+
module Pantheios
|
53
|
+
module ApplicationLayer
|
54
|
+
|
55
|
+
module StockSeverityLevels
|
56
|
+
|
57
|
+
private
|
58
|
+
module Internal_
|
59
|
+
|
60
|
+
STOCK_SEVERITY_LEVELS_ = {
|
61
|
+
|
62
|
+
:violation => [ 1, 'Violation', [ :emergency ] ],
|
63
|
+
:alert => [ 2, 'Alert' ],
|
64
|
+
:critical => [ 3, 'Critical' ],
|
65
|
+
:failure => [ 4, 'Failure' ],
|
66
|
+
:warning => [ 5, 'Warning', [ :warn ] ],
|
67
|
+
:notice => [ 6, 'Notice' ],
|
68
|
+
:informational => [ 7, 'Informational', [ :info ] ],
|
69
|
+
:debug0 => [ 8, 'Debug-0' ],
|
70
|
+
:debug1 => [ 9, 'Debug-1' ],
|
71
|
+
:debug2 => [ 10, 'Debug-2' ],
|
72
|
+
:debug3 => [ 11, 'Debug-3' ],
|
73
|
+
:debug4 => [ 12, 'Debug-4' ],
|
74
|
+
:trace => [ 13, 'Trace' ],
|
75
|
+
}
|
76
|
+
|
77
|
+
def self.create_level_keys m
|
78
|
+
|
79
|
+
r = m.keys
|
80
|
+
|
81
|
+
m.each do |k, ar|
|
82
|
+
|
83
|
+
(ar[2] || []).each do |al|
|
84
|
+
|
85
|
+
r << al
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
r.uniq
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.create_level_value_map m
|
93
|
+
|
94
|
+
r = {}
|
95
|
+
|
96
|
+
m.each do |s, ar|
|
97
|
+
|
98
|
+
warn 'invalid start-up' unless ::Symbol === s
|
99
|
+
warn 'invalid start-up' unless ::Array === ar
|
100
|
+
|
101
|
+
([s] + (ar[2] || [])).each do |al|
|
102
|
+
|
103
|
+
r[al] = ar[0]
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
r
|
108
|
+
end
|
109
|
+
def self.create_level_string_map m
|
110
|
+
|
111
|
+
r = {}
|
112
|
+
|
113
|
+
m.each do |s, ar|
|
114
|
+
|
115
|
+
warn 'invalid start-up' unless ::Symbol === s
|
116
|
+
warn 'invalid start-up' unless ::Array === ar
|
117
|
+
|
118
|
+
([s] + (ar[2] || [])).each do |al|
|
119
|
+
|
120
|
+
r[al] = ar[1]
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
r
|
125
|
+
end
|
126
|
+
end
|
127
|
+
public
|
128
|
+
|
129
|
+
# Ordered list of stock severity levels, without any aliases
|
130
|
+
STOCK_SEVERITY_LEVELS_PRIME = Internal_::STOCK_SEVERITY_LEVELS_.keys
|
131
|
+
|
132
|
+
# Ordered list of stock severity levels, some of which may be aliases
|
133
|
+
STOCK_SEVERITY_LEVELS = Internal_.create_level_keys Internal_::STOCK_SEVERITY_LEVELS_
|
134
|
+
|
135
|
+
# Mapping of severity levels (and level aliases) to integral
|
136
|
+
# equivalent
|
137
|
+
STOCK_SEVERITY_LEVEL_VALUES = Internal_.create_level_value_map Internal_::STOCK_SEVERITY_LEVELS_
|
138
|
+
|
139
|
+
# Mapping of severity levels (and level aliases) to string
|
140
|
+
STOCK_SEVERITY_LEVEL_STRINGS = Internal_.create_level_string_map Internal_::STOCK_SEVERITY_LEVELS_
|
141
|
+
|
142
|
+
end # module StockSeverityLevels
|
143
|
+
|
144
|
+
end # module ApplicationLayer
|
145
|
+
end # module Pantheios
|
146
|
+
|