trace-util-adv 0.2.3 → 0.2.4
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.
- data/Advanced TraceUtils tutorial.pdf +0 -0
- data/CHANGELOG +4 -8
- data/{lib/TODO.txt → TODO.txt} +8 -0
- data/VERSION +1 -1
- data/lib/action_handler/action_handler.rb +40 -0
- data/lib/{action_handler.rb → action_handler/action_handler_registration.rb} +3 -41
- data/lib/appenders/appender.rb +1 -13
- data/lib/appenders/appender_mappings.rb +13 -0
- data/lib/appenders/base_appender.rb +2 -11
- data/lib/appenders/file_appender.rb +21 -13
- data/lib/appenders/include.rb +4 -0
- data/lib/appenders/types/README-NOTE.txt +2 -0
- data/lib/appenders/{html_appender.rb → types/html_appender.rb} +4 -20
- data/lib/appenders/{logger_appender.rb → types/logger_appender.rb} +0 -0
- data/lib/appenders/{stream_appender.rb → types/stream_appender.rb} +0 -0
- data/lib/appenders/{template_log_appender.rb → types/template_log_appender.rb} +0 -0
- data/lib/appenders/{xml_appender.rb → types/xml_appender.rb} +1 -1
- data/lib/extensions/array_extensions.rb +42 -0
- data/lib/extensions/hash_extensions.rb +181 -0
- data/lib/extensions/hash_rule_extensions.rb +50 -0
- data/lib/extensions/include.rb +1 -0
- data/lib/extensions/nilclass_extensions.rb +10 -0
- data/lib/extensions/object_extensions.rb +19 -0
- data/lib/extensions/string_extensions.rb +35 -0
- data/lib/extensions/symbol_extensions.rb +30 -0
- data/lib/filters/composite/composite_class_filter.rb +25 -0
- data/lib/filters/composite/composite_module_filter.rb +53 -0
- data/lib/filters/executor/filter_exec.rb +74 -0
- data/lib/filters/filter.rb +43 -0
- data/lib/filters/filter_factory.rb +1 -1
- data/lib/filters/filter_mappings.rb +36 -0
- data/lib/filters/{tracing_filter.rb → filter_registration.rb} +6 -49
- data/lib/filters/filter_use.rb +10 -0
- data/lib/filters/include.rb +8 -0
- data/lib/filters/list/README-NOTE.txt +1 -0
- data/lib/filters/list/list_instance_var_filter.rb +27 -0
- data/lib/filters/{message_filters.rb → msg_context/message_context_filters.rb} +3 -12
- data/lib/filters/simple/argument_filter.rb +24 -0
- data/lib/filters/simple/class_filter.rb +15 -0
- data/lib/filters/simple/instance_var_filter.rb +25 -0
- data/lib/filters/simple/method_filter.rb +17 -0
- data/lib/filters/simple/module_filter.rb +14 -0
- data/lib/{templates/trace_output_handler.rb → output_handler/output_handler.rb} +0 -0
- data/lib/rules/rule_mappings.rb +10 -0
- data/lib/{rule_match.rb → rules/rule_match.rb} +5 -3
- data/lib/targets/README-NOTE.txt +2 -0
- data/lib/targets/file_target.rb +65 -0
- data/lib/targets/stream_target.rb +9 -0
- data/lib/targets/string_target.rb +9 -0
- data/lib/templates/base_template.rb +3 -2
- data/lib/templates/html_template.rb +1 -2
- data/lib/templates/include.rb +2 -0
- data/lib/templates/string_template.rb +24 -25
- data/lib/templates/template_mappings.rb +10 -0
- data/lib/templates/xml_template.rb +28 -29
- data/lib/trace-util-adv.rb +24 -4
- data/lib/{trace_calls.rb → trace_calls/trace_calls.rb} +0 -0
- data/lib/trace_calls/trace_configuration.rb +29 -0
- data/lib/{trace_ext.rb → trace_calls/trace_ext.rb} +10 -9
- data/test/{test_action_handler.rb → action_handler/test_action_handler.rb} +1 -5
- data/test/action_handler/test_create_action_handler.rb +31 -0
- data/test/appenders/test_appender_filters.rb +0 -0
- data/test/appenders/test_appender_tracers.rb +56 -0
- data/test/appenders/test_create_appender.rb +49 -0
- data/test/{test_html_appender.rb → appenders/test_html_appender.rb} +3 -7
- data/test/appenders/test_stream_appender.rb +41 -0
- data/test/appenders/test_template_log_appender.rb +18 -0
- data/test/{test_xml_appender.rb → appenders/test_xml_appender.rb} +0 -0
- data/test/extensions/test_filters_creation.rb +36 -0
- data/test/extensions/test_hash_extensions.rb +208 -0
- data/test/extensions/test_hash_filter_extensions.rb +65 -0
- data/test/extensions/test_set_context.rb +94 -0
- data/test/extensions/test_string_extensions.rb +55 -0
- data/test/extensions/test_symbol_extensions.rb +35 -0
- data/test/{test_filters_chain.rb → filters/chain/test_filters_chain.rb} +2 -1
- data/test/filters/composite/test_composite_class_filter.rb +78 -0
- data/test/filters/composite/test_composite_module_filter.rb +82 -0
- data/test/filters/composite/test_composite_var_filter.rb +103 -0
- data/test/filters/executor/test_filter_exec.rb +80 -0
- data/test/filters/msg_context/test_custom_filters.rb +54 -0
- data/test/filters/simple/test_base_filter.rb +56 -0
- data/test/filters/simple/test_class_filter.rb +75 -0
- data/test/filters/simple/test_instancevar_filter.rb +82 -0
- data/test/filters/simple/test_method_filter.rb +77 -0
- data/test/filters/simple/test_module_filter.rb +63 -0
- data/test/samples/include.rb +1 -0
- data/test/samples/sample_classes.rb +23 -0
- data/test/samples/sample_composite_filters.rb +50 -0
- data/test/samples/sample_filters.rb +58 -0
- data/test/sandbox/matcher.rb +7 -0
- data/test/sandbox/sandbox.rb +25 -0
- data/test/{test_xml_gen.rb → sandbox/test_xml_gen.rb} +0 -0
- data/test/trace_calls/test_configure_.rb +70 -0
- data/test/trace_calls/tracing/test_html_tracing.rb +20 -0
- data/test/trace_calls/tracing/test_logger_tracing.rb +18 -0
- data/test/trace_calls/tracing/test_stream_tracing.rb +17 -0
- data/test/trace_calls/tracing/test_teamplate_log_tracing.rb +18 -0
- data/test/trace_calls/tracing/test_xml_tracing.rb +18 -0
- data/test/tracers/test_create_tracers.rb +46 -0
- data/test/tracers/test_exec_tracers.rb +11 -0
- data/trace-util-adv.gemspec +91 -32
- metadata +91 -32
- data/lib/core_extensions.rb +0 -101
- data/lib/filters/base_filters.rb +0 -178
- data/lib/filters/composite_filters.rb +0 -71
- data/lib/output_templates.rb +0 -5
- data/lib/sample_filters.rb +0 -97
- data/lib/trace_appenders.rb +0 -9
- data/lib/trace_filters.rb +0 -4
- data/test/test_appender.rb +0 -29
- data/test/test_file_appender.rb +0 -32
- data/test/test_filters.rb +0 -112
- data/test/test_filters_create.rb +0 -28
- data/test/test_special_filters.rb +0 -78
|
Binary file
|
data/CHANGELOG
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
13-Nov-2009
|
|
2
2
|
==========
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* improved README documentation
|
|
8
|
-
|
|
9
|
-
NOTE: Framework has become overly complex - simplify, and refactor next week!
|
|
3
|
+
* Test cases for basic and composite filters all pass
|
|
4
|
+
* Created new filter: ArgumentsFilter
|
|
5
|
+
* Major refactoring!
|
data/{lib/TODO.txt → TODO.txt}
RENAMED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
TODO:
|
|
2
|
+
----
|
|
3
|
+
- Unit tests for appenders. action_handler
|
|
4
|
+
- require txt_file_mutator
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
Add time to context for before- and after handle calls. Enable tracing time output
|
|
8
|
+
Allow for comparing time it takes to complete method and act upon it!
|
|
9
|
+
Store method with come context on stack, to allow look up to compare with previous calls. Perhaps find average time it took to call this method etc.
|
|
2
10
|
|
|
3
11
|
Support Intrusive trace statements
|
|
4
12
|
----------------------------------
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.2.
|
|
1
|
+
0.2.4
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
Dir.glob(File.join(File.dirname(__FILE__), '**/*.rb')).each {|f| require f }
|
|
2
|
+
|
|
3
|
+
module Tracing
|
|
4
|
+
class ActionHandler
|
|
5
|
+
# supports:
|
|
6
|
+
# - Filter registration and execution
|
|
7
|
+
# - Appender registration
|
|
8
|
+
include Tracing::FilterUse
|
|
9
|
+
include Tracing::Appender::Registration
|
|
10
|
+
|
|
11
|
+
# register filters and appenders
|
|
12
|
+
def initialize(init_options)
|
|
13
|
+
register_filters(init_options.filters)
|
|
14
|
+
register_appenders(init_options.appenders)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# action for tracelogs that pass the filters
|
|
18
|
+
# by default send to all appenders for further processing!
|
|
19
|
+
def handle_allow(txt, context)
|
|
20
|
+
appenders.each do |appender|
|
|
21
|
+
appender.handle(txt, context)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# action for tracelogs that DO NOT pass the filters
|
|
26
|
+
def handle_not_allow(txt, context)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# handle tracelogs by applying filters and action handler methods
|
|
30
|
+
def handle(txt, context)
|
|
31
|
+
if filters_allow?(txt, context)
|
|
32
|
+
# puts "handle_allow: " + context[:method_name]
|
|
33
|
+
handle_allow(txt, context)
|
|
34
|
+
else
|
|
35
|
+
# puts "handle_not_allow: " + context[:method_name]
|
|
36
|
+
handle_not_allow(txt, context)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end # class
|
|
40
|
+
end # module
|
|
@@ -1,14 +1,5 @@
|
|
|
1
|
-
require 'filters/tracing_filter'
|
|
2
|
-
require 'trace_appenders'
|
|
3
|
-
|
|
4
1
|
module Tracing
|
|
5
2
|
class ActionHandler
|
|
6
|
-
include Tracing::Filter::Registration
|
|
7
|
-
include Tracing::Filter::Exec
|
|
8
|
-
include Tracing::Appender::Registration
|
|
9
|
-
|
|
10
|
-
attr_accessor :filters
|
|
11
|
-
|
|
12
3
|
# enable registration of action handlers
|
|
13
4
|
module Registration
|
|
14
5
|
attr_accessor :action_handlers
|
|
@@ -44,7 +35,7 @@ module Tracing
|
|
|
44
35
|
reg_action_handlers
|
|
45
36
|
end
|
|
46
37
|
end
|
|
47
|
-
|
|
38
|
+
|
|
48
39
|
def create_action_handler(options)
|
|
49
40
|
if options.kind_of? Tracing::ActionHandler
|
|
50
41
|
options
|
|
@@ -66,34 +57,5 @@ module Tracing
|
|
|
66
57
|
@action_handlers << new_action_handlers
|
|
67
58
|
end
|
|
68
59
|
end
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
def initialize(init_options)
|
|
72
|
-
register_filters(init_options[:filters])
|
|
73
|
-
register_appenders(init_options[:appenders] || init_options)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
# action for tracelogs that pass the filters
|
|
77
|
-
# by default send to all appenders for further processing!
|
|
78
|
-
def handle_allow(txt, context)
|
|
79
|
-
appenders.each do |appender|
|
|
80
|
-
appender.handle(txt, context)
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# action for tracelogs that DO NOT pass the filters
|
|
85
|
-
def handle_not_allow(txt, context)
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# handle tracelogs by applying filters and action handler methods
|
|
89
|
-
def handle(txt, context)
|
|
90
|
-
if filters_allow?(txt, context)
|
|
91
|
-
# puts "handle_allow: " + context[:method_name]
|
|
92
|
-
handle_allow(txt, context)
|
|
93
|
-
else
|
|
94
|
-
# puts "handle_not_allow: " + context[:method_name]
|
|
95
|
-
handle_not_allow(txt, context)
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end # class
|
|
99
|
-
end # module
|
|
60
|
+
end
|
|
61
|
+
end
|
data/lib/appenders/appender.rb
CHANGED
|
@@ -6,21 +6,9 @@ module Tracing
|
|
|
6
6
|
# array of Appender instances
|
|
7
7
|
attr_accessor :appender_mappings
|
|
8
8
|
|
|
9
|
-
# used to help construct/register Appender instances using convenience symbols
|
|
10
|
-
def default_appender_mappings
|
|
11
|
-
{
|
|
12
|
-
:logger => Tracing::LoggerAppender,
|
|
13
|
-
:stream => Tracing::StreamAppender,
|
|
14
|
-
:xml => Tracing::XmlAppender,
|
|
15
|
-
:html => Tracing::HtmlAppender,
|
|
16
|
-
:template => Tracing::TemplateLogAppender,
|
|
17
|
-
:default => Tracing::StreamAppender
|
|
18
|
-
}
|
|
19
|
-
end
|
|
20
|
-
|
|
21
9
|
def register_default_mappings
|
|
22
10
|
@appender_mappings ||= {}
|
|
23
|
-
@appender_mappings.merge!(default_appender_mappings)
|
|
11
|
+
@appender_mappings.merge!(Mappings.default_appender_mappings)
|
|
24
12
|
end
|
|
25
13
|
|
|
26
14
|
def register_appender_mappings(_appender_mappings)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module AppenderMappings
|
|
2
|
+
# used to help construct/register Appender instances using convenience symbols
|
|
3
|
+
def self.defaults
|
|
4
|
+
{
|
|
5
|
+
:logger => Tracing::LoggerAppender,
|
|
6
|
+
:stream => Tracing::StreamAppender,
|
|
7
|
+
:xml => Tracing::XmlAppender,
|
|
8
|
+
:html => Tracing::HtmlAppender,
|
|
9
|
+
:template => Tracing::TemplateLogAppender,
|
|
10
|
+
:default => Tracing::StreamAppender
|
|
11
|
+
}
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
module Tracing
|
|
2
2
|
# base appender (abstract)
|
|
3
3
|
class BaseAppender
|
|
4
|
-
include Tracing::
|
|
5
|
-
include Tracing::Filter::Exec
|
|
4
|
+
include Tracing::FilterUse
|
|
6
5
|
|
|
7
6
|
attr_accessor :options
|
|
8
7
|
attr_reader :tracer
|
|
@@ -10,17 +9,9 @@ module Tracing
|
|
|
10
9
|
class << self
|
|
11
10
|
attr_accessor :tracers
|
|
12
11
|
|
|
13
|
-
def default_tracers
|
|
14
|
-
{
|
|
15
|
-
:string => Tracing::OutputTemplate::StringTrace,
|
|
16
|
-
:xml => Tracing::OutputTemplate::XmlTrace,
|
|
17
|
-
:html => Tracing::OutputTemplate::HtmlTrace,
|
|
18
|
-
:default => Tracing::OutputTemplate::StringTrace
|
|
19
|
-
}
|
|
20
|
-
end
|
|
21
12
|
|
|
22
13
|
def register_tracers(tracers = nil)
|
|
23
|
-
@tracers ||= default_tracers
|
|
14
|
+
@tracers ||= {} # default_tracers
|
|
24
15
|
@tracers = @tracers.merge!(tracers || {})
|
|
25
16
|
end
|
|
26
17
|
|
|
@@ -1,19 +1,26 @@
|
|
|
1
|
+
module Tracing
|
|
2
|
+
module DefaultPath
|
|
3
|
+
def default_path
|
|
4
|
+
return if !@default_path
|
|
5
|
+
if !File.exists?(@default_path)
|
|
6
|
+
FileUtils.mkdir_p @default_path
|
|
7
|
+
end
|
|
8
|
+
@default_path
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def default_path=(path)
|
|
12
|
+
@default_path = path
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
|
|
1
18
|
module Tracing
|
|
2
19
|
# File Appender
|
|
3
20
|
class FileAppender < BaseAppender
|
|
4
|
-
|
|
21
|
+
include Tracing::DefaultPath
|
|
5
22
|
class << self
|
|
6
|
-
|
|
7
|
-
return if !@default_path
|
|
8
|
-
if !File.exists?(@default_path)
|
|
9
|
-
FileUtils.mkdir_p @default_path
|
|
10
|
-
end
|
|
11
|
-
@default_path
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def default_path=(path)
|
|
15
|
-
@default_path = path
|
|
16
|
-
end
|
|
23
|
+
include Tracing::DefaultPath
|
|
17
24
|
end
|
|
18
25
|
|
|
19
26
|
# file
|
|
@@ -49,7 +56,8 @@ module Tracing
|
|
|
49
56
|
end
|
|
50
57
|
|
|
51
58
|
def file_path(file)
|
|
52
|
-
|
|
59
|
+
def_path = default_path || self.class.default_path
|
|
60
|
+
file = File.join(def_path, file) if self.class.default_path
|
|
53
61
|
end
|
|
54
62
|
|
|
55
63
|
protected
|
|
@@ -1,27 +1,7 @@
|
|
|
1
|
-
# surround html ouput with wrapper-html
|
|
2
|
-
# include jquery and css
|
|
3
|
-
# collapse non-important regions and expand important ones
|
|
4
|
-
|
|
5
|
-
# TODO: how to ensure html ouput finishes
|
|
6
|
-
# file.seek(-20, IO:SEEK_END)
|
|
7
1
|
module Tracing
|
|
8
2
|
class HtmlAppender < FileAppender
|
|
9
3
|
attr_accessor :to_file, :html_output
|
|
10
4
|
|
|
11
|
-
class << self
|
|
12
|
-
def default_path
|
|
13
|
-
return if !@default_path
|
|
14
|
-
if !File.exists?(@default_path)
|
|
15
|
-
FileUtils.mkdir_p @default_path
|
|
16
|
-
end
|
|
17
|
-
@default_path
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def default_path=(path)
|
|
21
|
-
@default_path = path
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
5
|
def initialize(init_options = nil)
|
|
26
6
|
@tracer = Tracing::OutputTemplate::HtmlTrace.new
|
|
27
7
|
super(init_options)
|
|
@@ -30,6 +10,10 @@ module Tracing
|
|
|
30
10
|
return if !init_options
|
|
31
11
|
# write to file
|
|
32
12
|
@to_file = init_options[:to_file]
|
|
13
|
+
|
|
14
|
+
# override default path for class
|
|
15
|
+
@default_path = init_options[:default_path]
|
|
16
|
+
|
|
33
17
|
if @to_file
|
|
34
18
|
write_wrap_file(to_file)
|
|
35
19
|
else
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
class Array
|
|
2
|
+
include Tracing::RuleMatch
|
|
3
|
+
|
|
4
|
+
def add(obj)
|
|
5
|
+
self << obj
|
|
6
|
+
self.flatten!
|
|
7
|
+
self.compact! if self
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def rule_list
|
|
11
|
+
self
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# iterate and return filters array
|
|
15
|
+
def filters
|
|
16
|
+
_filters = []
|
|
17
|
+
self.each do |_filter|
|
|
18
|
+
_filters.add(_filter.filters)
|
|
19
|
+
end
|
|
20
|
+
_filters
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# iterate and return action_handlers array
|
|
24
|
+
def action_handlers
|
|
25
|
+
_action_handlers = []
|
|
26
|
+
self.each do |_action_handler|
|
|
27
|
+
_action_handlers.add(_action_handler.action_handlers)
|
|
28
|
+
end
|
|
29
|
+
_action_handlers
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# iterate and return action_handlers array
|
|
33
|
+
def appenders
|
|
34
|
+
_appenders = []
|
|
35
|
+
self.each do |_appender|
|
|
36
|
+
_appenders.add(_appender.appenders)
|
|
37
|
+
end
|
|
38
|
+
_appenders
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
end
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
class Hash
|
|
2
|
+
|
|
3
|
+
def context
|
|
4
|
+
modules = self[:modules]
|
|
5
|
+
cls_name = self[:class_name]
|
|
6
|
+
method_name = self[:method_name]
|
|
7
|
+
self[:modules] = cls_name.modules if cls_name && !modules
|
|
8
|
+
self[:class_name] = cls_name.class_name if cls_name
|
|
9
|
+
calculate_full_names
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def method_name=(name)
|
|
13
|
+
self[:method_name] = name
|
|
14
|
+
calculate_full_method_name
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def result=(res)
|
|
18
|
+
self[:result] = res
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def set_context(hash)
|
|
23
|
+
modules = hash[:modules]
|
|
24
|
+
cls_name = hash[:class_name]
|
|
25
|
+
method_name = hash[:method_name]
|
|
26
|
+
args = hash[:args]
|
|
27
|
+
vars = hash[:vars]
|
|
28
|
+
self[:modules] = cls_name.modules if cls_name
|
|
29
|
+
self[:modules] = modules if modules
|
|
30
|
+
|
|
31
|
+
self[:class_name] = cls_name.class_name if cls_name
|
|
32
|
+
self[:method_name] = method_name if method_name
|
|
33
|
+
self[:args] = args if args
|
|
34
|
+
self[:vars] = vars if vars
|
|
35
|
+
|
|
36
|
+
calculate_full_names
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def full_modules_name
|
|
40
|
+
self[:modules].join("::") if self[:modules]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def full_class_name
|
|
44
|
+
mod_name = self.full_modules_name
|
|
45
|
+
name = self[:class_name]
|
|
46
|
+
name = "#{mod_name}::#{name}" if !mod_name.blank?
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def full_method_name
|
|
50
|
+
cls_name = self.full_class_name
|
|
51
|
+
name = self[:method_name]
|
|
52
|
+
name = "#{cls_name}.#{name}" if !cls_name.blank?
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def configuration
|
|
57
|
+
Tracing::Configuration.new(self)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def final_yield_action
|
|
61
|
+
self[:final_yield_action] || :include
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# return filter
|
|
65
|
+
def filters
|
|
66
|
+
filter_list = self[:filters]
|
|
67
|
+
# puts "filter_list: #{filter_list.inspect}"
|
|
68
|
+
if filter_list
|
|
69
|
+
filter_list.filters
|
|
70
|
+
else
|
|
71
|
+
# puts "create filter from: #{self.inspect}"
|
|
72
|
+
x = self.create_filter
|
|
73
|
+
# puts "created filter: #{x.inspect}"
|
|
74
|
+
x
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# return action_handler
|
|
79
|
+
def action_handlers
|
|
80
|
+
action_handler_list = self[:action_handlers]
|
|
81
|
+
if action_handler_list
|
|
82
|
+
action_handler_list.action_handlers
|
|
83
|
+
else
|
|
84
|
+
Tracing::ActionHandler.new(self)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# return action_handler
|
|
89
|
+
def appenders
|
|
90
|
+
appender_list = self[:appenders]
|
|
91
|
+
appender_list.appenders
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# return tracer
|
|
95
|
+
def tracer
|
|
96
|
+
tracer_key = self[:tracer]
|
|
97
|
+
tracer_class = Mappings.default_tracer_mappings[tracer_key]
|
|
98
|
+
tracer_class.new
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def create_filter
|
|
102
|
+
return self.filters if self[:filters]
|
|
103
|
+
hash = self.create_filter_hash || self
|
|
104
|
+
if hash
|
|
105
|
+
filter_class = hash.filter_class
|
|
106
|
+
# puts "hash: #{hash.inspect} -> class: #{filter_class}"
|
|
107
|
+
return filter_class.new(hash) if filter_class
|
|
108
|
+
end
|
|
109
|
+
nil
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def create_filter_hash
|
|
113
|
+
# puts "TRY create_filter: " + name_hash.inspect
|
|
114
|
+
[:module_filter, :class_filter, :method_filter, :vars_filter].each do |symbol|
|
|
115
|
+
# puts "symbol:" + symbol.to_s
|
|
116
|
+
res = self.try_create_filter_hash(symbol)
|
|
117
|
+
# puts "Filter created:" + res.inspect
|
|
118
|
+
return res if res
|
|
119
|
+
end
|
|
120
|
+
# puts "no filter could be created :("
|
|
121
|
+
nil
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def try_create_filter_hash(symbol)
|
|
125
|
+
_symbol = has_any_prefix(symbol)
|
|
126
|
+
puts _symbol.inspect
|
|
127
|
+
return if !_symbol
|
|
128
|
+
|
|
129
|
+
prefix = _symbol[:prefix]
|
|
130
|
+
filter_sym = _symbol[:filter_symbol]
|
|
131
|
+
#
|
|
132
|
+
filter_names = self[filter_sym]
|
|
133
|
+
#
|
|
134
|
+
rule_symbol = prefix.to_sym.rule
|
|
135
|
+
{symbol => {rule_symbol => filter_names}}
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def map(key)
|
|
139
|
+
clazz = self[key]
|
|
140
|
+
return clazz if clazz
|
|
141
|
+
self[:default]
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def filter_class
|
|
145
|
+
Mappings.convenience_map.select do |key, _filter|
|
|
146
|
+
return _filter.filter_class if self.has_key?(key) || self.has_key?(_filter)
|
|
147
|
+
end
|
|
148
|
+
Mappings.filter_rule_mappings.select do |key, _filter|
|
|
149
|
+
return _filter.filter_class if self.has_key? key
|
|
150
|
+
end
|
|
151
|
+
nil
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
protected
|
|
155
|
+
|
|
156
|
+
def calculate_full_names
|
|
157
|
+
self[:full_modules_name] = full_modules_name
|
|
158
|
+
self[:full_class_name] = full_class_name
|
|
159
|
+
calculate_full_method_name
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def calculate_full_method_name
|
|
163
|
+
self[:full_method_name] = full_method_name
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def has_prefix(symbol, prefix)
|
|
167
|
+
sym = symbol.prefix(prefix)
|
|
168
|
+
self.has_key?(sym) ? {:filter_symbol => sym, :prefix => prefix} : false
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def has_any_prefix(symbol)
|
|
172
|
+
['iy', 'xy', 'i', 'x'].each do |prefix|
|
|
173
|
+
hash_result = has_prefix(symbol, prefix)
|
|
174
|
+
return hash_result if hash_result
|
|
175
|
+
end
|
|
176
|
+
false
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
class Hash
|
|
2
|
+
include Tracing::RuleMatch
|
|
3
|
+
|
|
4
|
+
def rules_allow_action(name)
|
|
5
|
+
rule_allow_action(name)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def rule_list
|
|
9
|
+
rules
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# return a symbol, either - :include, :exclude or :exclude_and_yield, :include_and_yield or :yield (let next filter decide)
|
|
13
|
+
def rule_allow_action(name)
|
|
14
|
+
include_rules = self[:include].rule_list
|
|
15
|
+
if !include_rules.blank?
|
|
16
|
+
# puts "Rule include"
|
|
17
|
+
res = include_rules.matches_any?(name)
|
|
18
|
+
return :include if res
|
|
19
|
+
end
|
|
20
|
+
exclude_rules = self[:exclude].rule_list
|
|
21
|
+
if !exclude_rules.blank?
|
|
22
|
+
# puts "Rule exclude"
|
|
23
|
+
return :exclude if exclude_rules.matches_any?(name)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
rules = self[:exclude_and_yield].rule_list
|
|
27
|
+
if !rules.blank?
|
|
28
|
+
# puts "Rule exclude"
|
|
29
|
+
return :exclude_and_yield if rules.matches_any?(name)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
rules = self[:include_and_yield].rule_list
|
|
33
|
+
if !rules.blank?
|
|
34
|
+
# puts "Rule exclude"
|
|
35
|
+
return :include_and_yield if rules.matches_any?(name)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# puts "Not included or excluded"
|
|
40
|
+
if !self[:default].nil?
|
|
41
|
+
# puts "Return default: #{self[:default]}"
|
|
42
|
+
return self[:default]
|
|
43
|
+
end
|
|
44
|
+
# puts "Rule yields"
|
|
45
|
+
return :yield
|
|
46
|
+
rescue RuleTypeError
|
|
47
|
+
# puts "error"
|
|
48
|
+
return :exclude
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Dir.glob(File.join(File.dirname(__FILE__), '**/*.rb')).each {|f| require f }
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class String
|
|
2
|
+
def modules
|
|
3
|
+
self.split("::")[0..-2]
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def class_name
|
|
7
|
+
name = self.split("::")[-1..-1]
|
|
8
|
+
name = name[0] if name.kind_of? Array
|
|
9
|
+
name
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def in_module?(module_name)
|
|
13
|
+
modules = self.modules
|
|
14
|
+
modules.include?(module_name)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def rule_list
|
|
18
|
+
self.split_names
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def split_names
|
|
22
|
+
if self.include?(",")
|
|
23
|
+
s = self.gsub(/\s/, '')
|
|
24
|
+
s.split(",") if s
|
|
25
|
+
else
|
|
26
|
+
self.split(" ")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# return name matching rules as array
|
|
31
|
+
# split " ", ","
|
|
32
|
+
def rules
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
class Symbol
|
|
2
|
+
def prefix(pre)
|
|
3
|
+
(pre.to_s + '_' + self.to_s).to_sym
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def filter_class
|
|
7
|
+
mapper = Mappings.default_filters
|
|
8
|
+
mapper.map(self)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def trace_class
|
|
12
|
+
mapper = Mappings::default_tracer_mappings
|
|
13
|
+
mapper.map(self)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def appender_class
|
|
17
|
+
mapper = Mappings::default_appender_mappings
|
|
18
|
+
mapper.map(self)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def rule
|
|
22
|
+
mapper = Mappings::rule_symbol_mappings
|
|
23
|
+
mapper.map(self)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def appenders
|
|
27
|
+
self.appender_class.new
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|