trace_viz 0.0.2 → 1.0.1
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/README.md +68 -43
- data/Steepfile +34 -0
- data/examples/eu_central_bank.rb +69 -0
- data/examples/example.cast +189 -285
- data/lib/trace_viz/adapters/base_adapter.rb +24 -1
- data/lib/trace_viz/adapters/trace_point_adapter.rb +3 -10
- data/lib/trace_viz/builders/base_builder.rb +11 -0
- data/lib/trace_viz/builders/diagram/base_builder.rb +10 -0
- data/lib/trace_viz/builders/diagram/message_builder.rb +96 -0
- data/lib/trace_viz/builders/diagram/sequence_builder.rb +50 -0
- data/lib/trace_viz/collectors/base_collector.rb +42 -35
- data/lib/trace_viz/collectors/filters/base_class_filter.rb +31 -0
- data/lib/trace_viz/collectors/filters/base_exclude_filter.rb +16 -0
- data/lib/trace_viz/collectors/filters/base_filter.rb +2 -8
- data/lib/trace_viz/collectors/filters/base_include_filter.rb +16 -0
- data/lib/trace_viz/collectors/filters/exclude_classes_filter.rb +4 -17
- data/lib/trace_viz/collectors/filters/exclude_default_classes_filter.rb +22 -26
- data/lib/trace_viz/collectors/filters/include_classes_filter.rb +4 -17
- data/lib/trace_viz/collectors/hierarchy_linker.rb +30 -0
- data/lib/trace_viz/collectors/matchers/base_matcher.rb +13 -0
- data/lib/trace_viz/collectors/matchers/trace_point_action_matcher.rb +12 -10
- data/lib/trace_viz/collectors/matchers/within_depth_matcher.rb +6 -5
- data/lib/trace_viz/collectors/steps/assign_depth_for_call_step.rb +30 -0
- data/lib/trace_viz/collectors/steps/assign_depth_for_return_step.rb +39 -0
- data/lib/trace_viz/collectors/steps/base_step.rb +27 -0
- data/lib/trace_viz/collectors/steps/build_hierarchy_step.rb +32 -0
- data/lib/trace_viz/collectors/{evaluators/hidden_evaluator.rb → steps/hidden_step.rb} +9 -5
- data/lib/trace_viz/collectors/steps/linking_step.rb +36 -0
- data/lib/trace_viz/collectors/{evaluators/filter_evaluator.rb → steps/validation_step.rb} +9 -6
- data/lib/trace_viz/collectors/steps.rb +10 -0
- data/lib/trace_viz/collectors/trace_pipeline.rb +26 -0
- data/lib/trace_viz/collectors/trace_pipeline_builder.rb +29 -0
- data/lib/trace_viz/collectors/trace_point_collector.rb +1 -11
- data/lib/trace_viz/config/validator.rb +6 -5
- data/lib/trace_viz/configuration.rb +3 -3
- data/lib/trace_viz/context/tracking_context.rb +4 -0
- data/lib/trace_viz/core/tracer.rb +2 -0
- data/lib/trace_viz/defaults/actions.rb +84 -0
- data/lib/trace_viz/defaults/colors.rb +61 -0
- data/lib/trace_viz/defaults/config.rb +91 -0
- data/lib/trace_viz/defaults/themes.rb +66 -0
- data/lib/trace_viz/defaults.rb +10 -129
- data/lib/trace_viz/exporters/base_exporter.rb +31 -13
- data/lib/trace_viz/exporters/export_manager.rb +33 -0
- data/lib/trace_viz/exporters/mermaid_exporter.rb +17 -0
- data/lib/trace_viz/exporters/registry.rb +27 -0
- data/lib/trace_viz/exporters/text_exporter.rb +2 -2
- data/lib/trace_viz/extractors/base_extractor.rb +17 -0
- data/lib/trace_viz/extractors/diagram/base_extractor.rb +18 -0
- data/lib/trace_viz/extractors/diagram/box_extractor.rb +50 -0
- data/lib/trace_viz/extractors/diagram/message_extractor.rb +23 -0
- data/lib/trace_viz/extractors/diagram/participant_extractor.rb +37 -0
- data/lib/trace_viz/extractors/diagram/processors/message_processor.rb +93 -0
- data/lib/trace_viz/formatters/base_formatter.rb +4 -30
- data/lib/trace_viz/formatters/base_formatter_factory.rb +23 -0
- data/lib/trace_viz/formatters/diagram/sequence/base_formatter.rb +14 -0
- data/lib/trace_viz/formatters/diagram/sequence/message_formatter.rb +37 -0
- data/lib/trace_viz/formatters/diagram_formatter.rb +10 -0
- data/lib/trace_viz/formatters/export/base_formatter.rb +12 -0
- data/lib/trace_viz/formatters/export/formatter_factory.rb +22 -0
- data/lib/trace_viz/formatters/export/method_call_formatter.rb +21 -0
- data/lib/trace_viz/formatters/export/method_return_formatter.rb +22 -0
- data/lib/trace_viz/formatters/export/summary_group_formatter.rb +35 -0
- data/lib/trace_viz/formatters/helpers/depth_helper.rb +2 -8
- data/lib/trace_viz/formatters/helpers/digram/action_helper.rb +17 -0
- data/lib/trace_viz/formatters/helpers/digram/result_helper.rb +39 -0
- data/lib/trace_viz/formatters/helpers/indent_helper.rb +1 -1
- data/lib/trace_viz/formatters/helpers/log/color_helper.rb +23 -0
- data/lib/trace_viz/formatters/helpers/log/depth_helper.rb +22 -0
- data/lib/trace_viz/formatters/helpers/log/method_name_helper.rb +29 -0
- data/lib/trace_viz/formatters/helpers/log/params_helper.rb +55 -0
- data/lib/trace_viz/formatters/helpers/log/result_helper.rb +27 -0
- data/lib/trace_viz/formatters/helpers/log/summary/params_helper.rb +57 -0
- data/lib/trace_viz/formatters/helpers/method_details_helper.rb +1 -1
- data/lib/trace_viz/formatters/helpers/params_helper.rb +30 -9
- data/lib/trace_viz/formatters/helpers/result_helper.rb +5 -4
- data/lib/trace_viz/formatters/helpers/source_helper.rb +6 -4
- data/lib/trace_viz/formatters/helpers/summary/params_helper.rb +45 -0
- data/lib/trace_viz/formatters/helpers/summary/source_helper.rb +24 -0
- data/lib/trace_viz/formatters/helpers/time_helper.rb +2 -2
- data/lib/trace_viz/formatters/helpers.rb +10 -0
- data/lib/trace_viz/formatters/log/base_formatter.rb +13 -0
- data/lib/trace_viz/formatters/log/formatter_factory.rb +22 -0
- data/lib/trace_viz/formatters/log/method_call_formatter.rb +34 -0
- data/lib/trace_viz/formatters/log/method_return_formatter.rb +24 -0
- data/lib/trace_viz/formatters/log/summary_group_formatter.rb +40 -0
- data/lib/trace_viz/formatters/log/verbose_formatter.rb +14 -0
- data/lib/trace_viz/formatters/trace_data_formatter.rb +24 -0
- data/lib/trace_viz/helpers/config_helper.rb +17 -0
- data/lib/trace_viz/helpers/trace_point/param_helper.rb +98 -0
- data/lib/trace_viz/helpers/tracking_helper.rb +26 -0
- data/lib/trace_viz/helpers.rb +9 -0
- data/lib/trace_viz/logger.rb +9 -20
- data/lib/trace_viz/loggers/base_logger.rb +29 -0
- data/lib/trace_viz/loggers/log_level_resolver.rb +18 -0
- data/lib/trace_viz/loggers/logging_manager.rb +46 -0
- data/lib/trace_viz/loggers/post_collection_logger.rb +44 -0
- data/lib/trace_viz/loggers/trace_logger.rb +14 -18
- data/lib/trace_viz/loggers/trace_stats_logger.rb +28 -14
- data/lib/trace_viz/managers/diagram/participant_manager.rb +23 -0
- data/lib/trace_viz/models/box.rb +19 -0
- data/lib/trace_viz/models/diagram.rb +27 -0
- data/lib/trace_viz/models/message.rb +16 -0
- data/lib/trace_viz/models/participant.rb +18 -0
- data/lib/trace_viz/models.rb +8 -0
- data/lib/trace_viz/renderers/base_renderer.rb +27 -0
- data/lib/trace_viz/renderers/diagram/sequence_renderer.rb +59 -0
- data/lib/trace_viz/renderers/render_context.rb +17 -0
- data/lib/trace_viz/renderers/renderer_builder.rb +20 -0
- data/lib/trace_viz/renderers/renderer_factory.rb +29 -0
- data/lib/trace_viz/renderers/summary_renderer.rb +34 -0
- data/lib/trace_viz/renderers/verbose_renderer.rb +29 -0
- data/lib/trace_viz/shared/renderer_helper.rb +25 -0
- data/lib/trace_viz/shared.rb +8 -0
- data/lib/trace_viz/syntax/mermaid/sequence_syntax.rb +99 -0
- data/lib/trace_viz/trace_data/base.rb +22 -22
- data/lib/trace_viz/trace_data/node.rb +39 -0
- data/lib/trace_viz/trace_data/root_node.rb +24 -0
- data/lib/trace_viz/trace_data/summary_node.rb +45 -0
- data/lib/trace_viz/trace_data/trace_point/base.rb +26 -31
- data/lib/trace_viz/trace_data/trace_point/method_call.rb +25 -16
- data/lib/trace_viz/trace_data/trace_point/method_return.rb +21 -1
- data/lib/trace_viz/traits/depth_trackable.rb +13 -0
- data/lib/trace_viz/traits/identifiable.rb +25 -0
- data/lib/trace_viz/traits/time_trackable.rb +13 -0
- data/lib/trace_viz/traits.rb +10 -0
- data/lib/trace_viz/transformers/base_transformer.rb +29 -0
- data/lib/trace_viz/transformers/summary_transformer.rb +70 -0
- data/lib/trace_viz/utils/alias_generator.rb +58 -0
- data/lib/trace_viz/utils/colorize.rb +6 -6
- data/lib/trace_viz/utils/format/key_value_formatter.rb +42 -0
- data/lib/trace_viz/utils/format/value_truncator.rb +123 -0
- data/lib/trace_viz/utils/id_generator.rb +35 -0
- data/lib/trace_viz/utils.rb +8 -0
- data/lib/trace_viz/version.rb +1 -1
- data/sig/adapters/base_adapter.rbs +11 -0
- data/sig/adapters/trace_point_adapter.rbs +13 -0
- data/sig/collectors/filters/registry.rbs +13 -0
- data/sig/collectors/trace_point_collector.rbs +17 -0
- data/sig/config/copier.rbs +15 -0
- data/sig/config/validator.rbs +18 -0
- data/sig/configuration.rbs +22 -0
- data/sig/context/base_context.rbs +9 -0
- data/sig/context/config_context.rbs +13 -0
- data/sig/context/manager.rbs +10 -0
- data/sig/context/map.rbs +13 -0
- data/sig/context.rbs +5 -0
- data/sig/core/tracer.rbs +7 -0
- data/sig/core.rbs +4 -0
- data/sig/defaults.rbs +17 -0
- data/sig/errors.rbs +13 -0
- data/sig/logger.rbs +33 -0
- data/sig/trace_viz.rbs +1 -2
- data/sig/utils/colorize.rbs +8 -0
- data/sig/utils/format_utils/key_value_formatter.rbs +16 -0
- data/sig/utils/format_utils/value_truncator.rbs +19 -0
- data/sig/utils/format_utils.rbs +8 -0
- data/sig/version.rbs +3 -0
- metadata +124 -18
- data/lib/trace_viz/collectors/depth_manager.rb +0 -37
- data/lib/trace_viz/collectors/evaluators/base_evaluator.rb +0 -23
- data/lib/trace_viz/exporters/formatters/base_formatter.rb +0 -12
- data/lib/trace_viz/exporters/formatters/method_call_formatter.rb +0 -21
- data/lib/trace_viz/exporters/formatters/method_return_formatter.rb +0 -22
- data/lib/trace_viz/exporters/transformers/base_transformer.rb +0 -25
- data/lib/trace_viz/exporters/transformers/text_transformer.rb +0 -28
- data/lib/trace_viz/loggers/trace_builder.rb +0 -30
- data/lib/trace_viz/loggers/trace_formatters/base_formatter.rb +0 -32
- data/lib/trace_viz/loggers/trace_formatters/method_call_formatter.rb +0 -21
- data/lib/trace_viz/loggers/trace_formatters/method_return_formatter.rb +0 -22
- data/lib/trace_viz/utils/format_utils.rb +0 -67
@@ -1,9 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "trace_viz/helpers"
|
4
|
+
require "trace_viz/loggers/logging_manager"
|
5
|
+
require "trace_viz/exporters/export_manager"
|
6
|
+
|
3
7
|
module TraceViz
|
4
8
|
module Adapters
|
5
9
|
class BaseAdapter
|
6
|
-
|
10
|
+
include Helpers::ConfigHelper
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@logger = Loggers::LoggingManager.new
|
14
|
+
@exporter = Exporters::ExportManager.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def trace(&block)
|
18
|
+
execute_trace(&block)
|
19
|
+
ensure
|
20
|
+
logger.log_post_collection(collector)
|
21
|
+
logger.log_stats(collector)
|
22
|
+
exporter.export(collector)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_reader :logger, :exporter, :collector
|
28
|
+
|
29
|
+
def execute_trace
|
7
30
|
raise NotImplementedError
|
8
31
|
end
|
9
32
|
end
|
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
require "trace_viz/adapters/base_adapter"
|
4
4
|
require "trace_viz/collectors/trace_point_collector"
|
5
|
-
require "trace_viz/exporters/text_exporter"
|
6
|
-
require "trace_viz/loggers/trace_stats_logger"
|
7
5
|
|
8
6
|
module TraceViz
|
9
7
|
module Adapters
|
@@ -14,18 +12,13 @@ module TraceViz
|
|
14
12
|
@collector = Collectors::TracePointCollector.new
|
15
13
|
end
|
16
14
|
|
17
|
-
|
15
|
+
private
|
16
|
+
|
17
|
+
def execute_trace(&block)
|
18
18
|
::TracePoint.new(:call, :return) do |tp|
|
19
19
|
collector.collect(tp)
|
20
20
|
end.enable(&block)
|
21
|
-
ensure
|
22
|
-
Loggers::TraceStatsLogger.log(collector)
|
23
|
-
Exporters::TextExporter.new(collector).export
|
24
21
|
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
attr_reader :collector
|
29
22
|
end
|
30
23
|
end
|
31
24
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "trace_viz/managers/diagram/participant_manager"
|
4
|
+
require "trace_viz/models"
|
5
|
+
require_relative "base_builder"
|
6
|
+
|
7
|
+
module TraceViz
|
8
|
+
module Builders
|
9
|
+
module Diagram
|
10
|
+
class MessageBuilder < BaseBuilder
|
11
|
+
def initialize(formatter, participants)
|
12
|
+
super()
|
13
|
+
@formatter = formatter
|
14
|
+
@participants_manager = Managers::Diagram::ParticipantsManager.new(participants)
|
15
|
+
end
|
16
|
+
|
17
|
+
def build_call_message(from_trace, to_trace)
|
18
|
+
return if same_class?(from_trace, to_trace)
|
19
|
+
|
20
|
+
build(
|
21
|
+
:call,
|
22
|
+
from: participant_for(from_trace),
|
23
|
+
to: participant_for(to_trace),
|
24
|
+
content: formatter.format_call,
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def build_return_message(from_trace, to_trace)
|
29
|
+
return if same_class?(from_trace, to_trace)
|
30
|
+
|
31
|
+
build(
|
32
|
+
:return,
|
33
|
+
from: participant_for(from_trace),
|
34
|
+
to: participant_for(to_trace),
|
35
|
+
content: formatter.format_return,
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_loop_start_message(trace)
|
40
|
+
build(:loop_start, content: "#{trace.count} calls")
|
41
|
+
end
|
42
|
+
|
43
|
+
def build_loop_end_message
|
44
|
+
build(:loop_end)
|
45
|
+
end
|
46
|
+
|
47
|
+
def build_activate_message(trace)
|
48
|
+
build(:activate, to: participant_for(trace))
|
49
|
+
end
|
50
|
+
|
51
|
+
def build_deactivate_message(trace)
|
52
|
+
build(:deactivate, to: participant_for(trace))
|
53
|
+
end
|
54
|
+
|
55
|
+
def build_internal_message(trace)
|
56
|
+
build(
|
57
|
+
:call,
|
58
|
+
from: participant_for(trace),
|
59
|
+
to: participant_for(trace),
|
60
|
+
content: formatter.format_internal_message(trace),
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
def build_note(trace)
|
65
|
+
build(
|
66
|
+
:note,
|
67
|
+
from: participant_for(trace),
|
68
|
+
to: participant_for(trace),
|
69
|
+
content: formatter.format_result(trace),
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
attr_reader :formatter, :participants_manager
|
76
|
+
|
77
|
+
def build(type, from: nil, to: nil, content: "")
|
78
|
+
Models::Message.new(
|
79
|
+
type: type,
|
80
|
+
from: from,
|
81
|
+
to: to,
|
82
|
+
content: content,
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
86
|
+
def same_class?(from_trace, to_trace)
|
87
|
+
from_trace.klass == to_trace.klass
|
88
|
+
end
|
89
|
+
|
90
|
+
def participant_for(trace)
|
91
|
+
participants_manager.find(trace.klass)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "trace_viz/models/diagram"
|
4
|
+
require "trace_viz/extractors/diagram/box_extractor"
|
5
|
+
require "trace_viz/extractors/diagram/message_extractor"
|
6
|
+
require_relative "base_builder"
|
7
|
+
|
8
|
+
module TraceViz
|
9
|
+
module Builders
|
10
|
+
module Diagram
|
11
|
+
class SequenceBuilder < BaseBuilder
|
12
|
+
def initialize(collector)
|
13
|
+
super()
|
14
|
+
@collector = collector
|
15
|
+
end
|
16
|
+
|
17
|
+
def build
|
18
|
+
Models::Diagram.new.tap do |diagram|
|
19
|
+
add_boxes_to(diagram)
|
20
|
+
add_messages_to(diagram)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :collector
|
27
|
+
|
28
|
+
def add_boxes_to(diagram)
|
29
|
+
boxes.each { |box| diagram.add_box(box) }
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_messages_to(diagram)
|
33
|
+
messages.each { |message| diagram.add_message(message) }
|
34
|
+
end
|
35
|
+
|
36
|
+
def boxes
|
37
|
+
@boxes ||= Extractors::Diagram::BoxExtractor.new(collector).extract
|
38
|
+
end
|
39
|
+
|
40
|
+
def participants
|
41
|
+
@participants ||= boxes.flat_map(&:participants)
|
42
|
+
end
|
43
|
+
|
44
|
+
def messages
|
45
|
+
@messages ||= Extractors::Diagram::MessageExtractor.new(collector, participants).extract
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -1,38 +1,40 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "trace_viz/
|
4
|
-
require "trace_viz/loggers/
|
5
|
-
require_relative "
|
6
|
-
require_relative "
|
3
|
+
require "trace_viz/helpers"
|
4
|
+
require "trace_viz/loggers/logging_manager"
|
5
|
+
require_relative "hierarchy_linker"
|
6
|
+
require_relative "trace_stats"
|
7
|
+
require_relative "trace_pipeline_builder"
|
7
8
|
|
8
9
|
module TraceViz
|
9
10
|
module Collectors
|
10
11
|
class BaseCollector
|
11
|
-
|
12
|
+
include Helpers::ConfigHelper
|
13
|
+
include Helpers::TrackingHelper
|
14
|
+
|
15
|
+
attr_reader :collection, :hierarchy, :stats, :renderer
|
12
16
|
|
13
17
|
# To implement collect trace data from the given event,
|
14
18
|
# you need to enter the `config` context to perform the evaluation.
|
15
19
|
def initialize
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
setup_logger
|
21
|
+
setup_stats
|
22
|
+
setup_pipeline
|
23
|
+
setup_hierarchy
|
20
24
|
|
21
|
-
|
22
|
-
@hidden_evaluator = Evaluators::HiddenEvaluator.new
|
25
|
+
clear
|
23
26
|
end
|
24
27
|
|
25
28
|
def collect(event)
|
26
|
-
return unless
|
29
|
+
return unless can_collect?(event)
|
27
30
|
|
28
31
|
trace_data = build_trace(event)
|
29
|
-
|
32
|
+
processed_data = process_trace(trace_data)
|
30
33
|
|
31
|
-
|
32
|
-
return if hidden?(trace_data)
|
34
|
+
return unless processed_data
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
+
store_trace(processed_data)
|
37
|
+
link_to_hierarchy(processed_data)
|
36
38
|
end
|
37
39
|
|
38
40
|
def clear
|
@@ -41,43 +43,48 @@ module TraceViz
|
|
41
43
|
|
42
44
|
private
|
43
45
|
|
44
|
-
attr_reader :
|
45
|
-
:filter_evaluator,
|
46
|
-
:hidden_evaluator
|
46
|
+
attr_reader :logger, :pipeline
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
raise NotImplementedError
|
48
|
+
def setup_logger
|
49
|
+
@logger = Loggers::LoggingManager.new
|
51
50
|
end
|
52
51
|
|
53
|
-
|
54
|
-
|
55
|
-
filter_evaluator.pass?(trace_data)
|
52
|
+
def setup_stats
|
53
|
+
@stats = TraceStats.new
|
56
54
|
end
|
57
55
|
|
58
|
-
|
59
|
-
|
60
|
-
hidden_evaluator.pass?(trace_data)
|
56
|
+
def setup_pipeline
|
57
|
+
@pipeline = TracePipelineBuilder.build
|
61
58
|
end
|
62
59
|
|
63
|
-
|
64
|
-
|
65
|
-
|
60
|
+
def setup_hierarchy
|
61
|
+
@hierarchy = TraceData::HierarchyLinker.new
|
62
|
+
end
|
63
|
+
|
64
|
+
def process_trace(trace_data)
|
65
|
+
pipeline.process(trace_data)
|
66
66
|
end
|
67
67
|
|
68
|
-
|
68
|
+
# Base on trace-event for specific adapter
|
69
|
+
def can_collect?(event)
|
69
70
|
raise NotImplementedError
|
70
71
|
end
|
71
72
|
|
72
|
-
|
73
|
-
|
73
|
+
# Builds trace data from the trace-event for specific adapter
|
74
|
+
def build_trace(event)
|
75
|
+
raise NotImplementedError
|
74
76
|
end
|
75
77
|
|
76
78
|
def store_trace(trace_data)
|
79
|
+
logger.log_runtime_trace(trace_data)
|
77
80
|
stats.update(trace_data)
|
78
81
|
|
79
82
|
@collection << trace_data
|
80
83
|
end
|
84
|
+
|
85
|
+
def link_to_hierarchy(trace_data)
|
86
|
+
hierarchy.link(trace_data)
|
87
|
+
end
|
81
88
|
end
|
82
89
|
end
|
83
90
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base_filter"
|
4
|
+
|
5
|
+
module TraceViz
|
6
|
+
module Collectors
|
7
|
+
module Filters
|
8
|
+
class BaseClassFilter < BaseFilter
|
9
|
+
def initialize(classes:)
|
10
|
+
super()
|
11
|
+
@classes_and_modules = classes.map(&:to_s).freeze
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
attr_reader :classes_and_modules
|
17
|
+
|
18
|
+
def normalize_class_name(klass)
|
19
|
+
# Normalize class/module names to handle dynamic/nested representations
|
20
|
+
klass.to_s
|
21
|
+
.gsub(/^#<Class/, "<Class")
|
22
|
+
.strip
|
23
|
+
end
|
24
|
+
|
25
|
+
def matches_hierarchy?(klass_name, target_name)
|
26
|
+
klass_name == target_name || klass_name.start_with?("#{target_name}::")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base_class_filter"
|
4
|
+
|
5
|
+
module TraceViz
|
6
|
+
module Collectors
|
7
|
+
module Filters
|
8
|
+
class BaseExcludeFilter < BaseClassFilter
|
9
|
+
def apply?(trace_data)
|
10
|
+
klass_name = normalize_class_name(trace_data.klass)
|
11
|
+
!classes_and_modules.any? { |excluded| matches_hierarchy?(klass_name, excluded) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,22 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "trace_viz/
|
3
|
+
require "trace_viz/helpers"
|
4
4
|
|
5
5
|
module TraceViz
|
6
6
|
module Collectors
|
7
7
|
module Filters
|
8
8
|
class BaseFilter
|
9
|
-
|
10
|
-
@config = Context.for(:config).configuration
|
11
|
-
end
|
9
|
+
include Helpers::ConfigHelper
|
12
10
|
|
13
11
|
def apply?(trace_data)
|
14
12
|
raise NotImplementedError
|
15
13
|
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
attr_reader :config
|
20
14
|
end
|
21
15
|
end
|
22
16
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base_class_filter"
|
4
|
+
|
5
|
+
module TraceViz
|
6
|
+
module Collectors
|
7
|
+
module Filters
|
8
|
+
class BaseIncludeFilter < BaseClassFilter
|
9
|
+
def apply?(trace_data)
|
10
|
+
klass_name = normalize_class_name(trace_data.klass)
|
11
|
+
classes_and_modules.any? { |allowed| matches_hierarchy?(klass_name, allowed) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,26 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "
|
3
|
+
require_relative "base_exclude_filter"
|
4
4
|
|
5
5
|
module TraceViz
|
6
6
|
module Collectors
|
7
7
|
module Filters
|
8
|
-
class ExcludeClassesFilter <
|
9
|
-
def initialize(
|
10
|
-
super()
|
11
|
-
@excluded_classes = options[:classes].map(&:to_s).freeze
|
12
|
-
end
|
13
|
-
|
14
|
-
def apply?(trace_data)
|
15
|
-
!exclude_class?(trace_data.klass)
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
attr_reader :excluded_classes
|
21
|
-
|
22
|
-
def exclude_class?(klass)
|
23
|
-
excluded_classes.include?(klass.to_s)
|
8
|
+
class ExcludeClassesFilter < BaseExcludeFilter
|
9
|
+
def initialize(classes:)
|
10
|
+
super(classes: classes)
|
24
11
|
end
|
25
12
|
end
|
26
13
|
end
|
@@ -1,36 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require_relative "base_filter"
|
3
|
+
require_relative "base_exclude_filter"
|
5
4
|
|
6
5
|
module TraceViz
|
7
6
|
module Collectors
|
8
7
|
module Filters
|
9
|
-
class ExcludeDefaultClassesFilter <
|
10
|
-
|
11
|
-
Object,
|
12
|
-
String,
|
13
|
-
Array,
|
14
|
-
Hash,
|
15
|
-
Numeric,
|
16
|
-
Integer,
|
17
|
-
Float,
|
18
|
-
Symbol,
|
19
|
-
Kernel,
|
20
|
-
Module,
|
21
|
-
Class,
|
22
|
-
Range,
|
23
|
-
Regexp,
|
24
|
-
|
8
|
+
class ExcludeDefaultClassesFilter < BaseExcludeFilter
|
9
|
+
DEFAULT_CLASSES_AND_MODULES = [
|
10
|
+
"Object",
|
11
|
+
"String",
|
12
|
+
"Array",
|
13
|
+
"Hash",
|
14
|
+
"Numeric",
|
15
|
+
"Integer",
|
16
|
+
"Float",
|
17
|
+
"Symbol",
|
18
|
+
"Kernel",
|
19
|
+
"Module",
|
20
|
+
"Class",
|
21
|
+
"Range",
|
22
|
+
"Regexp",
|
23
|
+
"BigDecimal",
|
24
|
+
"Set",
|
25
|
+
"Gem",
|
26
|
+
].freeze
|
25
27
|
|
26
|
-
def
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def excluded_class?(klass)
|
33
|
-
RUBY_CORE_CLASSES.include?(klass.to_s)
|
28
|
+
def initialize
|
29
|
+
super(classes: DEFAULT_CLASSES_AND_MODULES)
|
34
30
|
end
|
35
31
|
end
|
36
32
|
end
|
@@ -1,26 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "
|
3
|
+
require_relative "base_include_filter"
|
4
4
|
|
5
5
|
module TraceViz
|
6
6
|
module Collectors
|
7
7
|
module Filters
|
8
|
-
class IncludeClassesFilter <
|
9
|
-
def initialize(
|
10
|
-
super()
|
11
|
-
@allowed_classes = options[:classes].map(&:to_s).freeze
|
12
|
-
end
|
13
|
-
|
14
|
-
def apply?(trace_data)
|
15
|
-
include_class?(trace_data.klass)
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
attr_reader :allowed_classes
|
21
|
-
|
22
|
-
def include_class?(klass)
|
23
|
-
allowed_classes.include?(klass.to_s)
|
8
|
+
class IncludeClassesFilter < BaseIncludeFilter
|
9
|
+
def initialize(classes:)
|
10
|
+
super(classes: classes)
|
24
11
|
end
|
25
12
|
end
|
26
13
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "trace_viz/trace_data/root_node"
|
4
|
+
|
5
|
+
module TraceViz
|
6
|
+
module TraceData
|
7
|
+
class HierarchyLinker
|
8
|
+
attr_reader :root
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@root = RootNode.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def link(trace_data)
|
15
|
+
return unless valid?(trace_data)
|
16
|
+
|
17
|
+
root.add_child(trace_data)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def valid?(trace_data)
|
23
|
+
[
|
24
|
+
trace_data.event == :call,
|
25
|
+
trace_data.parent.nil?,
|
26
|
+
].all?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,12 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "trace_viz/utils/id_generator"
|
4
|
+
require "trace_viz/helpers/tracking_helper"
|
5
|
+
require_relative "base_matcher"
|
6
|
+
|
3
7
|
module TraceViz
|
4
8
|
module Collectors
|
5
9
|
module Matchers
|
6
|
-
class TracePointActionMatcher
|
7
|
-
|
8
|
-
@tracker = Context.for(:tracking)
|
9
|
-
end
|
10
|
+
class TracePointActionMatcher < BaseMatcher
|
11
|
+
include Helpers::TrackingHelper
|
10
12
|
|
11
13
|
def matches?(trace_point)
|
12
14
|
current_action_id == build_action_id(trace_point)
|
@@ -14,8 +16,6 @@ module TraceViz
|
|
14
16
|
|
15
17
|
private
|
16
18
|
|
17
|
-
attr_reader :tracker
|
18
|
-
|
19
19
|
def current_action
|
20
20
|
tracker.active_calls.current
|
21
21
|
end
|
@@ -25,11 +25,13 @@ module TraceViz
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def build_action_id(trace_point)
|
28
|
-
|
29
|
-
trace_point.self.object_id,
|
30
|
-
trace_point.callee_id,
|
31
|
-
|
28
|
+
Utils::IDGenerator.generate_action_id(
|
29
|
+
memory_id: trace_point.self.object_id,
|
30
|
+
action: trace_point.callee_id,
|
31
|
+
)
|
32
32
|
end
|
33
|
+
|
34
|
+
private :tracker, :active_call_stack, :current_call, :current_depth
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|