logstruct 0.1.0 → 0.1.2

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 (113) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -1
  3. data/README.md +23 -3
  4. data/lib/log_struct/boot_buffer.rb +28 -0
  5. data/lib/log_struct/builders/active_job.rb +84 -0
  6. data/lib/log_struct/concerns/configuration.rb +178 -15
  7. data/lib/log_struct/concerns/error_handling.rb +3 -7
  8. data/lib/log_struct/config_struct/filters.rb +18 -0
  9. data/lib/log_struct/config_struct/integrations.rb +8 -12
  10. data/lib/log_struct/configuration.rb +13 -0
  11. data/lib/log_struct/enums/event.rb +13 -0
  12. data/lib/log_struct/enums/log_field.rb +154 -0
  13. data/lib/log_struct/enums/source.rb +4 -1
  14. data/lib/log_struct/formatter.rb +29 -17
  15. data/lib/log_struct/integrations/action_mailer/error_handling.rb +3 -11
  16. data/lib/log_struct/integrations/action_mailer/event_logging.rb +22 -12
  17. data/lib/log_struct/integrations/active_job/log_subscriber.rb +52 -48
  18. data/lib/log_struct/integrations/active_model_serializers.rb +8 -14
  19. data/lib/log_struct/integrations/active_record.rb +35 -5
  20. data/lib/log_struct/integrations/active_storage.rb +59 -20
  21. data/lib/log_struct/integrations/ahoy.rb +2 -1
  22. data/lib/log_struct/integrations/carrierwave.rb +13 -16
  23. data/lib/log_struct/integrations/dotenv.rb +278 -0
  24. data/lib/log_struct/integrations/good_job/log_subscriber.rb +86 -136
  25. data/lib/log_struct/integrations/good_job/logger.rb +8 -10
  26. data/lib/log_struct/integrations/good_job.rb +5 -7
  27. data/lib/log_struct/integrations/host_authorization.rb +25 -4
  28. data/lib/log_struct/integrations/lograge.rb +20 -14
  29. data/lib/log_struct/integrations/puma.rb +477 -0
  30. data/lib/log_struct/integrations/rack_error_handler/middleware.rb +11 -18
  31. data/lib/log_struct/integrations/shrine.rb +44 -19
  32. data/lib/log_struct/integrations/sorbet.rb +48 -0
  33. data/lib/log_struct/integrations.rb +21 -0
  34. data/lib/log_struct/log/action_mailer/delivered.rb +99 -0
  35. data/lib/log_struct/log/action_mailer/delivery.rb +99 -0
  36. data/lib/log_struct/log/action_mailer.rb +30 -45
  37. data/lib/log_struct/log/active_job/enqueue.rb +125 -0
  38. data/lib/log_struct/log/active_job/finish.rb +130 -0
  39. data/lib/log_struct/log/active_job/schedule.rb +125 -0
  40. data/lib/log_struct/log/active_job/start.rb +130 -0
  41. data/lib/log_struct/log/active_job.rb +41 -54
  42. data/lib/log_struct/log/active_model_serializers.rb +72 -33
  43. data/lib/log_struct/log/active_storage/delete.rb +87 -0
  44. data/lib/log_struct/log/active_storage/download.rb +103 -0
  45. data/lib/log_struct/log/active_storage/exist.rb +93 -0
  46. data/lib/log_struct/log/active_storage/metadata.rb +93 -0
  47. data/lib/log_struct/log/active_storage/stream.rb +93 -0
  48. data/lib/log_struct/log/active_storage/upload.rb +118 -0
  49. data/lib/log_struct/log/active_storage/url.rb +93 -0
  50. data/lib/log_struct/log/active_storage.rb +32 -68
  51. data/lib/log_struct/log/ahoy.rb +67 -33
  52. data/lib/log_struct/log/carrierwave/delete.rb +115 -0
  53. data/lib/log_struct/log/carrierwave/download.rb +131 -0
  54. data/lib/log_struct/log/carrierwave/upload.rb +141 -0
  55. data/lib/log_struct/log/carrierwave.rb +37 -72
  56. data/lib/log_struct/log/dotenv/load.rb +76 -0
  57. data/lib/log_struct/log/dotenv/restore.rb +76 -0
  58. data/lib/log_struct/log/dotenv/save.rb +76 -0
  59. data/lib/log_struct/log/dotenv/update.rb +76 -0
  60. data/lib/log_struct/log/dotenv.rb +12 -0
  61. data/lib/log_struct/log/error.rb +58 -47
  62. data/lib/log_struct/log/good_job/enqueue.rb +126 -0
  63. data/lib/log_struct/log/good_job/error.rb +151 -0
  64. data/lib/log_struct/log/good_job/finish.rb +136 -0
  65. data/lib/log_struct/log/good_job/log.rb +131 -0
  66. data/lib/log_struct/log/good_job/schedule.rb +136 -0
  67. data/lib/log_struct/log/good_job/start.rb +136 -0
  68. data/lib/log_struct/log/good_job.rb +40 -141
  69. data/lib/log_struct/log/interfaces/additional_data_field.rb +1 -17
  70. data/lib/log_struct/log/interfaces/common_fields.rb +1 -39
  71. data/lib/log_struct/log/interfaces/public_common_fields.rb +1 -28
  72. data/lib/log_struct/log/interfaces/request_fields.rb +1 -33
  73. data/lib/log_struct/log/plain.rb +59 -34
  74. data/lib/log_struct/log/puma/shutdown.rb +80 -0
  75. data/lib/log_struct/log/puma/start.rb +120 -0
  76. data/lib/log_struct/log/puma.rb +10 -0
  77. data/lib/log_struct/log/request.rb +132 -48
  78. data/lib/log_struct/log/security/blocked_host.rb +141 -0
  79. data/lib/log_struct/log/security/csrf_violation.rb +131 -0
  80. data/lib/log_struct/log/security/ip_spoof.rb +141 -0
  81. data/lib/log_struct/log/security.rb +40 -70
  82. data/lib/log_struct/log/shared/add_request_fields.rb +1 -26
  83. data/lib/log_struct/log/shared/merge_additional_data_fields.rb +1 -22
  84. data/lib/log_struct/log/shared/serialize_common.rb +1 -33
  85. data/lib/log_struct/log/shared/serialize_common_public.rb +9 -9
  86. data/lib/log_struct/log/shrine/delete.rb +85 -0
  87. data/lib/log_struct/log/shrine/download.rb +90 -0
  88. data/lib/log_struct/log/shrine/exist.rb +90 -0
  89. data/lib/log_struct/log/shrine/metadata.rb +90 -0
  90. data/lib/log_struct/log/shrine/upload.rb +105 -0
  91. data/lib/log_struct/log/shrine.rb +10 -67
  92. data/lib/log_struct/log/sidekiq.rb +65 -26
  93. data/lib/log_struct/log/sql.rb +113 -106
  94. data/lib/log_struct/log.rb +29 -36
  95. data/lib/log_struct/multi_error_reporter.rb +80 -22
  96. data/lib/log_struct/param_filters.rb +50 -7
  97. data/lib/log_struct/rails_boot_banner_silencer.rb +116 -0
  98. data/lib/log_struct/railtie.rb +67 -0
  99. data/lib/log_struct/semantic_logger/formatter.rb +4 -2
  100. data/lib/log_struct/semantic_logger/setup.rb +34 -18
  101. data/lib/log_struct/shared/interfaces/additional_data_field.rb +22 -0
  102. data/lib/log_struct/shared/interfaces/common_fields.rb +39 -0
  103. data/lib/log_struct/shared/interfaces/public_common_fields.rb +29 -0
  104. data/lib/log_struct/shared/interfaces/request_fields.rb +39 -0
  105. data/lib/log_struct/shared/shared/add_request_fields.rb +28 -0
  106. data/lib/log_struct/shared/shared/merge_additional_data_fields.rb +27 -0
  107. data/lib/log_struct/shared/shared/serialize_common.rb +58 -0
  108. data/lib/log_struct/version.rb +1 -1
  109. data/lib/log_struct.rb +36 -4
  110. data/logstruct.gemspec +2 -1
  111. metadata +78 -9
  112. data/lib/log_struct/log/interfaces/message_field.rb +0 -20
  113. data/lib/log_struct/log_keys.rb +0 -102
@@ -0,0 +1,76 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class Dotenv
23
+ class Load < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::Dotenv, default: Source::Dotenv
33
+ const :event, Event, default: Event::Load
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ # Event-specific fields
38
+ const :file, String
39
+
40
+ # Additional data
41
+
42
+ # Request fields (optional)
43
+
44
+ # Serialize shared fields
45
+ include LogStruct::Log::Interfaces::CommonFields
46
+ include LogStruct::Log::Shared::SerializeCommon
47
+
48
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
49
+ def self.base_hash
50
+ {}
51
+ end
52
+
53
+ sig {
54
+ params(file: T.untyped,
55
+ additional_data: T.untyped,
56
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
57
+ }
58
+ def self.build(file:,
59
+ additional_data: nil,
60
+ timestamp: Time.now)
61
+ h = base_hash
62
+ h[LogField::File] = file
63
+ h
64
+ end
65
+
66
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
67
+ def to_h
68
+ self.class.build(
69
+ file: file,
70
+ timestamp: timestamp
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,76 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class Dotenv
23
+ class Restore < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::Dotenv, default: Source::Dotenv
33
+ const :event, Event, default: Event::Restore
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ # Event-specific fields
38
+ const :vars, T::Array[String]
39
+
40
+ # Additional data
41
+
42
+ # Request fields (optional)
43
+
44
+ # Serialize shared fields
45
+ include LogStruct::Log::Interfaces::CommonFields
46
+ include LogStruct::Log::Shared::SerializeCommon
47
+
48
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
49
+ def self.base_hash
50
+ {}
51
+ end
52
+
53
+ sig {
54
+ params(vars: T.untyped,
55
+ additional_data: T.untyped,
56
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
57
+ }
58
+ def self.build(vars:,
59
+ additional_data: nil,
60
+ timestamp: Time.now)
61
+ h = base_hash
62
+ h[LogField::Vars] = vars
63
+ h
64
+ end
65
+
66
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
67
+ def to_h
68
+ self.class.build(
69
+ vars: vars,
70
+ timestamp: timestamp
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,76 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class Dotenv
23
+ class Save < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::Dotenv, default: Source::Dotenv
33
+ const :event, Event, default: Event::Save
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ # Event-specific fields
38
+ const :snapshot, T::Boolean
39
+
40
+ # Additional data
41
+
42
+ # Request fields (optional)
43
+
44
+ # Serialize shared fields
45
+ include LogStruct::Log::Interfaces::CommonFields
46
+ include LogStruct::Log::Shared::SerializeCommon
47
+
48
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
49
+ def self.base_hash
50
+ {}
51
+ end
52
+
53
+ sig {
54
+ params(snapshot: T.untyped,
55
+ additional_data: T.untyped,
56
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
57
+ }
58
+ def self.build(snapshot:,
59
+ additional_data: nil,
60
+ timestamp: Time.now)
61
+ h = base_hash
62
+ h[LogField::Snapshot] = snapshot
63
+ h
64
+ end
65
+
66
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
67
+ def to_h
68
+ self.class.build(
69
+ snapshot: snapshot,
70
+ timestamp: timestamp
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,76 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class Dotenv
23
+ class Update < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::Dotenv, default: Source::Dotenv
33
+ const :event, Event, default: Event::Update
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ # Event-specific fields
38
+ const :vars, T::Array[String]
39
+
40
+ # Additional data
41
+
42
+ # Request fields (optional)
43
+
44
+ # Serialize shared fields
45
+ include LogStruct::Log::Interfaces::CommonFields
46
+ include LogStruct::Log::Shared::SerializeCommon
47
+
48
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
49
+ def self.base_hash
50
+ {}
51
+ end
52
+
53
+ sig {
54
+ params(vars: T.untyped,
55
+ additional_data: T.untyped,
56
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
57
+ }
58
+ def self.build(vars:,
59
+ additional_data: nil,
60
+ timestamp: Time.now)
61
+ h = base_hash
62
+ h[LogField::Vars] = vars
63
+ h
64
+ end
65
+
66
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
67
+ def to_h
68
+ self.class.build(
69
+ vars: vars,
70
+ timestamp: timestamp
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,12 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/source_parent.rb.erb
8
+
9
+ require_relative "dotenv/load"
10
+ require_relative "dotenv/update"
11
+ require_relative "dotenv/save"
12
+ require_relative "dotenv/restore"
@@ -1,75 +1,86 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative "interfaces/common_fields"
5
- require_relative "interfaces/additional_data_field"
6
- require_relative "interfaces/message_field"
7
- require_relative "shared/serialize_common"
8
- require_relative "shared/merge_additional_data_fields"
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
9
15
  require_relative "../enums/source"
10
16
  require_relative "../enums/event"
11
17
  require_relative "../enums/level"
12
- require_relative "../log_keys"
18
+ require_relative "../enums/log_field"
13
19
 
14
20
  module LogStruct
15
21
  module Log
16
- # Exception log entry for Ruby exceptions with class, message, and backtrace
17
22
  class Error < T::Struct
18
- extend T::Sig
23
+ # typed: strict
24
+ # frozen_string_literal: true
19
25
 
20
- include Interfaces::CommonFields
21
- include Interfaces::AdditionalDataField
22
- include Interfaces::MessageField
23
- include SerializeCommon
24
- include MergeAdditionalDataFields
26
+ extend T::Sig
25
27
 
26
- ErrorEvent = T.type_alias {
27
- Event::Error
28
- }
28
+ extend T::Sig
29
29
 
30
- # Common fields
31
- const :source, Source # Used by all sources, should not have a default.
32
- const :event, ErrorEvent, default: T.let(Event::Error, ErrorEvent)
30
+ # Shared/common fields
31
+ const :source, Source
32
+ const :event, Event, default: Event::Error
33
33
  const :timestamp, Time, factory: -> { Time.now }
34
- const :level, Level, default: T.let(Level::Error, Level)
34
+ const :level, Level, default: Level::Info
35
35
 
36
- # Exception-specific fields
36
+ # Event-specific fields
37
37
  const :err_class, T.class_of(StandardError)
38
38
  const :message, String
39
39
  const :backtrace, T.nilable(T::Array[String]), default: nil
40
- const :additional_data, T::Hash[Symbol, T.untyped], default: {}
41
40
 
42
- # Convert the log entry to a hash for serialization
43
- sig { override.params(strict: T::Boolean).returns(T::Hash[Symbol, T.untyped]) }
44
- def serialize(strict = true)
45
- hash = serialize_common(strict)
46
- merge_additional_data_fields(hash)
41
+ # Additional data
42
+ include LogStruct::Log::Interfaces::AdditionalDataField
43
+ const :additional_data, T.nilable(T::Hash[T.any(String, Symbol), T.untyped]), default: nil
44
+ include LogStruct::Log::Shared::MergeAdditionalDataFields
45
+
46
+ # Request fields (optional)
47
47
 
48
- # Add exception-specific fields
49
- hash[LOG_KEYS.fetch(:err_class)] = err_class.name
50
- hash[LOG_KEYS.fetch(:message)] = message
51
- if backtrace.is_a?(Array) && backtrace&.any?
52
- hash[LOG_KEYS.fetch(:backtrace)] = backtrace&.first(10)
53
- end
48
+ # Serialize shared fields
49
+ include LogStruct::Log::Interfaces::CommonFields
50
+ include LogStruct::Log::Shared::SerializeCommon
54
51
 
55
- hash
52
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
53
+ def self.base_hash
54
+ {}
56
55
  end
57
56
 
58
- # Create an Error log from a Ruby StandardError
59
57
  sig {
60
- params(
61
- source: Source,
62
- ex: StandardError,
63
- additional_data: T::Hash[Symbol, T.untyped]
64
- ).returns(Log::Error)
58
+ params(err_class: T.untyped,
59
+ message: T.untyped,
60
+ backtrace: T.untyped,
61
+ additional_data: T.untyped,
62
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
65
63
  }
66
- def self.from_exception(source, ex, additional_data = {})
67
- new(
68
- source: source,
69
- message: ex.message,
70
- err_class: ex.class,
71
- backtrace: ex.backtrace,
72
- additional_data: additional_data
64
+ def self.build(err_class:,
65
+ message:,
66
+ backtrace: nil,
67
+ additional_data: nil,
68
+ timestamp: Time.now)
69
+ h = base_hash
70
+ h[LogField::ErrClass] = err_class
71
+ h[LogField::Message] = message
72
+ h[LogField::Backtrace] = backtrace unless backtrace.nil?
73
+ h
74
+ end
75
+
76
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
77
+ def to_h
78
+ self.class.build(
79
+ err_class: err_class,
80
+ message: message,
81
+ backtrace: backtrace,
82
+ additional_data: additional_data,
83
+ timestamp: timestamp
73
84
  )
74
85
  end
75
86
  end
@@ -0,0 +1,126 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class GoodJob
23
+ class Enqueue < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::Job, default: Source::Job
33
+ const :event, Event, default: Event::Enqueue
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ const :job_id, T.nilable(String), default: nil
38
+ const :job_class, T.nilable(String), default: nil
39
+ const :queue_name, T.nilable(String), default: nil
40
+ const :arguments, T.nilable(T::Array[T.untyped]), default: nil
41
+ const :executions, T.nilable(Integer), default: nil
42
+
43
+ # Event-specific fields
44
+ const :duration_ms, Float
45
+ const :scheduled_at, T.nilable(Time), default: nil
46
+
47
+ # Additional data
48
+ include LogStruct::Log::Interfaces::AdditionalDataField
49
+ const :additional_data, T.nilable(T::Hash[T.any(String, Symbol), T.untyped]), default: nil
50
+ include LogStruct::Log::Shared::MergeAdditionalDataFields
51
+
52
+ # Request fields (optional)
53
+
54
+ # Serialize shared fields
55
+ include LogStruct::Log::Interfaces::CommonFields
56
+ include LogStruct::Log::Shared::SerializeCommon
57
+
58
+ sig {
59
+ params(job_id: T.untyped,
60
+ job_class: T.untyped,
61
+ queue_name: T.untyped,
62
+ arguments: T.untyped,
63
+ executions: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
64
+ }
65
+ def self.base_hash(job_id: nil,
66
+ job_class: nil,
67
+ queue_name: nil,
68
+ arguments: nil,
69
+ executions: nil)
70
+ h = {}
71
+ h[LogField::JobId] = job_id unless job_id.nil?
72
+ h[LogField::JobClass] = job_class unless job_class.nil?
73
+ h[LogField::QueueName] = queue_name unless queue_name.nil?
74
+ h[LogField::Arguments] = arguments unless arguments.nil?
75
+ h[LogField::Executions] = executions unless executions.nil?
76
+ h
77
+ end
78
+
79
+ sig {
80
+ params(duration_ms: T.untyped,
81
+ job_id: T.untyped,
82
+ job_class: T.untyped,
83
+ queue_name: T.untyped,
84
+ arguments: T.untyped,
85
+ executions: T.untyped,
86
+ scheduled_at: T.untyped,
87
+ additional_data: T.untyped,
88
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
89
+ }
90
+ def self.build(duration_ms:,
91
+ job_id: nil,
92
+ job_class: nil,
93
+ queue_name: nil,
94
+ arguments: nil,
95
+ executions: nil,
96
+ scheduled_at: nil,
97
+ additional_data: nil,
98
+ timestamp: Time.now)
99
+ h = base_hash(job_id: job_id,
100
+ job_class: job_class,
101
+ queue_name: queue_name,
102
+ arguments: arguments,
103
+ executions: executions)
104
+ h[LogField::DurationMs] = duration_ms
105
+ h[LogField::ScheduledAt] = scheduled_at unless scheduled_at.nil?
106
+ h
107
+ end
108
+
109
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
110
+ def to_h
111
+ self.class.build(
112
+ job_id: job_id,
113
+ job_class: job_class,
114
+ queue_name: queue_name,
115
+ arguments: arguments,
116
+ executions: executions,
117
+ duration_ms: duration_ms,
118
+ scheduled_at: scheduled_at,
119
+ additional_data: additional_data,
120
+ timestamp: timestamp
121
+ )
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end