makit 0.0.139 → 0.0.140
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 +41 -41
- data/exe/makit +5 -5
- data/lib/makit/apache.rb +28 -28
- data/lib/makit/auto.rb +48 -48
- data/lib/makit/cli/build_commands.rb +500 -500
- data/lib/makit/cli/generators/base_generator.rb +74 -74
- data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
- data/lib/makit/cli/generators/generator_factory.rb +49 -49
- data/lib/makit/cli/generators/node_generator.rb +50 -50
- data/lib/makit/cli/generators/ruby_generator.rb +77 -77
- data/lib/makit/cli/generators/rust_generator.rb +50 -50
- data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
- data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
- data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
- data/lib/makit/cli/generators/templates/ruby/gemspec.rb +40 -40
- data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
- data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
- data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
- data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
- data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
- data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
- data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
- data/lib/makit/cli/main.rb +69 -67
- data/lib/makit/cli/project_commands.rb +868 -868
- data/lib/makit/cli/repository_commands.rb +661 -661
- data/lib/makit/cli/strategy_commands.rb +51 -0
- data/lib/makit/cli/utility_commands.rb +521 -521
- data/lib/makit/commands/factory.rb +359 -359
- data/lib/makit/commands/middleware/base.rb +73 -73
- data/lib/makit/commands/middleware/cache.rb +248 -248
- data/lib/makit/commands/middleware/command_logger.rb +312 -312
- data/lib/makit/commands/middleware/validator.rb +269 -269
- data/lib/makit/commands/request.rb +316 -316
- data/lib/makit/commands/result.rb +323 -323
- data/lib/makit/commands/runner.rb +385 -385
- data/lib/makit/commands/strategies/base.rb +171 -171
- data/lib/makit/commands/strategies/child_process.rb +1 -1
- data/lib/makit/commands/strategies/synchronous.rb +139 -139
- data/lib/makit/commands.rb +50 -50
- data/lib/makit/configuration/dotnet_project.rb +12 -12
- data/lib/makit/configuration/gitlab_helper.rb +58 -58
- data/lib/makit/configuration/project.rb +168 -168
- data/lib/makit/configuration/rakefile_helper.rb +43 -43
- data/lib/makit/configuration/step.rb +34 -34
- data/lib/makit/configuration/timeout.rb +74 -0
- data/lib/makit/configuration.rb +15 -14
- data/lib/makit/content/default_gitignore.rb +7 -7
- data/lib/makit/content/default_gitignore.txt +225 -225
- data/lib/makit/content/default_rakefile.rb +13 -13
- data/lib/makit/content/gem_rakefile.rb +16 -16
- data/lib/makit/context.rb +1 -1
- data/lib/makit/data.rb +49 -49
- data/lib/makit/directories.rb +140 -140
- data/lib/makit/directory.rb +262 -262
- data/lib/makit/docs/files.rb +89 -89
- data/lib/makit/docs/rake.rb +102 -102
- data/lib/makit/dotnet/cli.rb +69 -69
- data/lib/makit/dotnet/project.rb +217 -217
- data/lib/makit/dotnet/solution.rb +38 -38
- data/lib/makit/dotnet/solution_classlib.rb +239 -239
- data/lib/makit/dotnet/solution_console.rb +264 -264
- data/lib/makit/dotnet/solution_maui.rb +354 -354
- data/lib/makit/dotnet/solution_wasm.rb +275 -275
- data/lib/makit/dotnet/solution_wpf.rb +304 -304
- data/lib/makit/dotnet.rb +102 -102
- data/lib/makit/email.rb +90 -90
- data/lib/makit/environment.rb +142 -142
- data/lib/makit/examples/runner.rb +370 -370
- data/lib/makit/exceptions.rb +45 -45
- data/lib/makit/fileinfo.rb +24 -24
- data/lib/makit/files.rb +43 -43
- data/lib/makit/gems.rb +40 -40
- data/lib/makit/git/cli.rb +54 -54
- data/lib/makit/git/repository.rb +90 -90
- data/lib/makit/git.rb +98 -98
- data/lib/makit/gitlab_runner.rb +59 -59
- data/lib/makit/humanize.rb +137 -137
- data/lib/makit/indexer.rb +47 -47
- data/lib/makit/logging/configuration.rb +308 -308
- data/lib/makit/logging/format_registry.rb +84 -84
- data/lib/makit/logging/formatters/base.rb +39 -39
- data/lib/makit/logging/formatters/console_formatter.rb +140 -140
- data/lib/makit/logging/formatters/json_formatter.rb +65 -65
- data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
- data/lib/makit/logging/formatters/text_formatter.rb +64 -64
- data/lib/makit/logging/log_request.rb +119 -119
- data/lib/makit/logging/logger.rb +199 -199
- data/lib/makit/logging/sinks/base.rb +91 -91
- data/lib/makit/logging/sinks/console.rb +72 -72
- data/lib/makit/logging/sinks/file_sink.rb +92 -92
- data/lib/makit/logging/sinks/structured.rb +123 -123
- data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
- data/lib/makit/logging.rb +565 -565
- data/lib/makit/markdown.rb +75 -75
- data/lib/makit/mp/basic_object_mp.rb +17 -17
- data/lib/makit/mp/command_mp.rb +13 -13
- data/lib/makit/mp/command_request.mp.rb +17 -17
- data/lib/makit/mp/project_mp.rb +199 -199
- data/lib/makit/mp/string_mp.rb +191 -191
- data/lib/makit/nuget.rb +74 -74
- data/lib/makit/port.rb +32 -32
- data/lib/makit/process.rb +163 -163
- data/lib/makit/protoc.rb +107 -107
- data/lib/makit/rake/cli.rb +196 -196
- data/lib/makit/rake.rb +80 -80
- data/lib/makit/ruby/cli.rb +185 -185
- data/lib/makit/ruby.rb +25 -25
- data/lib/makit/secrets.rb +51 -51
- data/lib/makit/serializer.rb +130 -130
- data/lib/makit/services/builder.rb +186 -186
- data/lib/makit/services/error_handler.rb +226 -226
- data/lib/makit/services/repository_manager.rb +231 -231
- data/lib/makit/services/validator.rb +112 -112
- data/lib/makit/setup/classlib.rb +101 -101
- data/lib/makit/setup/gem.rb +268 -268
- data/lib/makit/setup/razorclasslib.rb +101 -101
- data/lib/makit/setup/runner.rb +54 -54
- data/lib/makit/setup.rb +5 -5
- data/lib/makit/show.rb +110 -110
- data/lib/makit/storage.rb +126 -126
- data/lib/makit/symbols.rb +170 -170
- data/lib/makit/task_info.rb +130 -130
- data/lib/makit/tasks/at_exit.rb +15 -15
- data/lib/makit/tasks/build.rb +22 -22
- data/lib/makit/tasks/clean.rb +13 -13
- data/lib/makit/tasks/configure.rb +10 -10
- data/lib/makit/tasks/format.rb +10 -10
- data/lib/makit/tasks/hook_manager.rb +443 -443
- data/lib/makit/tasks/init.rb +49 -49
- data/lib/makit/tasks/integrate.rb +29 -29
- data/lib/makit/tasks/pull_incoming.rb +13 -13
- data/lib/makit/tasks/setup.rb +13 -13
- data/lib/makit/tasks/sync.rb +17 -17
- data/lib/makit/tasks/tag.rb +16 -16
- data/lib/makit/tasks/task_monkey_patch.rb +81 -81
- data/lib/makit/tasks/test.rb +22 -22
- data/lib/makit/tasks/update.rb +18 -18
- data/lib/makit/tasks.rb +20 -20
- data/lib/makit/test_cache.rb +239 -239
- data/lib/makit/tree.rb +37 -37
- data/lib/makit/v1/makit.v1_pb.rb +35 -35
- data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
- data/lib/makit/version.rb +99 -99
- data/lib/makit/version_util.rb +21 -21
- data/lib/makit/wix.rb +95 -95
- data/lib/makit/yaml.rb +29 -29
- data/lib/makit/zip.rb +17 -17
- data/lib/makit copy.rb +44 -44
- data/lib/makit.rb +42 -42
- metadata +2 -1
@@ -1,72 +1,72 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "unified_file_sink"
|
4
|
-
|
5
|
-
module Makit
|
6
|
-
module Logging
|
7
|
-
module Sinks
|
8
|
-
# Console sink for clean, colored log output
|
9
|
-
#
|
10
|
-
# This is a thin wrapper around UnifiedFileSink that provides a simple
|
11
|
-
# API for console output. It maintains backward compatibility while
|
12
|
-
# leveraging the unified logging architecture.
|
13
|
-
#
|
14
|
-
# @example Basic usage
|
15
|
-
# console = Console.new
|
16
|
-
# logger = Logger.new(sinks: [console])
|
17
|
-
# logger.info("Processing started")
|
18
|
-
# # Shows: → Processing started
|
19
|
-
#
|
20
|
-
# @example With custom formatter options
|
21
|
-
# console = Console.new(show_timestamp: true, show_level: true)
|
22
|
-
#
|
23
|
-
# @example With custom formatter
|
24
|
-
# console = Console.new(formatter: :text)
|
25
|
-
class Console < UnifiedFileSink
|
26
|
-
# @return [Symbol] the format being used
|
27
|
-
attr_reader :format
|
28
|
-
|
29
|
-
# Initialize console sink
|
30
|
-
#
|
31
|
-
# @param formatter [Symbol, String] formatter name (default: :console)
|
32
|
-
# @param show_timestamp [Boolean] whether to show timestamps (default: false)
|
33
|
-
# @param show_level [Boolean] whether to show log levels (default: false)
|
34
|
-
# @param formatter_options [Hash] additional formatter options
|
35
|
-
def initialize(formatter: :console, show_timestamp: false, show_level: false, **formatter_options)
|
36
|
-
@format = formatter.to_sym
|
37
|
-
|
38
|
-
# Build configuration for UnifiedFileSink
|
39
|
-
configuration = {
|
40
|
-
file: $stdout,
|
41
|
-
format: @format,
|
42
|
-
formatter_options: {
|
43
|
-
show_timestamp: show_timestamp,
|
44
|
-
show_level: show_level,
|
45
|
-
}.merge(formatter_options),
|
46
|
-
}
|
47
|
-
|
48
|
-
super(configurations: [configuration])
|
49
|
-
end
|
50
|
-
|
51
|
-
# Get sink configuration
|
52
|
-
#
|
53
|
-
# @return [Hash] sink configuration
|
54
|
-
def config
|
55
|
-
{
|
56
|
-
name: self.class.name.split("::").last,
|
57
|
-
format: @format,
|
58
|
-
colors_enabled: true,
|
59
|
-
unified_sink: true,
|
60
|
-
}
|
61
|
-
end
|
62
|
-
|
63
|
-
# Check if this is a console sink (for compatibility)
|
64
|
-
#
|
65
|
-
# @return [Boolean] always true for Console sink
|
66
|
-
def console?
|
67
|
-
true
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "unified_file_sink"
|
4
|
+
|
5
|
+
module Makit
|
6
|
+
module Logging
|
7
|
+
module Sinks
|
8
|
+
# Console sink for clean, colored log output
|
9
|
+
#
|
10
|
+
# This is a thin wrapper around UnifiedFileSink that provides a simple
|
11
|
+
# API for console output. It maintains backward compatibility while
|
12
|
+
# leveraging the unified logging architecture.
|
13
|
+
#
|
14
|
+
# @example Basic usage
|
15
|
+
# console = Console.new
|
16
|
+
# logger = Logger.new(sinks: [console])
|
17
|
+
# logger.info("Processing started")
|
18
|
+
# # Shows: → Processing started
|
19
|
+
#
|
20
|
+
# @example With custom formatter options
|
21
|
+
# console = Console.new(show_timestamp: true, show_level: true)
|
22
|
+
#
|
23
|
+
# @example With custom formatter
|
24
|
+
# console = Console.new(formatter: :text)
|
25
|
+
class Console < UnifiedFileSink
|
26
|
+
# @return [Symbol] the format being used
|
27
|
+
attr_reader :format
|
28
|
+
|
29
|
+
# Initialize console sink
|
30
|
+
#
|
31
|
+
# @param formatter [Symbol, String] formatter name (default: :console)
|
32
|
+
# @param show_timestamp [Boolean] whether to show timestamps (default: false)
|
33
|
+
# @param show_level [Boolean] whether to show log levels (default: false)
|
34
|
+
# @param formatter_options [Hash] additional formatter options
|
35
|
+
def initialize(formatter: :console, show_timestamp: false, show_level: false, **formatter_options)
|
36
|
+
@format = formatter.to_sym
|
37
|
+
|
38
|
+
# Build configuration for UnifiedFileSink
|
39
|
+
configuration = {
|
40
|
+
file: $stdout,
|
41
|
+
format: @format,
|
42
|
+
formatter_options: {
|
43
|
+
show_timestamp: show_timestamp,
|
44
|
+
show_level: show_level,
|
45
|
+
}.merge(formatter_options),
|
46
|
+
}
|
47
|
+
|
48
|
+
super(configurations: [configuration])
|
49
|
+
end
|
50
|
+
|
51
|
+
# Get sink configuration
|
52
|
+
#
|
53
|
+
# @return [Hash] sink configuration
|
54
|
+
def config
|
55
|
+
{
|
56
|
+
name: self.class.name.split("::").last,
|
57
|
+
format: @format,
|
58
|
+
colors_enabled: true,
|
59
|
+
unified_sink: true,
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
# Check if this is a console sink (for compatibility)
|
64
|
+
#
|
65
|
+
# @return [Boolean] always true for Console sink
|
66
|
+
def console?
|
67
|
+
true
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -1,92 +1,92 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "unified_file_sink"
|
4
|
-
|
5
|
-
module Makit
|
6
|
-
module Logging
|
7
|
-
module Sinks
|
8
|
-
# File sink for writing log entries to files
|
9
|
-
#
|
10
|
-
# This sink is a thin wrapper around UnifiedFileSink that provides
|
11
|
-
# a simpler API for single-file logging. It maintains backward compatibility
|
12
|
-
# with the original FileSink interface while leveraging the more robust
|
13
|
-
# UnifiedFileSink implementation.
|
14
|
-
#
|
15
|
-
# @example Basic usage with default JSON formatter
|
16
|
-
# file_sink = FileSink.new(log_file: "makit.log")
|
17
|
-
# logger = Logger.new(sinks: [file_sink])
|
18
|
-
# logger.info("Processing started")
|
19
|
-
#
|
20
|
-
# @example Using built-in formatters
|
21
|
-
# file_sink = FileSink.new(
|
22
|
-
# log_file: "makit.log",
|
23
|
-
# formatter: :text
|
24
|
-
# )
|
25
|
-
#
|
26
|
-
# @example Using custom formatter options
|
27
|
-
# file_sink = FileSink.new(
|
28
|
-
# log_file: "makit.log",
|
29
|
-
# formatter: :json,
|
30
|
-
# include_context: true,
|
31
|
-
# include_metadata: true
|
32
|
-
# )
|
33
|
-
class FileSink < Base
|
34
|
-
# @return [String] path to the log file
|
35
|
-
attr_reader :log_file
|
36
|
-
# @return [Symbol] the formatter format name
|
37
|
-
attr_reader :formatter
|
38
|
-
# @return [Boolean] whether to append to existing file (true) or overwrite (false)
|
39
|
-
attr_reader :append
|
40
|
-
# @return [UnifiedFileSink] the underlying unified sink
|
41
|
-
attr_reader :unified_sink
|
42
|
-
|
43
|
-
# Initialize file sink
|
44
|
-
#
|
45
|
-
# @param log_file [String] path to the log file
|
46
|
-
# @param formatter [Symbol, String] formatter format name
|
47
|
-
# @param append [Boolean] whether to append to existing file (true) or overwrite (false)
|
48
|
-
# @param include_context [Boolean] whether to include context in formatted output
|
49
|
-
# @param include_metadata [Boolean] whether to include metadata in formatted output
|
50
|
-
# @param show_timestamp [Boolean] whether to show timestamp in formatted output
|
51
|
-
# @param show_level [Boolean] whether to show log level in formatted output
|
52
|
-
def initialize(log_file: "makit.log", formatter: :json, append: true, **formatter_options)
|
53
|
-
@log_file = log_file
|
54
|
-
@formatter = formatter.to_sym
|
55
|
-
@append = append
|
56
|
-
|
57
|
-
# Create unified sink configuration
|
58
|
-
config = {
|
59
|
-
file: @log_file,
|
60
|
-
format: @formatter,
|
61
|
-
append: @append,
|
62
|
-
}.merge(formatter_options)
|
63
|
-
|
64
|
-
@unified_sink = UnifiedFileSink.new(configurations: [config])
|
65
|
-
end
|
66
|
-
|
67
|
-
# Execute sink logic to write log entry to file
|
68
|
-
#
|
69
|
-
# @param log_request [LogRequest] the log request to process
|
70
|
-
# @yield [LogRequest] yields the processed log request to the next sink
|
71
|
-
# @yieldreturn [LogRequest] the processed log request
|
72
|
-
# @return [LogRequest] the final processed log request
|
73
|
-
def call(log_request, &block)
|
74
|
-
@unified_sink.call(log_request, &block)
|
75
|
-
end
|
76
|
-
|
77
|
-
# Get sink configuration
|
78
|
-
#
|
79
|
-
# @return [Hash] sink configuration
|
80
|
-
def config
|
81
|
-
{
|
82
|
-
name: self.class.name.split("::").last,
|
83
|
-
log_file: @log_file,
|
84
|
-
formatter: @formatter,
|
85
|
-
append: @append,
|
86
|
-
unified_config: @unified_sink.config,
|
87
|
-
}
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "unified_file_sink"
|
4
|
+
|
5
|
+
module Makit
|
6
|
+
module Logging
|
7
|
+
module Sinks
|
8
|
+
# File sink for writing log entries to files
|
9
|
+
#
|
10
|
+
# This sink is a thin wrapper around UnifiedFileSink that provides
|
11
|
+
# a simpler API for single-file logging. It maintains backward compatibility
|
12
|
+
# with the original FileSink interface while leveraging the more robust
|
13
|
+
# UnifiedFileSink implementation.
|
14
|
+
#
|
15
|
+
# @example Basic usage with default JSON formatter
|
16
|
+
# file_sink = FileSink.new(log_file: "makit.log")
|
17
|
+
# logger = Logger.new(sinks: [file_sink])
|
18
|
+
# logger.info("Processing started")
|
19
|
+
#
|
20
|
+
# @example Using built-in formatters
|
21
|
+
# file_sink = FileSink.new(
|
22
|
+
# log_file: "makit.log",
|
23
|
+
# formatter: :text
|
24
|
+
# )
|
25
|
+
#
|
26
|
+
# @example Using custom formatter options
|
27
|
+
# file_sink = FileSink.new(
|
28
|
+
# log_file: "makit.log",
|
29
|
+
# formatter: :json,
|
30
|
+
# include_context: true,
|
31
|
+
# include_metadata: true
|
32
|
+
# )
|
33
|
+
class FileSink < Base
|
34
|
+
# @return [String] path to the log file
|
35
|
+
attr_reader :log_file
|
36
|
+
# @return [Symbol] the formatter format name
|
37
|
+
attr_reader :formatter
|
38
|
+
# @return [Boolean] whether to append to existing file (true) or overwrite (false)
|
39
|
+
attr_reader :append
|
40
|
+
# @return [UnifiedFileSink] the underlying unified sink
|
41
|
+
attr_reader :unified_sink
|
42
|
+
|
43
|
+
# Initialize file sink
|
44
|
+
#
|
45
|
+
# @param log_file [String] path to the log file
|
46
|
+
# @param formatter [Symbol, String] formatter format name
|
47
|
+
# @param append [Boolean] whether to append to existing file (true) or overwrite (false)
|
48
|
+
# @param include_context [Boolean] whether to include context in formatted output
|
49
|
+
# @param include_metadata [Boolean] whether to include metadata in formatted output
|
50
|
+
# @param show_timestamp [Boolean] whether to show timestamp in formatted output
|
51
|
+
# @param show_level [Boolean] whether to show log level in formatted output
|
52
|
+
def initialize(log_file: "makit.log", formatter: :json, append: true, **formatter_options)
|
53
|
+
@log_file = log_file
|
54
|
+
@formatter = formatter.to_sym
|
55
|
+
@append = append
|
56
|
+
|
57
|
+
# Create unified sink configuration
|
58
|
+
config = {
|
59
|
+
file: @log_file,
|
60
|
+
format: @formatter,
|
61
|
+
append: @append,
|
62
|
+
}.merge(formatter_options)
|
63
|
+
|
64
|
+
@unified_sink = UnifiedFileSink.new(configurations: [config])
|
65
|
+
end
|
66
|
+
|
67
|
+
# Execute sink logic to write log entry to file
|
68
|
+
#
|
69
|
+
# @param log_request [LogRequest] the log request to process
|
70
|
+
# @yield [LogRequest] yields the processed log request to the next sink
|
71
|
+
# @yieldreturn [LogRequest] the processed log request
|
72
|
+
# @return [LogRequest] the final processed log request
|
73
|
+
def call(log_request, &block)
|
74
|
+
@unified_sink.call(log_request, &block)
|
75
|
+
end
|
76
|
+
|
77
|
+
# Get sink configuration
|
78
|
+
#
|
79
|
+
# @return [Hash] sink configuration
|
80
|
+
def config
|
81
|
+
{
|
82
|
+
name: self.class.name.split("::").last,
|
83
|
+
log_file: @log_file,
|
84
|
+
formatter: @formatter,
|
85
|
+
append: @append,
|
86
|
+
unified_config: @unified_sink.config,
|
87
|
+
}
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -1,123 +1,123 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "base"
|
4
|
-
|
5
|
-
module Makit
|
6
|
-
module Logging
|
7
|
-
module Sinks
|
8
|
-
# Structured sink for adding metadata to log requests
|
9
|
-
#
|
10
|
-
# This sink enriches log requests with structured metadata like
|
11
|
-
# process information, thread details, and other contextual data that
|
12
|
-
# can be useful for debugging and monitoring. It follows the same
|
13
|
-
# pattern as other sinks but focuses on data enrichment rather than output.
|
14
|
-
#
|
15
|
-
# @example Basic usage
|
16
|
-
# structured_sink = Structured.new
|
17
|
-
# logger = Logger.new(sinks: [structured_sink])
|
18
|
-
# logger.info("Processing started")
|
19
|
-
# # Adds metadata like process_id, thread_id, etc.
|
20
|
-
#
|
21
|
-
# @example With custom metadata
|
22
|
-
# structured_sink = Structured.new(
|
23
|
-
# custom_metadata: { environment: "production" }
|
24
|
-
# )
|
25
|
-
class Structured < Base
|
26
|
-
# Initialize structured sink
|
27
|
-
#
|
28
|
-
# @param include_process_info [Boolean] whether to include process information
|
29
|
-
# @param include_thread_info [Boolean] whether to include thread information
|
30
|
-
# @param include_timing [Boolean] whether to include timing information
|
31
|
-
# @param custom_metadata [Hash] custom metadata to add to all log requests
|
32
|
-
def initialize(include_process_info: true, include_thread_info: true, include_timing: true, custom_metadata: {})
|
33
|
-
@include_process_info = include_process_info
|
34
|
-
@include_thread_info = include_thread_info
|
35
|
-
@include_timing = include_timing
|
36
|
-
@custom_metadata = custom_metadata.dup
|
37
|
-
end
|
38
|
-
|
39
|
-
# Execute sink logic to add structured metadata
|
40
|
-
#
|
41
|
-
# @param log_request [LogRequest] the log request to process
|
42
|
-
# @yield [LogRequest] yields the processed log request to the next sink
|
43
|
-
# @yieldreturn [LogRequest] the processed log request
|
44
|
-
# @return [LogRequest] the final processed log request
|
45
|
-
def call(log_request, &block)
|
46
|
-
add_structured_metadata(log_request)
|
47
|
-
block&.call(log_request) if block_given?
|
48
|
-
log_request
|
49
|
-
end
|
50
|
-
|
51
|
-
# Get sink configuration
|
52
|
-
#
|
53
|
-
# @return [Hash] sink configuration
|
54
|
-
def config
|
55
|
-
{
|
56
|
-
name: self.class.name.split("::").last,
|
57
|
-
include_process_info: @include_process_info,
|
58
|
-
include_thread_info: @include_thread_info,
|
59
|
-
include_timing: @include_timing,
|
60
|
-
custom_metadata: @custom_metadata,
|
61
|
-
}
|
62
|
-
end
|
63
|
-
|
64
|
-
private
|
65
|
-
|
66
|
-
# Add structured metadata to the log request
|
67
|
-
#
|
68
|
-
# @param log_request [LogRequest] the log request to enrich
|
69
|
-
def add_structured_metadata(log_request)
|
70
|
-
metadata = {}
|
71
|
-
|
72
|
-
# Add process information
|
73
|
-
metadata.merge!(get_process_metadata) if @include_process_info
|
74
|
-
|
75
|
-
# Add thread information
|
76
|
-
metadata.merge!(get_thread_metadata) if @include_thread_info
|
77
|
-
|
78
|
-
# Add timing information
|
79
|
-
metadata.merge!(get_timing_metadata) if @include_timing
|
80
|
-
|
81
|
-
# Add custom metadata
|
82
|
-
metadata.merge!(@custom_metadata)
|
83
|
-
|
84
|
-
# Add to log request
|
85
|
-
log_request.add_metadata(metadata)
|
86
|
-
end
|
87
|
-
|
88
|
-
# Get process-related metadata
|
89
|
-
#
|
90
|
-
# @return [Hash] process metadata
|
91
|
-
def get_process_metadata
|
92
|
-
{
|
93
|
-
process_id: ::Process.pid,
|
94
|
-
process_title: $PROGRAM_NAME,
|
95
|
-
ruby_version: RUBY_VERSION,
|
96
|
-
ruby_platform: RUBY_PLATFORM,
|
97
|
-
}
|
98
|
-
end
|
99
|
-
|
100
|
-
# Get thread-related metadata
|
101
|
-
#
|
102
|
-
# @return [Hash] thread metadata
|
103
|
-
def get_thread_metadata
|
104
|
-
{
|
105
|
-
thread_id: Thread.current.object_id,
|
106
|
-
thread_name: Thread.current.name || "main",
|
107
|
-
}
|
108
|
-
end
|
109
|
-
|
110
|
-
# Get timing-related metadata
|
111
|
-
#
|
112
|
-
# @return [Hash] timing metadata
|
113
|
-
def get_timing_metadata
|
114
|
-
{
|
115
|
-
timestamp: Time.now.iso8601,
|
116
|
-
unix_timestamp: Time.now.to_i,
|
117
|
-
timezone: Time.now.zone,
|
118
|
-
}
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "base"
|
4
|
+
|
5
|
+
module Makit
|
6
|
+
module Logging
|
7
|
+
module Sinks
|
8
|
+
# Structured sink for adding metadata to log requests
|
9
|
+
#
|
10
|
+
# This sink enriches log requests with structured metadata like
|
11
|
+
# process information, thread details, and other contextual data that
|
12
|
+
# can be useful for debugging and monitoring. It follows the same
|
13
|
+
# pattern as other sinks but focuses on data enrichment rather than output.
|
14
|
+
#
|
15
|
+
# @example Basic usage
|
16
|
+
# structured_sink = Structured.new
|
17
|
+
# logger = Logger.new(sinks: [structured_sink])
|
18
|
+
# logger.info("Processing started")
|
19
|
+
# # Adds metadata like process_id, thread_id, etc.
|
20
|
+
#
|
21
|
+
# @example With custom metadata
|
22
|
+
# structured_sink = Structured.new(
|
23
|
+
# custom_metadata: { environment: "production" }
|
24
|
+
# )
|
25
|
+
class Structured < Base
|
26
|
+
# Initialize structured sink
|
27
|
+
#
|
28
|
+
# @param include_process_info [Boolean] whether to include process information
|
29
|
+
# @param include_thread_info [Boolean] whether to include thread information
|
30
|
+
# @param include_timing [Boolean] whether to include timing information
|
31
|
+
# @param custom_metadata [Hash] custom metadata to add to all log requests
|
32
|
+
def initialize(include_process_info: true, include_thread_info: true, include_timing: true, custom_metadata: {})
|
33
|
+
@include_process_info = include_process_info
|
34
|
+
@include_thread_info = include_thread_info
|
35
|
+
@include_timing = include_timing
|
36
|
+
@custom_metadata = custom_metadata.dup
|
37
|
+
end
|
38
|
+
|
39
|
+
# Execute sink logic to add structured metadata
|
40
|
+
#
|
41
|
+
# @param log_request [LogRequest] the log request to process
|
42
|
+
# @yield [LogRequest] yields the processed log request to the next sink
|
43
|
+
# @yieldreturn [LogRequest] the processed log request
|
44
|
+
# @return [LogRequest] the final processed log request
|
45
|
+
def call(log_request, &block)
|
46
|
+
add_structured_metadata(log_request)
|
47
|
+
block&.call(log_request) if block_given?
|
48
|
+
log_request
|
49
|
+
end
|
50
|
+
|
51
|
+
# Get sink configuration
|
52
|
+
#
|
53
|
+
# @return [Hash] sink configuration
|
54
|
+
def config
|
55
|
+
{
|
56
|
+
name: self.class.name.split("::").last,
|
57
|
+
include_process_info: @include_process_info,
|
58
|
+
include_thread_info: @include_thread_info,
|
59
|
+
include_timing: @include_timing,
|
60
|
+
custom_metadata: @custom_metadata,
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
# Add structured metadata to the log request
|
67
|
+
#
|
68
|
+
# @param log_request [LogRequest] the log request to enrich
|
69
|
+
def add_structured_metadata(log_request)
|
70
|
+
metadata = {}
|
71
|
+
|
72
|
+
# Add process information
|
73
|
+
metadata.merge!(get_process_metadata) if @include_process_info
|
74
|
+
|
75
|
+
# Add thread information
|
76
|
+
metadata.merge!(get_thread_metadata) if @include_thread_info
|
77
|
+
|
78
|
+
# Add timing information
|
79
|
+
metadata.merge!(get_timing_metadata) if @include_timing
|
80
|
+
|
81
|
+
# Add custom metadata
|
82
|
+
metadata.merge!(@custom_metadata)
|
83
|
+
|
84
|
+
# Add to log request
|
85
|
+
log_request.add_metadata(metadata)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Get process-related metadata
|
89
|
+
#
|
90
|
+
# @return [Hash] process metadata
|
91
|
+
def get_process_metadata
|
92
|
+
{
|
93
|
+
process_id: ::Process.pid,
|
94
|
+
process_title: $PROGRAM_NAME,
|
95
|
+
ruby_version: RUBY_VERSION,
|
96
|
+
ruby_platform: RUBY_PLATFORM,
|
97
|
+
}
|
98
|
+
end
|
99
|
+
|
100
|
+
# Get thread-related metadata
|
101
|
+
#
|
102
|
+
# @return [Hash] thread metadata
|
103
|
+
def get_thread_metadata
|
104
|
+
{
|
105
|
+
thread_id: Thread.current.object_id,
|
106
|
+
thread_name: Thread.current.name || "main",
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
# Get timing-related metadata
|
111
|
+
#
|
112
|
+
# @return [Hash] timing metadata
|
113
|
+
def get_timing_metadata
|
114
|
+
{
|
115
|
+
timestamp: Time.now.iso8601,
|
116
|
+
unix_timestamp: Time.now.to_i,
|
117
|
+
timezone: Time.now.zone,
|
118
|
+
}
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|