trace_viz 0.0.2 → 1.0.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/README.md +40 -37
- 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/collectors/base_collector.rb +42 -35
- data/lib/trace_viz/collectors/filters/base_class_filter.rb +29 -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 +89 -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 +8 -11
- data/lib/trace_viz/exporters/export_manager.rb +33 -0
- data/lib/trace_viz/exporters/registry.rb +25 -0
- data/lib/trace_viz/exporters/text_exporter.rb +22 -0
- data/lib/trace_viz/formatters/base_formatter.rb +3 -30
- data/lib/trace_viz/formatters/export/base_formatter.rb +12 -0
- data/lib/trace_viz/formatters/export/formatter_factory.rb +27 -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/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 +51 -0
- data/lib/trace_viz/formatters/helpers/log/result_helper.rb +27 -0
- data/lib/trace_viz/formatters/helpers/log/summary/params_helper.rb +53 -0
- data/lib/trace_viz/formatters/helpers/method_details_helper.rb +1 -1
- data/lib/trace_viz/formatters/helpers/params_helper.rb +26 -9
- data/lib/trace_viz/formatters/helpers/result_helper.rb +1 -1
- data/lib/trace_viz/formatters/helpers/source_helper.rb +2 -1
- data/lib/trace_viz/formatters/helpers/summary/params_helper.rb +41 -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 +27 -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 +13 -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 +39 -0
- data/lib/trace_viz/loggers/trace_logger.rb +17 -18
- data/lib/trace_viz/loggers/trace_stats_logger.rb +28 -14
- data/lib/trace_viz/renderers/base_renderer.rb +24 -0
- data/lib/trace_viz/renderers/render_context.rb +18 -0
- data/lib/trace_viz/renderers/renderer_factory.rb +41 -0
- data/lib/trace_viz/renderers/summary/node_processor.rb +82 -0
- data/lib/trace_viz/renderers/summary_renderer.rb +22 -0
- data/lib/trace_viz/renderers/verbose_renderer.rb +29 -0
- data/lib/trace_viz/shared/renderer_helper.rb +46 -0
- data/lib/trace_viz/shared.rb +8 -0
- data/lib/trace_viz/trace_data/base.rb +16 -23
- data/lib/trace_viz/trace_data/node.rb +33 -0
- data/lib/trace_viz/trace_data/root_node.rb +20 -0
- data/lib/trace_viz/trace_data/summary_node.rb +49 -0
- data/lib/trace_viz/trace_data/trace_point/base.rb +22 -31
- data/lib/trace_viz/trace_data/trace_point/method_call.rb +22 -17
- 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/utils/colorize.rb +6 -6
- data/lib/trace_viz/utils/format_utils/key_value_formatter.rb +37 -0
- data/lib/trace_viz/utils/format_utils/value_truncator.rb +74 -0
- data/lib/trace_viz/utils/format_utils.rb +10 -53
- data/lib/trace_viz/utils/id_generator.rb +35 -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 +97 -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
@@ -1,14 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "trace_viz/traits"
|
4
|
+
require_relative "../node"
|
4
5
|
|
5
6
|
module TraceViz
|
6
7
|
module TraceData
|
7
8
|
module TracePoint
|
8
|
-
class Base < TraceData::
|
9
|
+
class Base < TraceData::Node
|
10
|
+
include Traits::Identifiable
|
11
|
+
|
9
12
|
attr_reader :trace_point,
|
10
|
-
:
|
11
|
-
:action_id,
|
13
|
+
:memory_id,
|
12
14
|
:event,
|
13
15
|
:klass,
|
14
16
|
:action,
|
@@ -19,18 +21,28 @@ module TraceViz
|
|
19
21
|
super()
|
20
22
|
|
21
23
|
@trace_point = trace_point
|
22
|
-
|
23
|
-
|
24
|
+
populate_attributes
|
25
|
+
assign_memory_id
|
24
26
|
assign_ids
|
25
27
|
end
|
26
28
|
|
27
29
|
def duration
|
28
|
-
|
30
|
+
0
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_h
|
34
|
+
super.merge(
|
35
|
+
{
|
36
|
+
id: id,
|
37
|
+
action_id: action_id,
|
38
|
+
memory_id: memory_id,
|
39
|
+
},
|
40
|
+
)
|
29
41
|
end
|
30
42
|
|
31
43
|
private
|
32
44
|
|
33
|
-
def
|
45
|
+
def populate_attributes
|
34
46
|
@event = trace_point.event
|
35
47
|
@klass = trace_point.defined_class
|
36
48
|
@action = trace_point.callee_id
|
@@ -38,29 +50,8 @@ module TraceViz
|
|
38
50
|
@line_number = trace_point.lineno
|
39
51
|
end
|
40
52
|
|
41
|
-
def
|
42
|
-
@
|
43
|
-
@action_id = generate_action_id
|
44
|
-
end
|
45
|
-
|
46
|
-
def memory_id
|
47
|
-
trace_point.self.object_id
|
48
|
-
end
|
49
|
-
|
50
|
-
def generate_unique_id
|
51
|
-
[
|
52
|
-
memory_id,
|
53
|
-
action,
|
54
|
-
path,
|
55
|
-
line_number,
|
56
|
-
].join("_")
|
57
|
-
end
|
58
|
-
|
59
|
-
def generate_action_id
|
60
|
-
[
|
61
|
-
memory_id,
|
62
|
-
action,
|
63
|
-
].join("_")
|
53
|
+
def assign_memory_id
|
54
|
+
@memory_id = trace_point.self.object_id
|
64
55
|
end
|
65
56
|
end
|
66
57
|
end
|
@@ -1,12 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "trace_viz/helpers/trace_point/param_helper"
|
3
4
|
require_relative "base"
|
4
5
|
|
5
6
|
module TraceViz
|
6
7
|
module TraceData
|
7
8
|
module TracePoint
|
8
9
|
class MethodCall < Base
|
9
|
-
|
10
|
+
include Helpers::TracePoint::ParamHelper
|
11
|
+
|
12
|
+
attr_reader :params, :method_return
|
10
13
|
|
11
14
|
def initialize(trace_point)
|
12
15
|
super(trace_point)
|
@@ -14,27 +17,29 @@ module TraceViz
|
|
14
17
|
populate_params
|
15
18
|
end
|
16
19
|
|
17
|
-
|
18
|
-
|
19
|
-
def populate_params
|
20
|
-
@params = extract_params(trace_point.binding)
|
20
|
+
def link(method_return)
|
21
|
+
@method_return = method_return
|
21
22
|
end
|
22
23
|
|
23
|
-
def
|
24
|
-
|
25
|
-
method.parameters.each_with_object({}) do |(_, name), hash|
|
26
|
-
next unless name
|
27
|
-
next if name.to_s.include?("*") # Skip invalid or special variable names
|
24
|
+
def duration
|
25
|
+
return 0 unless method_return
|
28
26
|
|
29
|
-
|
30
|
-
hash[name] = value
|
31
|
-
end
|
27
|
+
method_return.timestamp - timestamp
|
32
28
|
end
|
33
29
|
|
34
|
-
def
|
35
|
-
|
36
|
-
|
37
|
-
|
30
|
+
def to_h
|
31
|
+
super.merge(
|
32
|
+
{
|
33
|
+
params: params,
|
34
|
+
method_return_id: method_return&.id,
|
35
|
+
},
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def populate_params
|
42
|
+
@params = extract_params(trace_point.binding, action)
|
38
43
|
end
|
39
44
|
end
|
40
45
|
end
|
@@ -6,7 +6,7 @@ module TraceViz
|
|
6
6
|
module TraceData
|
7
7
|
module TracePoint
|
8
8
|
class MethodReturn < Base
|
9
|
-
attr_reader :result
|
9
|
+
attr_reader :result, :method_call
|
10
10
|
|
11
11
|
def initialize(trace_point)
|
12
12
|
super(trace_point)
|
@@ -14,6 +14,26 @@ module TraceViz
|
|
14
14
|
populate_result
|
15
15
|
end
|
16
16
|
|
17
|
+
def link(method_call)
|
18
|
+
@method_call = method_call
|
19
|
+
method_call.link(self)
|
20
|
+
end
|
21
|
+
|
22
|
+
def duration
|
23
|
+
return 0 unless method_call
|
24
|
+
|
25
|
+
timestamp - method_call.timestamp
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_h
|
29
|
+
super.merge(
|
30
|
+
{
|
31
|
+
result: result,
|
32
|
+
method_call_id: method_call&.id,
|
33
|
+
},
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
17
37
|
private
|
18
38
|
|
19
39
|
def populate_result
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "trace_viz/utils/id_generator"
|
4
|
+
|
5
|
+
module TraceViz
|
6
|
+
module Traits
|
7
|
+
module Identifiable
|
8
|
+
attr_reader :id, :action_id
|
9
|
+
|
10
|
+
def assign_ids
|
11
|
+
@id = Utils::IDGenerator.generate_unique_id(
|
12
|
+
memory_id: memory_id,
|
13
|
+
action: action,
|
14
|
+
path: path,
|
15
|
+
line_number: line_number,
|
16
|
+
)
|
17
|
+
|
18
|
+
@action_id = Utils::IDGenerator.generate_action_id(
|
19
|
+
memory_id: memory_id,
|
20
|
+
action: action,
|
21
|
+
)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -4,17 +4,17 @@ module TraceViz
|
|
4
4
|
module Utils
|
5
5
|
module Colorize
|
6
6
|
class << self
|
7
|
-
def colorize(text, *
|
8
|
-
return text if text.nil? ||
|
7
|
+
def colorize(text, *colors)
|
8
|
+
return text if text.nil? || colors.empty?
|
9
9
|
|
10
|
-
"#{build_color_sequence(
|
10
|
+
"#{build_color_sequence(colors)}#{text}#{Defaults::Colors.fetch(:default)}"
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
def build_color_sequence(
|
16
|
-
|
17
|
-
.map { |
|
15
|
+
def build_color_sequence(colors)
|
16
|
+
colors
|
17
|
+
.map { |color| Defaults::Colors.fetch(color) }
|
18
18
|
.compact
|
19
19
|
.join
|
20
20
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TraceViz
|
4
|
+
module Utils
|
5
|
+
module FormatUtils
|
6
|
+
class KeyValueFormatter
|
7
|
+
DEFAULT_MODE = :name_and_value
|
8
|
+
|
9
|
+
def initialize(mode: DEFAULT_MODE)
|
10
|
+
@mode = mode
|
11
|
+
@formatter = build_formatter
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(data)
|
15
|
+
validate_input(data)
|
16
|
+
data.map { |key, value| @formatter.call(key, value) }.join(", ")
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def validate_input(data)
|
22
|
+
unless data.is_a?(Hash)
|
23
|
+
raise ArgumentError, "Expected a Hash for key-value formatting, got #{data.class}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_formatter
|
28
|
+
{
|
29
|
+
name_and_value: ->(key, value) { "#{key}: #{value}" },
|
30
|
+
name_only: ->(key, _) { key.to_s },
|
31
|
+
value_only: ->(_, value) { value.to_s },
|
32
|
+
}.fetch(@mode) { raise ArgumentError, "Invalid mode: #{@mode}" }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TraceViz
|
4
|
+
module Utils
|
5
|
+
module FormatUtils
|
6
|
+
class ValueTruncator
|
7
|
+
DEFAULT_LENGTH = -1
|
8
|
+
VALID_DIRECTIONS = [:start, :end].freeze
|
9
|
+
|
10
|
+
def initialize(length: DEFAULT_LENGTH, direction: :end)
|
11
|
+
@length = length
|
12
|
+
@direction = validate_direction(direction)
|
13
|
+
end
|
14
|
+
|
15
|
+
def truncate(value)
|
16
|
+
return value unless valid_length?
|
17
|
+
|
18
|
+
case value
|
19
|
+
when String then truncate_string(value)
|
20
|
+
when Array then truncate_array(value)
|
21
|
+
when Hash then truncate_hash(value)
|
22
|
+
else truncate_generic(value)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :length, :direction
|
29
|
+
|
30
|
+
def validate_direction(direction)
|
31
|
+
return direction if VALID_DIRECTIONS.include?(direction)
|
32
|
+
|
33
|
+
raise ArgumentError, "Invalid direction: #{direction}. Valid options are :start or :end."
|
34
|
+
end
|
35
|
+
|
36
|
+
def valid_length?
|
37
|
+
length.is_a?(Integer) && length.positive?
|
38
|
+
end
|
39
|
+
|
40
|
+
def truncate_string(string)
|
41
|
+
return string if string.length <= length
|
42
|
+
|
43
|
+
case direction
|
44
|
+
when :start then "...#{string[-length..]}"
|
45
|
+
when :end then "#{string[0, length]}..."
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def truncate_array(array)
|
50
|
+
truncated = array.take(length)
|
51
|
+
truncated << "..." if array.size > length
|
52
|
+
truncated
|
53
|
+
end
|
54
|
+
|
55
|
+
def truncate_hash(hash)
|
56
|
+
keys = hash.keys.take(length)
|
57
|
+
truncated_pairs = keys.map { |key| "#{key}: #{truncate(hash[key])}" }
|
58
|
+
truncated_pairs << "..." if hash.size > length
|
59
|
+
"{#{truncated_pairs.join(", ")}}"
|
60
|
+
end
|
61
|
+
|
62
|
+
def truncate_generic(object)
|
63
|
+
object_str = object.inspect
|
64
|
+
return object_str if object_str.length <= length
|
65
|
+
|
66
|
+
case direction
|
67
|
+
when :start then "#{object.class}(...#{object_str[-length..]})"
|
68
|
+
when :end then "#{object.class}(#{object_str[0, length]}...)"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -1,65 +1,22 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "format_utils/key_value_formatter"
|
4
|
+
require_relative "format_utils/value_truncator"
|
5
|
+
|
3
6
|
module TraceViz
|
4
7
|
module Utils
|
5
8
|
module FormatUtils
|
6
9
|
class << self
|
7
|
-
# Formats
|
10
|
+
# Formats key-value pairs based on the provided mode
|
8
11
|
def format_key_value_pairs(data, mode)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# Determines how key-value pairs are displayed based on the mode
|
13
|
-
def display_mode(mode)
|
14
|
-
{
|
15
|
-
name_and_value: ->(name, value) { "#{name}: #{value}" },
|
16
|
-
name_only: ->(name, _) { name.to_s },
|
17
|
-
value_only: ->(_, value) { value },
|
18
|
-
}.fetch(mode)
|
19
|
-
end
|
20
|
-
|
21
|
-
# Truncates a string or array to the specified length
|
22
|
-
def truncate_value(value, length)
|
23
|
-
return value unless length.is_a?(Integer) && length.positive?
|
24
|
-
|
25
|
-
case value
|
26
|
-
when String
|
27
|
-
truncate_string(value, length)
|
28
|
-
when Array
|
29
|
-
truncate_array(value, length)
|
30
|
-
when Hash
|
31
|
-
truncate_hash(value, length)
|
32
|
-
else
|
33
|
-
truncate_object(value, length)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def truncate_string(string, length)
|
40
|
-
string.length > length ? "#{string[0, length]}..." : string
|
41
|
-
end
|
42
|
-
|
43
|
-
def truncate_array(array, length)
|
44
|
-
truncated_array = array.take(length)
|
45
|
-
truncated_array << "..." if array.size > length
|
46
|
-
truncated_array
|
47
|
-
end
|
48
|
-
|
49
|
-
def truncate_hash(hash, length)
|
50
|
-
keys = hash.keys.take(length)
|
51
|
-
truncated_pairs = keys.map { |key| "#{key}: #{truncate_value(hash[key], length)}" }
|
52
|
-
truncated_pairs << "..." if hash.size > length
|
53
|
-
"{#{truncated_pairs.join(", ")}}"
|
12
|
+
formatter = KeyValueFormatter.new(mode: mode)
|
13
|
+
formatter.call(data)
|
54
14
|
end
|
55
15
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
else
|
61
|
-
object_string.length > length ? "#{object.class}(#{object_string[0, length]}...)" : object_string
|
62
|
-
end
|
16
|
+
# Truncates a value to the specified length
|
17
|
+
def truncate_value(value, length, direction: :end)
|
18
|
+
truncator = ValueTruncator.new(length: length, direction: direction)
|
19
|
+
truncator.truncate(value)
|
63
20
|
end
|
64
21
|
end
|
65
22
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module TraceViz
|
4
|
+
module Utils
|
5
|
+
class IDGenerator
|
6
|
+
ID_DELIMITER = "|"
|
7
|
+
COMPONENT_DELIMITER = ":"
|
8
|
+
|
9
|
+
class << self
|
10
|
+
def generate_unique_id(memory_id:, action:, path:, line_number:)
|
11
|
+
join_with_delimiters(
|
12
|
+
memory: memory_id,
|
13
|
+
action: action,
|
14
|
+
path: path,
|
15
|
+
line: line_number,
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
def generate_action_id(memory_id:, action:)
|
20
|
+
join_with_delimiters(
|
21
|
+
memory: memory_id,
|
22
|
+
action: action,
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def join_with_delimiters(**components)
|
29
|
+
components.map { |key, value| "#{key}#{COMPONENT_DELIMITER}#{value}" }
|
30
|
+
.join(ID_DELIMITER)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/trace_viz/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
module TraceViz
|
2
|
+
module Adapters
|
3
|
+
class TracePointAdapter < BaseAdapter
|
4
|
+
def initialize: () -> void
|
5
|
+
|
6
|
+
def trace: () { () -> void } -> void
|
7
|
+
|
8
|
+
private attr_reader collector: TraceViz::Collectors::TracePointCollector
|
9
|
+
|
10
|
+
private def exporter: () -> untyped
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module TraceViz
|
2
|
+
module Collectors
|
3
|
+
module Filters
|
4
|
+
class Registry
|
5
|
+
FILTERS: Hash[Symbol, untyped]
|
6
|
+
|
7
|
+
def self.build: (Array[Symbol | Hash[Symbol, untyped]] filters) -> Array[untyped]
|
8
|
+
|
9
|
+
private def self.fetch_filter_class: (Symbol filter_key) -> untyped
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module TraceViz
|
2
|
+
module Collectors
|
3
|
+
class TracePointCollector
|
4
|
+
def initialize: () -> void
|
5
|
+
|
6
|
+
private attr_reader action_matcher: TraceViz::Matchers::TracePointActionMatcher
|
7
|
+
private attr_reader within_depth_matcher: TraceViz::Matchers::WithinDepthMatcher
|
8
|
+
|
9
|
+
private def collectible?: (untyped) -> bool
|
10
|
+
private def build_trace: (untyped) -> untyped
|
11
|
+
private def update_trace_depth: (untyped) -> void
|
12
|
+
private def match_action?: (untyped) -> bool
|
13
|
+
private def within_depth?: () -> bool
|
14
|
+
private def depth_manager: () -> TraceViz::Collectors::DepthManager
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module TraceViz
|
2
|
+
module Config
|
3
|
+
class Copier
|
4
|
+
@origin_configuration: untyped
|
5
|
+
@settings: Hash[Symbol, untyped]
|
6
|
+
|
7
|
+
def initialize: (untyped configuration) -> void
|
8
|
+
def copy: () -> untyped
|
9
|
+
|
10
|
+
private def deep_copy: (untyped value) -> untyped
|
11
|
+
private attr_reader origin_configuration: untyped
|
12
|
+
private attr_reader settings: Hash[Symbol, untyped]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module TraceViz
|
2
|
+
module Config
|
3
|
+
class Validator
|
4
|
+
FILTER_KEYS: Array[Symbol]
|
5
|
+
|
6
|
+
@validations: Hash[Symbol, ^(untyped) -> void]
|
7
|
+
|
8
|
+
def initialize: () -> void
|
9
|
+
def validate: (Symbol group, Symbol value) -> void
|
10
|
+
|
11
|
+
private def validate_params: (Hash[Symbol, untyped] value) -> void
|
12
|
+
private def validate_result: (Hash[Symbol, untyped] value) -> void
|
13
|
+
private def validate_source_location: (Hash[Symbol, untyped] value) -> void
|
14
|
+
private def validate_filters: (Array[untyped] filters) -> void
|
15
|
+
private def validate_export: (Hash[Symbol, untyped] value) -> void
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module TraceViz
|
2
|
+
class Configuration
|
3
|
+
@logger: TraceViz::Logger
|
4
|
+
@validator: TraceViz::Config::Validator
|
5
|
+
@settings: Hash[Symbol, untyped]
|
6
|
+
|
7
|
+
attr_reader logger: TraceViz::Logger
|
8
|
+
attr_reader settings: Hash[Symbol, untyped]
|
9
|
+
|
10
|
+
def initialize: () -> void
|
11
|
+
def []: (Symbol key) -> untyped
|
12
|
+
def update: (Symbol group, untyped values) -> void
|
13
|
+
def reset_defaults: () -> void
|
14
|
+
def dup: () -> TraceViz::Config::Copier
|
15
|
+
|
16
|
+
private def define_dynamic_accessors: () -> void
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.configuration: () -> TraceViz::Configuration
|
20
|
+
def self.configure: () { (TraceViz::Configuration) -> void } -> void
|
21
|
+
def self.logger: () -> TraceViz::Logger
|
22
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module TraceViz
|
2
|
+
module Context
|
3
|
+
class ConfigContext
|
4
|
+
attr_reader configuration: untyped
|
5
|
+
|
6
|
+
def initialize: (options: Hash[Symbol, untyped]) -> void
|
7
|
+
|
8
|
+
def temp_configuration: () -> untyped
|
9
|
+
|
10
|
+
def apply_options: (Hash[Symbol, untyped]) -> untyped
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module TraceViz
|
2
|
+
module Context
|
3
|
+
class Manager
|
4
|
+
def self.enter_contexts: (Hash[Symbol, untyped] contexts) -> void
|
5
|
+
def self.exit_contexts: (*Symbol keys) -> void
|
6
|
+
def self.with_contexts: (?Hash[Symbol, untyped] contexts) { () -> void } -> void
|
7
|
+
def self.fetch_context: (Symbol key) -> untyped
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
data/sig/context/map.rbs
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module TraceViz
|
2
|
+
module Context
|
3
|
+
class Map
|
4
|
+
@context_map: Hash[Symbol, untyped]
|
5
|
+
|
6
|
+
def initialize: () -> void
|
7
|
+
def replace: (Hash[Symbol, untyped] new_map) -> void
|
8
|
+
def fetch: (Symbol key) -> untyped
|
9
|
+
def remove: (*Symbol keys) -> void
|
10
|
+
def reset: () -> void
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|