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.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +40 -37
  3. data/Steepfile +34 -0
  4. data/examples/eu_central_bank.rb +69 -0
  5. data/examples/example.cast +189 -285
  6. data/lib/trace_viz/adapters/base_adapter.rb +24 -1
  7. data/lib/trace_viz/adapters/trace_point_adapter.rb +3 -10
  8. data/lib/trace_viz/collectors/base_collector.rb +42 -35
  9. data/lib/trace_viz/collectors/filters/base_class_filter.rb +29 -0
  10. data/lib/trace_viz/collectors/filters/base_exclude_filter.rb +16 -0
  11. data/lib/trace_viz/collectors/filters/base_filter.rb +2 -8
  12. data/lib/trace_viz/collectors/filters/base_include_filter.rb +16 -0
  13. data/lib/trace_viz/collectors/filters/exclude_classes_filter.rb +4 -17
  14. data/lib/trace_viz/collectors/filters/exclude_default_classes_filter.rb +22 -26
  15. data/lib/trace_viz/collectors/filters/include_classes_filter.rb +4 -17
  16. data/lib/trace_viz/collectors/hierarchy_linker.rb +30 -0
  17. data/lib/trace_viz/collectors/matchers/base_matcher.rb +13 -0
  18. data/lib/trace_viz/collectors/matchers/trace_point_action_matcher.rb +12 -10
  19. data/lib/trace_viz/collectors/matchers/within_depth_matcher.rb +6 -5
  20. data/lib/trace_viz/collectors/steps/assign_depth_for_call_step.rb +30 -0
  21. data/lib/trace_viz/collectors/steps/assign_depth_for_return_step.rb +39 -0
  22. data/lib/trace_viz/collectors/steps/base_step.rb +27 -0
  23. data/lib/trace_viz/collectors/steps/build_hierarchy_step.rb +32 -0
  24. data/lib/trace_viz/collectors/{evaluators/hidden_evaluator.rb → steps/hidden_step.rb} +9 -5
  25. data/lib/trace_viz/collectors/steps/linking_step.rb +36 -0
  26. data/lib/trace_viz/collectors/{evaluators/filter_evaluator.rb → steps/validation_step.rb} +9 -6
  27. data/lib/trace_viz/collectors/steps.rb +10 -0
  28. data/lib/trace_viz/collectors/trace_pipeline.rb +26 -0
  29. data/lib/trace_viz/collectors/trace_pipeline_builder.rb +29 -0
  30. data/lib/trace_viz/collectors/trace_point_collector.rb +1 -11
  31. data/lib/trace_viz/config/validator.rb +6 -5
  32. data/lib/trace_viz/configuration.rb +3 -3
  33. data/lib/trace_viz/context/tracking_context.rb +4 -0
  34. data/lib/trace_viz/core/tracer.rb +2 -0
  35. data/lib/trace_viz/defaults/actions.rb +84 -0
  36. data/lib/trace_viz/defaults/colors.rb +61 -0
  37. data/lib/trace_viz/defaults/config.rb +89 -0
  38. data/lib/trace_viz/defaults/themes.rb +66 -0
  39. data/lib/trace_viz/defaults.rb +10 -129
  40. data/lib/trace_viz/exporters/base_exporter.rb +8 -11
  41. data/lib/trace_viz/exporters/export_manager.rb +33 -0
  42. data/lib/trace_viz/exporters/registry.rb +25 -0
  43. data/lib/trace_viz/exporters/text_exporter.rb +22 -0
  44. data/lib/trace_viz/formatters/base_formatter.rb +3 -30
  45. data/lib/trace_viz/formatters/export/base_formatter.rb +12 -0
  46. data/lib/trace_viz/formatters/export/formatter_factory.rb +27 -0
  47. data/lib/trace_viz/formatters/export/method_call_formatter.rb +21 -0
  48. data/lib/trace_viz/formatters/export/method_return_formatter.rb +22 -0
  49. data/lib/trace_viz/formatters/export/summary_group_formatter.rb +35 -0
  50. data/lib/trace_viz/formatters/helpers/depth_helper.rb +2 -8
  51. data/lib/trace_viz/formatters/helpers/indent_helper.rb +1 -1
  52. data/lib/trace_viz/formatters/helpers/log/color_helper.rb +23 -0
  53. data/lib/trace_viz/formatters/helpers/log/depth_helper.rb +22 -0
  54. data/lib/trace_viz/formatters/helpers/log/method_name_helper.rb +29 -0
  55. data/lib/trace_viz/formatters/helpers/log/params_helper.rb +51 -0
  56. data/lib/trace_viz/formatters/helpers/log/result_helper.rb +27 -0
  57. data/lib/trace_viz/formatters/helpers/log/summary/params_helper.rb +53 -0
  58. data/lib/trace_viz/formatters/helpers/method_details_helper.rb +1 -1
  59. data/lib/trace_viz/formatters/helpers/params_helper.rb +26 -9
  60. data/lib/trace_viz/formatters/helpers/result_helper.rb +1 -1
  61. data/lib/trace_viz/formatters/helpers/source_helper.rb +2 -1
  62. data/lib/trace_viz/formatters/helpers/summary/params_helper.rb +41 -0
  63. data/lib/trace_viz/formatters/helpers/summary/source_helper.rb +24 -0
  64. data/lib/trace_viz/formatters/helpers/time_helper.rb +2 -2
  65. data/lib/trace_viz/formatters/helpers.rb +10 -0
  66. data/lib/trace_viz/formatters/log/base_formatter.rb +13 -0
  67. data/lib/trace_viz/formatters/log/formatter_factory.rb +27 -0
  68. data/lib/trace_viz/formatters/log/method_call_formatter.rb +34 -0
  69. data/lib/trace_viz/formatters/log/method_return_formatter.rb +24 -0
  70. data/lib/trace_viz/formatters/log/summary_group_formatter.rb +40 -0
  71. data/lib/trace_viz/formatters/log/verbose_formatter.rb +14 -0
  72. data/lib/trace_viz/formatters/trace_data_formatter.rb +24 -0
  73. data/lib/trace_viz/helpers/config_helper.rb +13 -0
  74. data/lib/trace_viz/helpers/trace_point/param_helper.rb +98 -0
  75. data/lib/trace_viz/helpers/tracking_helper.rb +26 -0
  76. data/lib/trace_viz/helpers.rb +9 -0
  77. data/lib/trace_viz/logger.rb +9 -20
  78. data/lib/trace_viz/loggers/base_logger.rb +29 -0
  79. data/lib/trace_viz/loggers/log_level_resolver.rb +18 -0
  80. data/lib/trace_viz/loggers/logging_manager.rb +46 -0
  81. data/lib/trace_viz/loggers/post_collection_logger.rb +39 -0
  82. data/lib/trace_viz/loggers/trace_logger.rb +17 -18
  83. data/lib/trace_viz/loggers/trace_stats_logger.rb +28 -14
  84. data/lib/trace_viz/renderers/base_renderer.rb +24 -0
  85. data/lib/trace_viz/renderers/render_context.rb +18 -0
  86. data/lib/trace_viz/renderers/renderer_factory.rb +41 -0
  87. data/lib/trace_viz/renderers/summary/node_processor.rb +82 -0
  88. data/lib/trace_viz/renderers/summary_renderer.rb +22 -0
  89. data/lib/trace_viz/renderers/verbose_renderer.rb +29 -0
  90. data/lib/trace_viz/shared/renderer_helper.rb +46 -0
  91. data/lib/trace_viz/shared.rb +8 -0
  92. data/lib/trace_viz/trace_data/base.rb +16 -23
  93. data/lib/trace_viz/trace_data/node.rb +33 -0
  94. data/lib/trace_viz/trace_data/root_node.rb +20 -0
  95. data/lib/trace_viz/trace_data/summary_node.rb +49 -0
  96. data/lib/trace_viz/trace_data/trace_point/base.rb +22 -31
  97. data/lib/trace_viz/trace_data/trace_point/method_call.rb +22 -17
  98. data/lib/trace_viz/trace_data/trace_point/method_return.rb +21 -1
  99. data/lib/trace_viz/traits/depth_trackable.rb +13 -0
  100. data/lib/trace_viz/traits/identifiable.rb +25 -0
  101. data/lib/trace_viz/traits/time_trackable.rb +13 -0
  102. data/lib/trace_viz/traits.rb +10 -0
  103. data/lib/trace_viz/utils/colorize.rb +6 -6
  104. data/lib/trace_viz/utils/format_utils/key_value_formatter.rb +37 -0
  105. data/lib/trace_viz/utils/format_utils/value_truncator.rb +74 -0
  106. data/lib/trace_viz/utils/format_utils.rb +10 -53
  107. data/lib/trace_viz/utils/id_generator.rb +35 -0
  108. data/lib/trace_viz/version.rb +1 -1
  109. data/sig/adapters/base_adapter.rbs +11 -0
  110. data/sig/adapters/trace_point_adapter.rbs +13 -0
  111. data/sig/collectors/filters/registry.rbs +13 -0
  112. data/sig/collectors/trace_point_collector.rbs +17 -0
  113. data/sig/config/copier.rbs +15 -0
  114. data/sig/config/validator.rbs +18 -0
  115. data/sig/configuration.rbs +22 -0
  116. data/sig/context/base_context.rbs +9 -0
  117. data/sig/context/config_context.rbs +13 -0
  118. data/sig/context/manager.rbs +10 -0
  119. data/sig/context/map.rbs +13 -0
  120. data/sig/context.rbs +5 -0
  121. data/sig/core/tracer.rbs +7 -0
  122. data/sig/core.rbs +4 -0
  123. data/sig/defaults.rbs +17 -0
  124. data/sig/errors.rbs +13 -0
  125. data/sig/logger.rbs +33 -0
  126. data/sig/trace_viz.rbs +1 -2
  127. data/sig/utils/colorize.rbs +8 -0
  128. data/sig/utils/format_utils/key_value_formatter.rbs +16 -0
  129. data/sig/utils/format_utils/value_truncator.rbs +19 -0
  130. data/sig/utils/format_utils.rbs +8 -0
  131. data/sig/version.rbs +3 -0
  132. metadata +97 -18
  133. data/lib/trace_viz/collectors/depth_manager.rb +0 -37
  134. data/lib/trace_viz/collectors/evaluators/base_evaluator.rb +0 -23
  135. data/lib/trace_viz/exporters/formatters/base_formatter.rb +0 -12
  136. data/lib/trace_viz/exporters/formatters/method_call_formatter.rb +0 -21
  137. data/lib/trace_viz/exporters/formatters/method_return_formatter.rb +0 -22
  138. data/lib/trace_viz/exporters/transformers/base_transformer.rb +0 -25
  139. data/lib/trace_viz/exporters/transformers/text_transformer.rb +0 -28
  140. data/lib/trace_viz/loggers/trace_builder.rb +0 -30
  141. data/lib/trace_viz/loggers/trace_formatters/base_formatter.rb +0 -32
  142. data/lib/trace_viz/loggers/trace_formatters/method_call_formatter.rb +0 -21
  143. data/lib/trace_viz/loggers/trace_formatters/method_return_formatter.rb +0 -22
@@ -1,138 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module TraceViz
4
- class Defaults
5
- COLORS = {
6
- reset: "\e[0m",
7
- bold: "\e[1m",
8
- dim: "\e[2m",
9
- underline: "\e[4m",
10
- reverse: "\e[7m",
11
- black: "\e[30m",
12
- red: "\e[31m",
13
- green: "\e[32m",
14
- yellow: "\e[33m",
15
- blue: "\e[34m",
16
- magenta: "\e[35m",
17
- cyan: "\e[36m",
18
- light_gray: "\e[37m",
19
- dark_gray: "\e[90m",
20
- light_red: "\e[91m",
21
- light_green: "\e[92m",
22
- light_yellow: "\e[93m",
23
- light_blue: "\e[94m",
24
- light_magenta: "\e[95m",
25
- light_cyan: "\e[96m",
26
- white: "\e[97m",
27
- dim_light_gray: "\e[2;37m",
28
- }.freeze
29
-
30
- ACTION_EMOJIS = {
31
- default: "",
32
- info: "ℹ️",
33
- success: "✅",
34
- error: "❌",
35
- warn: "⚠️",
36
- start: "🚀",
37
- processing: "🔄",
38
- finish: "🏁",
39
- exported: "📤",
40
- skipped: "⏩",
41
- stats: "📊",
42
- }.freeze
43
-
44
- ACTION_COLORS = {
45
- default: :reset,
46
- info: :cyan,
47
- success: :green,
48
- error: :light_red,
49
- warn: :yellow,
50
- start: :light_cyan,
51
- processing: :dim_light_gray,
52
- finish: :light_magenta,
53
- exported: :light_green,
54
- skipped: :dark_gray,
55
- stats: :underline,
56
- }.freeze
57
-
58
- CONFIG = {
59
- general: {
60
- tab_size: 2,
61
- show_indent: true,
62
- show_depth: true,
63
- max_display_depth: 3,
64
- show_method_name: true,
65
- },
66
- source_location: {
67
- show: false,
68
- truncate_length: 100,
69
- },
70
- params: {
71
- show: true,
72
- mode: :name_and_value,
73
- truncate_values: 50,
74
- },
75
- result: {
76
- show: true,
77
- truncate_length: 50,
78
- },
79
- execution: {
80
- show_time: true,
81
- show_trace_events: [:call, :return],
82
- },
83
- filters: [
84
- :exclude_internal_call,
85
- # :exclude_default_classes,
86
- # :exclude_rails_framework,
87
- # include_classes: {
88
- # classes: [],
89
- # },
90
- # exclude_classes: {
91
- # classes: [],
92
- # },
93
- # include_gems: {
94
- # app_running: true,
95
- # app_path: Dir.pwd,
96
- # gems: [],
97
- # },
98
- # exclude_gems: {
99
- # gems: [],
100
- # },
101
- ],
102
- export: {
103
- enabled: true,
104
- path: "tmp",
105
- format: :txt,
106
- overwrite: false,
107
- },
108
- }.freeze
3
+ require_relative "defaults/config"
4
+ require_relative "defaults/colors"
5
+ require_relative "defaults/themes"
6
+ require_relative "defaults/actions"
109
7
 
110
- VALID_PARAM_MODES = [:name_and_value, :name_only, :value_only].freeze
111
- VALID_EXPORT_FORMATS = [:txt, :json, :yml].freeze
8
+ module TraceViz
9
+ module Defaults
10
+ @action_colors = Actions::COLORS.dup
112
11
 
113
12
  class << self
114
- def colors
115
- COLORS
116
- end
117
-
118
- def action_colors
119
- ACTION_COLORS
120
- end
121
-
122
- def action_emojis
123
- ACTION_EMOJIS
124
- end
125
-
126
- def fetch_defaults
127
- CONFIG.dup
128
- end
129
-
130
- def valid_param_modes
131
- VALID_PARAM_MODES
132
- end
13
+ attr_reader :action_colors
133
14
 
134
- def valid_export_formats
135
- VALID_EXPORT_FORMATS
15
+ def action_colors=(new_colors)
16
+ @action_colors.merge!(new_colors)
136
17
  end
137
18
  end
138
19
  end
@@ -1,18 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "fileutils"
4
-
5
- require "trace_viz/context"
6
- require_relative "transformers/text_transformer"
4
+ require "trace_viz/helpers"
5
+ require "trace_viz/shared"
7
6
 
8
7
  module TraceViz
9
8
  module Exporters
10
9
  class BaseExporter
10
+ include Helpers::ConfigHelper
11
+ include Shared::RendererHelper
12
+
11
13
  def initialize(collector)
12
- @config = Context.for(:config).configuration
13
14
  @export_config = config.export
14
15
  @logger = config.logger
15
- @data = transform_collector_data(collector)
16
+
17
+ @collector = collector
16
18
  end
17
19
 
18
20
  def export
@@ -32,12 +34,7 @@ module TraceViz
32
34
 
33
35
  private
34
36
 
35
- attr_reader :config, :export_config, :logger, :data
36
-
37
- def transform_collector_data(collector)
38
- transformer = Transformers::TextTransformer.new(collector)
39
- transformer.transform
40
- end
37
+ attr_reader :export_config, :logger, :collector
41
38
 
42
39
  def content
43
40
  raise NotImplementedError
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "trace_viz/helpers"
4
+ require_relative "registry"
5
+
6
+ module TraceViz
7
+ module Exporters
8
+ class ExportManager
9
+ include Helpers::ConfigHelper
10
+
11
+ def export(collector)
12
+ return unless export_enabled?
13
+
14
+ exporter = build_exporter(collector)
15
+ exporter.export
16
+ end
17
+
18
+ private
19
+
20
+ def build_exporter(collector)
21
+ Registry.build(export_format, collector)
22
+ end
23
+
24
+ def export_format
25
+ config.export[:format]
26
+ end
27
+
28
+ def export_enabled?
29
+ config.export[:enabled]
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "text_exporter"
4
+
5
+ module TraceViz
6
+ module Exporters
7
+ class Registry
8
+ EXPORTS = {
9
+ txt: TextExporter,
10
+ }
11
+
12
+ class << self
13
+ def build(format, *options)
14
+ raise ArgumentError unless supported_formats.include?(format)
15
+
16
+ EXPORTS[format].new(*options)
17
+ end
18
+
19
+ def supported_formats
20
+ EXPORTS.keys
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,15 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "base_exporter"
4
+ require "trace_viz/renderers/renderer_factory"
5
+ require "trace_viz/renderers/render_context"
6
+ require "trace_viz/formatters/export/formatter_factory"
4
7
 
5
8
  module TraceViz
6
9
  module Exporters
7
10
  class TextExporter < BaseExporter
11
+ def initialize(collector)
12
+ super(collector)
13
+
14
+ @renderer = build_renderer(collector, Formatters::Export::FormatterFactory)
15
+ end
16
+
8
17
  private
9
18
 
19
+ attr_reader :renderer
20
+
10
21
  def content
11
22
  data.join("\n")
12
23
  end
24
+
25
+ def data
26
+ process_lines(renderer.to_lines) { |line| process_line(line) }
27
+ end
28
+
29
+ def process_line(line)
30
+ [
31
+ line[:line],
32
+ *process_lines(line[:nested_lines]) { |nested| process_line(nested) },
33
+ ].compact
34
+ end
13
35
  end
14
36
  end
15
37
  end
@@ -1,42 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "helpers/indent_helper"
4
- require_relative "helpers/depth_helper"
5
- require_relative "helpers/time_helper"
6
- require_relative "helpers/params_helper"
7
- require_relative "helpers/source_helper"
8
- require_relative "helpers/result_helper"
9
- require_relative "helpers/method_details_helper"
3
+ require "trace_viz/helpers"
10
4
 
11
5
  module TraceViz
12
6
  module Formatters
13
7
  class BaseFormatter
14
- #
15
- # General formatting methods for TraceData::Base
16
- # These methods are used to format the output of the trace data
17
- # based on the configuration settings.
18
- #
8
+ include Helpers::ConfigHelper
19
9
 
20
- include Helpers::IndentHelper
21
- include Helpers::DepthHelper
22
- include Helpers::TimeHelper
23
- include Helpers::ParamsHelper
24
- include Helpers::SourceHelper
25
- include Helpers::ResultHelper
26
- include Helpers::MethodDetailsHelper
27
-
28
- def initialize(trace_data)
29
- @trace_data = trace_data
30
- @config = @trace_data.config
31
- end
32
-
33
- def format
10
+ def call
34
11
  raise NotImplementedError
35
12
  end
36
-
37
- private
38
-
39
- attr_reader :trace_data, :config
40
13
  end
41
14
  end
42
15
  end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../trace_data_formatter"
4
+
5
+ module TraceViz
6
+ module Formatters
7
+ module Export
8
+ class BaseFormatter < TraceDataFormatter
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "method_call_formatter"
4
+ require_relative "method_return_formatter"
5
+ require_relative "summary_group_formatter"
6
+
7
+ module TraceViz
8
+ module Formatters
9
+ module Export
10
+ class FormatterFactory
11
+ FORMATTERS = {
12
+ call: MethodCallFormatter.new,
13
+ return: MethodReturnFormatter.new,
14
+ summary_group: SummaryGroupFormatter.new,
15
+ }.freeze
16
+
17
+ class << self
18
+ def fetch_formatter(key)
19
+ FORMATTERS.fetch(key) do
20
+ raise ArgumentError, "Unsupported factory key: #{key}"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_formatter"
4
+
5
+ module TraceViz
6
+ module Formatters
7
+ module Export
8
+ class MethodCallFormatter < BaseFormatter
9
+ def call(trace_data)
10
+ [
11
+ indent_representation(trace_data),
12
+ depth_representation(trace_data),
13
+ method_name_representation(trace_data),
14
+ source_location_representation(trace_data),
15
+ params_representation(trace_data),
16
+ ].compact.join(" ")
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_formatter"
4
+
5
+ module TraceViz
6
+ module Formatters
7
+ module Export
8
+ class MethodReturnFormatter < BaseFormatter
9
+ def call(trace_data)
10
+ [
11
+ indent_representation(trace_data),
12
+ depth_representation(trace_data),
13
+ method_name_representation(trace_data),
14
+ result_representation(trace_data),
15
+ source_location_representation(trace_data),
16
+ execution_time_representation(trace_data),
17
+ ].compact.join(" ")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_formatter"
4
+
5
+ module TraceViz
6
+ module Formatters
7
+ module Export
8
+ class SummaryGroupFormatter < BaseFormatter
9
+ include Helpers::Summary::ParamsHelper
10
+ include Helpers::Summary::SourceHelper
11
+
12
+ def call(trace_data)
13
+ [
14
+ indent_representation(trace_data),
15
+ depth_representation(trace_data),
16
+ Defaults::Actions.emoji_for(:processing),
17
+ method_name_representation(trace_data),
18
+ source_location_representation(trace_data),
19
+ format_params_template(trace_data, config),
20
+ summary_info(trace_data),
21
+ ].compact.join(" ")
22
+ end
23
+
24
+ private
25
+
26
+ def summary_info(trace_data)
27
+ "[Summary: #{trace_data.count} calls | Avg Time: #{format(
28
+ "in %.6fms",
29
+ trace_data.average_duration,
30
+ )}]"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -4,16 +4,10 @@ module TraceViz
4
4
  module Formatters
5
5
  module Helpers
6
6
  module DepthHelper
7
- def depth_representation
7
+ def depth_representation(trace_data)
8
8
  return unless config.general[:show_depth]
9
9
 
10
- if trace_data.depth.zero?
11
- "depth[0]"
12
- elsif trace_data.event == :call
13
- "depth[#{trace_data.depth}]"
14
- elsif trace_data.event == :return
15
- "depth[#{trace_data.depth}]"
16
- end
10
+ "depth[#{trace_data.depth}]"
17
11
  end
18
12
  end
19
13
  end
@@ -4,7 +4,7 @@ module TraceViz
4
4
  module Formatters
5
5
  module Helpers
6
6
  module IndentHelper
7
- def indent_representation
7
+ def indent_representation(trace_data)
8
8
  return unless config.general[:show_indent] && config.general[:show_depth]
9
9
 
10
10
  " " * (config.general[:tab_size] * trace_data.depth)
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "trace_viz/utils/colorize"
4
+
5
+ module TraceViz
6
+ module Formatters
7
+ module Helpers
8
+ module Log
9
+ module ColorHelper
10
+ def colorize_for(text, action)
11
+ colors = Defaults::Actions.colors_for(action)
12
+
13
+ colorize(text, *colors)
14
+ end
15
+
16
+ def colorize(text, *colors)
17
+ Utils::Colorize.colorize(text, *colors)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TraceViz
4
+ module Formatters
5
+ module Helpers
6
+ module Log
7
+ module DepthHelper
8
+ def format_depth(trace_data, config)
9
+ return unless config.general[:show_depth]
10
+
11
+ prefix = colorize_for("depth", :trace_depth_prefix)
12
+ open_block = colorize_for("[", :trace_depth_open)
13
+ number = colorize_for(trace_data.depth, :trace_depth_value)
14
+ close_block = colorize_for("]", :trace_depth_close)
15
+
16
+ [prefix, open_block, number, close_block].join
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TraceViz
4
+ module Formatters
5
+ module Helpers
6
+ module Log
7
+ module MethodNameHelper
8
+ def format_method_name(trace_data, config)
9
+ return unless config.general[:show_method_name]
10
+
11
+ "#{format_class_name(trace_data)}#{format_action_name(trace_data)}"
12
+ end
13
+
14
+ private
15
+
16
+ def format_class_name(trace_data)
17
+ klass = colorize_for(trace_data.klass, :trace_method_class)
18
+ method_sign = colorize_for("#", :trace_method_sign)
19
+ [klass, method_sign].join
20
+ end
21
+
22
+ def format_action_name(trace_data)
23
+ colorize_for(trace_data.action, :trace_method_action)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "trace_viz/utils/format_utils"
4
+
5
+ module TraceViz
6
+ module Formatters
7
+ module Helpers
8
+ module Log
9
+ module ParamsHelper
10
+ def format_params(trace_data, config)
11
+ return unless config.params[:show]
12
+
13
+ params = prepare_params(trace_data.params, config)
14
+ wrap_params(params, config)
15
+ end
16
+
17
+ private
18
+
19
+ def prepare_params(params, config)
20
+ params
21
+ .then { |p| truncate_values(p, config.params[:truncate_values]) }
22
+ .then { |p| colorize_keys_and_values(p) }
23
+ .then { |p| format_as_string(p, config.params[:mode]) }
24
+ end
25
+
26
+ def truncate_values(params, length)
27
+ return params unless length
28
+
29
+ params.transform_values { |value| Utils::FormatUtils.truncate_value(value, length) }
30
+ end
31
+
32
+ def colorize_keys_and_values(params)
33
+ params.transform_keys { |key| colorize_for(key.to_s, :trace_params_key) }
34
+ .transform_values { |value| colorize_for(value.to_s, :trace_params_value) }
35
+ end
36
+
37
+ def format_as_string(params, mode)
38
+ Utils::FormatUtils.format_key_value_pairs(params, mode)
39
+ end
40
+
41
+ def wrap_params(params_string, config)
42
+ return unless params_string
43
+
44
+ truncated = Utils::FormatUtils.truncate_value(params_string, config.params[:truncate_length])
45
+ "(#{truncated})"
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "trace_viz/utils/format_utils"
4
+
5
+ module TraceViz
6
+ module Formatters
7
+ module Helpers
8
+ module Log
9
+ module ResultHelper
10
+ def format_result(trace_data, config)
11
+ return unless config.result[:show]
12
+
13
+ truncated_result = Utils::FormatUtils.truncate_value(
14
+ trace_data.result.inspect,
15
+ config.result[:truncate_length],
16
+ )
17
+
18
+ prefix = colorize_for("#=>", :trace_result_prefix)
19
+ result = colorize_for(truncated_result, :trace_result_value)
20
+
21
+ [prefix, result].join(" ")
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end