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,125 @@
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 ActiveJob
23
+ class Schedule < 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::Schedule
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ const :job_id, String
38
+ const :job_class, String
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
+ const :provider_job_id, T.nilable(String), default: nil
43
+
44
+ # Event-specific fields
45
+ const :scheduled_at, Time
46
+
47
+ # Additional data
48
+
49
+ # Request fields (optional)
50
+
51
+ # Serialize shared fields
52
+ include LogStruct::Log::Interfaces::CommonFields
53
+ include LogStruct::Log::Shared::SerializeCommon
54
+
55
+ sig {
56
+ params(job_id: T.untyped,
57
+ job_class: T.untyped,
58
+ queue_name: T.untyped,
59
+ arguments: T.untyped,
60
+ executions: T.untyped,
61
+ provider_job_id: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
62
+ }
63
+ def self.base_hash(job_id: nil,
64
+ job_class: nil,
65
+ queue_name: nil,
66
+ arguments: nil,
67
+ executions: nil,
68
+ provider_job_id: nil)
69
+ h = {}
70
+ h[LogField::JobId] = job_id unless job_id.nil?
71
+ h[LogField::JobClass] = job_class unless job_class.nil?
72
+ h[LogField::QueueName] = queue_name unless queue_name.nil?
73
+ h[LogField::Arguments] = arguments unless arguments.nil?
74
+ h[LogField::Executions] = executions unless executions.nil?
75
+ h[LogField::ProviderJobId] = provider_job_id unless provider_job_id.nil?
76
+ h
77
+ end
78
+
79
+ sig {
80
+ params(scheduled_at: 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
+ provider_job_id: T.untyped,
87
+ additional_data: T.untyped,
88
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
89
+ }
90
+ def self.build(scheduled_at:,
91
+ job_id:,
92
+ job_class:,
93
+ queue_name: nil,
94
+ arguments: nil,
95
+ executions: nil,
96
+ provider_job_id: 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
+ provider_job_id: provider_job_id)
105
+ h[LogField::ScheduledAt] = scheduled_at
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
+ provider_job_id: provider_job_id,
118
+ scheduled_at: scheduled_at,
119
+ timestamp: timestamp
120
+ )
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,130 @@
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 ActiveJob
23
+ class Start < 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::Start
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ const :job_id, String
38
+ const :job_class, String
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
+ const :provider_job_id, T.nilable(String), default: nil
43
+
44
+ # Event-specific fields
45
+ const :started_at, Time
46
+ const :attempt, T.nilable(Integer), default: nil
47
+
48
+ # Additional data
49
+
50
+ # Request fields (optional)
51
+
52
+ # Serialize shared fields
53
+ include LogStruct::Log::Interfaces::CommonFields
54
+ include LogStruct::Log::Shared::SerializeCommon
55
+
56
+ sig {
57
+ params(job_id: T.untyped,
58
+ job_class: T.untyped,
59
+ queue_name: T.untyped,
60
+ arguments: T.untyped,
61
+ executions: T.untyped,
62
+ provider_job_id: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
63
+ }
64
+ def self.base_hash(job_id: nil,
65
+ job_class: nil,
66
+ queue_name: nil,
67
+ arguments: nil,
68
+ executions: nil,
69
+ provider_job_id: 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[LogField::ProviderJobId] = provider_job_id unless provider_job_id.nil?
77
+ h
78
+ end
79
+
80
+ sig {
81
+ params(started_at: T.untyped,
82
+ job_id: T.untyped,
83
+ job_class: T.untyped,
84
+ queue_name: T.untyped,
85
+ arguments: T.untyped,
86
+ executions: T.untyped,
87
+ provider_job_id: T.untyped,
88
+ attempt: T.untyped,
89
+ additional_data: T.untyped,
90
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
91
+ }
92
+ def self.build(started_at:,
93
+ job_id:,
94
+ job_class:,
95
+ queue_name: nil,
96
+ arguments: nil,
97
+ executions: nil,
98
+ provider_job_id: nil,
99
+ attempt: nil,
100
+ additional_data: nil,
101
+ timestamp: Time.now)
102
+ h = base_hash(job_id: job_id,
103
+ job_class: job_class,
104
+ queue_name: queue_name,
105
+ arguments: arguments,
106
+ executions: executions,
107
+ provider_job_id: provider_job_id)
108
+ h[LogField::StartedAt] = started_at
109
+ h[LogField::Attempt] = attempt unless attempt.nil?
110
+ h
111
+ end
112
+
113
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
114
+ def to_h
115
+ self.class.build(
116
+ job_id: job_id,
117
+ job_class: job_class,
118
+ queue_name: queue_name,
119
+ arguments: arguments,
120
+ executions: executions,
121
+ provider_job_id: provider_job_id,
122
+ started_at: started_at,
123
+ attempt: attempt,
124
+ timestamp: timestamp
125
+ )
126
+ end
127
+ end
128
+ end
129
+ end
130
+ end
@@ -1,63 +1,50 @@
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 "shared/serialize_common"
7
- require_relative "shared/merge_additional_data_fields"
8
- require_relative "../enums/source"
9
- require_relative "../enums/event"
10
- require_relative "../enums/level"
11
- require_relative "../log_keys"
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 "active_job/enqueue"
10
+ require_relative "active_job/schedule"
11
+ require_relative "active_job/start"
12
+ require_relative "active_job/finish"
12
13
 
13
14
  module LogStruct
14
15
  module Log
15
- # ActiveJob log entry for structured logging
16
- class ActiveJob < T::Struct
17
- extend T::Sig
18
-
19
- include Interfaces::CommonFields
20
- include Interfaces::AdditionalDataField
21
- include SerializeCommon
22
- include MergeAdditionalDataFields
23
-
24
- ActiveJobEvent = T.type_alias {
25
- T.any(
26
- Event::Enqueue,
27
- Event::Schedule,
28
- Event::Start,
29
- Event::Finish
30
- )
31
- }
32
-
33
- # Common fields
34
- const :source, Source::Job, default: T.let(Source::Job, Source::Job)
35
- const :event, ActiveJobEvent
36
- const :timestamp, Time, factory: -> { Time.now }
37
- const :level, Level, default: T.let(Level::Info, Level)
38
-
39
- # Job-specific fields
40
- const :job_id, T.nilable(String), default: nil
41
- const :job_class, T.nilable(String), default: nil
42
- const :queue_name, T.nilable(String), default: nil
43
- const :arguments, T.nilable(T::Array[T.untyped]), default: nil
44
- const :duration, T.nilable(Float), default: nil
45
- const :additional_data, T::Hash[Symbol, T.untyped], default: {}
46
-
47
- # Convert the log entry to a hash for serialization
48
- sig { override.params(strict: T::Boolean).returns(T::Hash[Symbol, T.untyped]) }
49
- def serialize(strict = true)
50
- hash = serialize_common(strict)
51
- merge_additional_data_fields(hash)
52
-
53
- # Add job-specific fields if they're present
54
- hash[LOG_KEYS.fetch(:job_id)] = job_id if job_id
55
- hash[LOG_KEYS.fetch(:job_class)] = job_class if job_class
56
- hash[LOG_KEYS.fetch(:queue_name)] = queue_name if queue_name
57
- hash[LOG_KEYS.fetch(:arguments)] = arguments if arguments
58
- hash[LOG_KEYS.fetch(:duration)] = duration if duration
59
-
60
- hash
16
+ class ActiveJob
17
+ class BaseFields < T::Struct
18
+ extend T::Sig
19
+ const :job_id, String
20
+ const :job_class, String
21
+ const :queue_name, T.nilable(String), default: nil
22
+ const :arguments, T.nilable(T::Array[T.untyped]), default: nil
23
+ const :executions, T.nilable(Integer), default: nil
24
+ const :provider_job_id, T.nilable(String), default: nil
25
+
26
+ Kwargs = T.type_alias do
27
+ {
28
+ job_id: String,
29
+ job_class: String,
30
+ queue_name: T.nilable(String),
31
+ arguments: T.nilable(T::Array[T.untyped]),
32
+ executions: T.nilable(Integer),
33
+ provider_job_id: T.nilable(String)
34
+ }
35
+ end
36
+
37
+ sig { returns(Kwargs) }
38
+ def to_kwargs
39
+ {
40
+ job_id: job_id,
41
+ job_class: job_class,
42
+ queue_name: queue_name,
43
+ arguments: arguments,
44
+ executions: executions,
45
+ provider_job_id: provider_job_id
46
+ }
47
+ end
61
48
  end
62
49
  end
63
50
  end
@@ -1,54 +1,93 @@
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 "shared/serialize_common"
7
- 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"
8
15
  require_relative "../enums/source"
9
16
  require_relative "../enums/event"
10
17
  require_relative "../enums/level"
11
- require_relative "../log_keys"
18
+ require_relative "../enums/log_field"
12
19
 
13
20
  module LogStruct
14
21
  module Log
15
- # ActiveModelSerializers render log entry for structured logging
16
22
  class ActiveModelSerializers < T::Struct
17
- extend T::Sig
23
+ # typed: strict
24
+ # frozen_string_literal: true
18
25
 
19
- include Interfaces::CommonFields
20
- include Interfaces::AdditionalDataField
21
- include SerializeCommon
22
- include MergeAdditionalDataFields
26
+ extend T::Sig
23
27
 
24
- AMSEvent = T.type_alias { Event::Log }
28
+ extend T::Sig
25
29
 
26
- # Common fields
27
- const :source, Source::Rails, default: T.let(Source::Rails, Source::Rails)
28
- const :event, AMSEvent, default: T.let(Event::Log, AMSEvent)
29
- const :level, Level, default: T.let(Level::Info, Level)
30
+ # Shared/common fields
31
+ const :source, Source::Rails, default: Source::Rails
32
+ const :event, Event, default: Event::Generate
30
33
  const :timestamp, Time, factory: -> { Time.now }
34
+ const :level, Level, default: Level::Info
31
35
 
32
- # AMS specifics
33
- const :message, String, default: "ams.render"
36
+ # Event-specific fields
37
+ const :message, String
34
38
  const :serializer, T.nilable(String), default: nil
35
39
  const :adapter, T.nilable(String), default: nil
36
40
  const :resource_class, T.nilable(String), default: nil
37
- const :duration_ms, T.nilable(Float), default: nil
38
-
39
- # Extra data
40
- const :additional_data, T::Hash[Symbol, T.untyped], default: {}
41
-
42
- sig { override.params(strict: T::Boolean).returns(T::Hash[Symbol, T.untyped]) }
43
- def serialize(strict = true)
44
- hash = serialize_common(strict)
45
- merge_additional_data_fields(hash)
46
- hash[LOG_KEYS.fetch(:message)] = message
47
- hash[:serializer] = serializer if serializer
48
- hash[:adapter] = adapter if adapter
49
- hash[:resource_class] = resource_class if resource_class
50
- hash[:duration_ms] = duration_ms if duration_ms
51
- hash
41
+ const :duration_ms, Float
42
+
43
+ # Additional data
44
+
45
+ # Request fields (optional)
46
+
47
+ # Serialize shared fields
48
+ include LogStruct::Log::Interfaces::CommonFields
49
+ include LogStruct::Log::Shared::SerializeCommon
50
+
51
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
52
+ def self.base_hash
53
+ {}
54
+ end
55
+
56
+ sig {
57
+ params(message: T.untyped,
58
+ duration_ms: T.untyped,
59
+ serializer: T.untyped,
60
+ adapter: T.untyped,
61
+ resource_class: T.untyped,
62
+ additional_data: T.untyped,
63
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
64
+ }
65
+ def self.build(message:,
66
+ duration_ms:,
67
+ serializer: nil,
68
+ adapter: nil,
69
+ resource_class: nil,
70
+ additional_data: nil,
71
+ timestamp: Time.now)
72
+ h = base_hash
73
+ h[LogField::Message] = message
74
+ h[LogField::Serializer] = serializer unless serializer.nil?
75
+ h[LogField::Adapter] = adapter unless adapter.nil?
76
+ h[LogField::ResourceClass] = resource_class unless resource_class.nil?
77
+ h[LogField::DurationMs] = duration_ms
78
+ h
79
+ end
80
+
81
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
82
+ def to_h
83
+ self.class.build(
84
+ message: message,
85
+ serializer: serializer,
86
+ adapter: adapter,
87
+ resource_class: resource_class,
88
+ duration_ms: duration_ms,
89
+ timestamp: timestamp
90
+ )
52
91
  end
53
92
  end
54
93
  end
@@ -0,0 +1,87 @@
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 ActiveStorage
23
+ class Delete < 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::Storage, default: Source::Storage
33
+ const :event, Event, default: Event::Delete
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ const :storage, String
38
+ const :file_id, String
39
+
40
+ # Event-specific fields
41
+
42
+ # Additional data
43
+
44
+ # Request fields (optional)
45
+
46
+ # Serialize shared fields
47
+ include LogStruct::Log::Interfaces::CommonFields
48
+ include LogStruct::Log::Shared::SerializeCommon
49
+
50
+ sig {
51
+ params(storage: T.untyped,
52
+ file_id: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
53
+ }
54
+ def self.base_hash(storage: nil,
55
+ file_id: nil)
56
+ h = {}
57
+ h[LogField::Storage] = storage unless storage.nil?
58
+ h[LogField::FileId] = file_id unless file_id.nil?
59
+ h
60
+ end
61
+
62
+ sig {
63
+ params(storage: T.untyped,
64
+ file_id: T.untyped,
65
+ additional_data: T.untyped,
66
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
67
+ }
68
+ def self.build(storage:,
69
+ file_id:,
70
+ additional_data: nil,
71
+ timestamp: Time.now)
72
+ base_hash(storage: storage,
73
+ file_id: file_id)
74
+ end
75
+
76
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
77
+ def to_h
78
+ self.class.build(
79
+ storage: storage,
80
+ file_id: file_id,
81
+ timestamp: timestamp
82
+ )
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,103 @@
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 ActiveStorage
23
+ class Download < 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::Storage, default: Source::Storage
33
+ const :event, Event, default: Event::Download
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ const :storage, String
38
+ const :file_id, String
39
+
40
+ # Event-specific fields
41
+ const :filename, T.nilable(String), default: nil
42
+ const :range, T.nilable(String), default: nil
43
+ const :duration_ms, T.nilable(Float), default: nil
44
+
45
+ # Additional data
46
+
47
+ # Request fields (optional)
48
+
49
+ # Serialize shared fields
50
+ include LogStruct::Log::Interfaces::CommonFields
51
+ include LogStruct::Log::Shared::SerializeCommon
52
+
53
+ sig {
54
+ params(storage: T.untyped,
55
+ file_id: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
56
+ }
57
+ def self.base_hash(storage: nil,
58
+ file_id: nil)
59
+ h = {}
60
+ h[LogField::Storage] = storage unless storage.nil?
61
+ h[LogField::FileId] = file_id unless file_id.nil?
62
+ h
63
+ end
64
+
65
+ sig {
66
+ params(storage: T.untyped,
67
+ file_id: T.untyped,
68
+ filename: T.untyped,
69
+ range: T.untyped,
70
+ duration_ms: T.untyped,
71
+ additional_data: T.untyped,
72
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
73
+ }
74
+ def self.build(storage:,
75
+ file_id:,
76
+ filename: nil,
77
+ range: nil,
78
+ duration_ms: nil,
79
+ additional_data: nil,
80
+ timestamp: Time.now)
81
+ h = base_hash(storage: storage,
82
+ file_id: file_id)
83
+ h[LogField::Filename] = filename unless filename.nil?
84
+ h[LogField::Range] = range unless range.nil?
85
+ h[LogField::DurationMs] = duration_ms unless duration_ms.nil?
86
+ h
87
+ end
88
+
89
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
90
+ def to_h
91
+ self.class.build(
92
+ storage: storage,
93
+ file_id: file_id,
94
+ filename: filename,
95
+ range: range,
96
+ duration_ms: duration_ms,
97
+ timestamp: timestamp
98
+ )
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end