logstruct 0.0.2 → 0.1.1

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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -22
  3. data/README.md +25 -2
  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 +126 -13
  7. data/lib/log_struct/concerns/error_handling.rb +3 -7
  8. data/lib/log_struct/concerns/logging.rb +5 -5
  9. data/lib/log_struct/config_struct/filters.rb +18 -0
  10. data/lib/log_struct/config_struct/integrations.rb +16 -12
  11. data/lib/log_struct/configuration.rb +13 -0
  12. data/lib/log_struct/enums/event.rb +13 -0
  13. data/lib/log_struct/enums/log_field.rb +154 -0
  14. data/lib/log_struct/enums/source.rb +4 -1
  15. data/lib/log_struct/formatter.rb +29 -17
  16. data/lib/log_struct/integrations/action_mailer/error_handling.rb +3 -11
  17. data/lib/log_struct/integrations/action_mailer/event_logging.rb +22 -12
  18. data/lib/log_struct/integrations/active_job/log_subscriber.rb +52 -48
  19. data/lib/log_struct/integrations/active_model_serializers.rb +49 -0
  20. data/lib/log_struct/integrations/active_record.rb +35 -5
  21. data/lib/log_struct/integrations/active_storage.rb +59 -20
  22. data/lib/log_struct/integrations/ahoy.rb +54 -0
  23. data/lib/log_struct/integrations/carrierwave.rb +13 -16
  24. data/lib/log_struct/integrations/dotenv.rb +278 -0
  25. data/lib/log_struct/integrations/good_job/log_subscriber.rb +86 -136
  26. data/lib/log_struct/integrations/good_job/logger.rb +8 -10
  27. data/lib/log_struct/integrations/good_job.rb +5 -7
  28. data/lib/log_struct/integrations/host_authorization.rb +25 -4
  29. data/lib/log_struct/integrations/lograge.rb +20 -14
  30. data/lib/log_struct/integrations/puma.rb +482 -0
  31. data/lib/log_struct/integrations/rack_error_handler/middleware.rb +11 -18
  32. data/lib/log_struct/integrations/shrine.rb +44 -19
  33. data/lib/log_struct/integrations/sorbet.rb +48 -0
  34. data/lib/log_struct/integrations.rb +25 -0
  35. data/lib/log_struct/log/action_mailer/delivered.rb +99 -0
  36. data/lib/log_struct/log/action_mailer/delivery.rb +99 -0
  37. data/lib/log_struct/log/action_mailer.rb +30 -45
  38. data/lib/log_struct/log/active_job/enqueue.rb +125 -0
  39. data/lib/log_struct/log/active_job/finish.rb +130 -0
  40. data/lib/log_struct/log/active_job/schedule.rb +125 -0
  41. data/lib/log_struct/log/active_job/start.rb +130 -0
  42. data/lib/log_struct/log/active_job.rb +41 -54
  43. data/lib/log_struct/log/active_model_serializers.rb +94 -0
  44. data/lib/log_struct/log/active_storage/delete.rb +87 -0
  45. data/lib/log_struct/log/active_storage/download.rb +103 -0
  46. data/lib/log_struct/log/active_storage/exist.rb +93 -0
  47. data/lib/log_struct/log/active_storage/metadata.rb +93 -0
  48. data/lib/log_struct/log/active_storage/stream.rb +93 -0
  49. data/lib/log_struct/log/active_storage/upload.rb +118 -0
  50. data/lib/log_struct/log/active_storage/url.rb +93 -0
  51. data/lib/log_struct/log/active_storage.rb +32 -68
  52. data/lib/log_struct/log/ahoy.rb +88 -0
  53. data/lib/log_struct/log/carrierwave/delete.rb +115 -0
  54. data/lib/log_struct/log/carrierwave/download.rb +131 -0
  55. data/lib/log_struct/log/carrierwave/upload.rb +141 -0
  56. data/lib/log_struct/log/carrierwave.rb +37 -72
  57. data/lib/log_struct/log/dotenv/load.rb +76 -0
  58. data/lib/log_struct/log/dotenv/restore.rb +76 -0
  59. data/lib/log_struct/log/dotenv/save.rb +76 -0
  60. data/lib/log_struct/log/dotenv/update.rb +76 -0
  61. data/lib/log_struct/log/dotenv.rb +12 -0
  62. data/lib/log_struct/log/error.rb +58 -46
  63. data/lib/log_struct/log/good_job/enqueue.rb +126 -0
  64. data/lib/log_struct/log/good_job/error.rb +151 -0
  65. data/lib/log_struct/log/good_job/finish.rb +136 -0
  66. data/lib/log_struct/log/good_job/log.rb +131 -0
  67. data/lib/log_struct/log/good_job/schedule.rb +136 -0
  68. data/lib/log_struct/log/good_job/start.rb +136 -0
  69. data/lib/log_struct/log/good_job.rb +40 -141
  70. data/lib/log_struct/log/interfaces/additional_data_field.rb +1 -17
  71. data/lib/log_struct/log/interfaces/common_fields.rb +1 -39
  72. data/lib/log_struct/log/interfaces/public_common_fields.rb +4 -0
  73. data/lib/log_struct/log/interfaces/request_fields.rb +1 -33
  74. data/lib/log_struct/log/plain.rb +59 -34
  75. data/lib/log_struct/log/puma/shutdown.rb +80 -0
  76. data/lib/log_struct/log/puma/start.rb +120 -0
  77. data/lib/log_struct/log/puma.rb +10 -0
  78. data/lib/log_struct/log/request.rb +132 -48
  79. data/lib/log_struct/log/security/blocked_host.rb +141 -0
  80. data/lib/log_struct/log/security/csrf_violation.rb +131 -0
  81. data/lib/log_struct/log/security/ip_spoof.rb +141 -0
  82. data/lib/log_struct/log/security.rb +40 -70
  83. data/lib/log_struct/log/shared/add_request_fields.rb +1 -26
  84. data/lib/log_struct/log/shared/merge_additional_data_fields.rb +1 -25
  85. data/lib/log_struct/log/shared/serialize_common.rb +1 -33
  86. data/lib/log_struct/log/shared/serialize_common_public.rb +44 -0
  87. data/lib/log_struct/log/shrine/delete.rb +85 -0
  88. data/lib/log_struct/log/shrine/download.rb +90 -0
  89. data/lib/log_struct/log/shrine/exist.rb +90 -0
  90. data/lib/log_struct/log/shrine/metadata.rb +90 -0
  91. data/lib/log_struct/log/shrine/upload.rb +105 -0
  92. data/lib/log_struct/log/shrine.rb +10 -67
  93. data/lib/log_struct/log/sidekiq.rb +65 -26
  94. data/lib/log_struct/log/sql.rb +113 -106
  95. data/lib/log_struct/log.rb +31 -32
  96. data/lib/log_struct/multi_error_reporter.rb +80 -22
  97. data/lib/log_struct/param_filters.rb +50 -7
  98. data/lib/log_struct/rails_boot_banner_silencer.rb +123 -0
  99. data/lib/log_struct/railtie.rb +71 -0
  100. data/lib/log_struct/semantic_logger/formatter.rb +4 -2
  101. data/lib/log_struct/semantic_logger/setup.rb +34 -18
  102. data/lib/log_struct/shared/interfaces/additional_data_field.rb +22 -0
  103. data/lib/log_struct/shared/interfaces/common_fields.rb +39 -0
  104. data/lib/log_struct/shared/interfaces/public_common_fields.rb +29 -0
  105. data/lib/log_struct/shared/interfaces/request_fields.rb +39 -0
  106. data/lib/log_struct/shared/shared/add_request_fields.rb +28 -0
  107. data/lib/log_struct/shared/shared/merge_additional_data_fields.rb +27 -0
  108. data/lib/log_struct/shared/shared/serialize_common.rb +58 -0
  109. data/lib/log_struct/version.rb +1 -1
  110. data/lib/log_struct.rb +22 -4
  111. data/logstruct.gemspec +3 -0
  112. metadata +108 -5
  113. data/lib/log_struct/log/interfaces/message_field.rb +0 -20
  114. data/lib/log_struct/log_keys.rb +0 -102
@@ -0,0 +1,93 @@
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 Exist < 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::Exist
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 :exist, T.nilable(T::Boolean), default: nil
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 {
52
+ params(storage: T.untyped,
53
+ file_id: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
54
+ }
55
+ def self.base_hash(storage: nil,
56
+ file_id: nil)
57
+ h = {}
58
+ h[LogField::Storage] = storage unless storage.nil?
59
+ h[LogField::FileId] = file_id unless file_id.nil?
60
+ h
61
+ end
62
+
63
+ sig {
64
+ params(storage: T.untyped,
65
+ file_id: T.untyped,
66
+ exist: T.untyped,
67
+ additional_data: T.untyped,
68
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
69
+ }
70
+ def self.build(storage:,
71
+ file_id:,
72
+ exist: nil,
73
+ additional_data: nil,
74
+ timestamp: Time.now)
75
+ h = base_hash(storage: storage,
76
+ file_id: file_id)
77
+ h[LogField::Exist] = exist unless exist.nil?
78
+ h
79
+ end
80
+
81
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
82
+ def to_h
83
+ self.class.build(
84
+ storage: storage,
85
+ file_id: file_id,
86
+ exist: exist,
87
+ timestamp: timestamp
88
+ )
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,93 @@
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 Metadata < 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::Metadata
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 :metadata, T.nilable(T::Hash[String, T.untyped]), default: nil
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 {
52
+ params(storage: T.untyped,
53
+ file_id: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
54
+ }
55
+ def self.base_hash(storage: nil,
56
+ file_id: nil)
57
+ h = {}
58
+ h[LogField::Storage] = storage unless storage.nil?
59
+ h[LogField::FileId] = file_id unless file_id.nil?
60
+ h
61
+ end
62
+
63
+ sig {
64
+ params(storage: T.untyped,
65
+ file_id: T.untyped,
66
+ metadata: T.untyped,
67
+ additional_data: T.untyped,
68
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
69
+ }
70
+ def self.build(storage:,
71
+ file_id:,
72
+ metadata: nil,
73
+ additional_data: nil,
74
+ timestamp: Time.now)
75
+ h = base_hash(storage: storage,
76
+ file_id: file_id)
77
+ h[LogField::Metadata] = metadata unless metadata.nil?
78
+ h
79
+ end
80
+
81
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
82
+ def to_h
83
+ self.class.build(
84
+ storage: storage,
85
+ file_id: file_id,
86
+ metadata: metadata,
87
+ timestamp: timestamp
88
+ )
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,93 @@
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 Stream < 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::Stream
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 :prefix, T.nilable(String), default: nil
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 {
52
+ params(storage: T.untyped,
53
+ file_id: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
54
+ }
55
+ def self.base_hash(storage: nil,
56
+ file_id: nil)
57
+ h = {}
58
+ h[LogField::Storage] = storage unless storage.nil?
59
+ h[LogField::FileId] = file_id unless file_id.nil?
60
+ h
61
+ end
62
+
63
+ sig {
64
+ params(storage: T.untyped,
65
+ file_id: T.untyped,
66
+ prefix: T.untyped,
67
+ additional_data: T.untyped,
68
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
69
+ }
70
+ def self.build(storage:,
71
+ file_id:,
72
+ prefix: nil,
73
+ additional_data: nil,
74
+ timestamp: Time.now)
75
+ h = base_hash(storage: storage,
76
+ file_id: file_id)
77
+ h[LogField::Prefix] = prefix unless prefix.nil?
78
+ h
79
+ end
80
+
81
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
82
+ def to_h
83
+ self.class.build(
84
+ storage: storage,
85
+ file_id: file_id,
86
+ prefix: prefix,
87
+ timestamp: timestamp
88
+ )
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,118 @@
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 Upload < 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::Upload
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 :mime_type, T.nilable(String), default: nil
43
+ const :size, T.nilable(Integer), default: nil
44
+ const :metadata, T.nilable(T::Hash[String, T.untyped]), default: nil
45
+ const :duration_ms, T.nilable(Float), default: nil
46
+ const :checksum, T.nilable(String), 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(storage: T.untyped,
58
+ file_id: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
59
+ }
60
+ def self.base_hash(storage: nil,
61
+ file_id: nil)
62
+ h = {}
63
+ h[LogField::Storage] = storage unless storage.nil?
64
+ h[LogField::FileId] = file_id unless file_id.nil?
65
+ h
66
+ end
67
+
68
+ sig {
69
+ params(storage: T.untyped,
70
+ file_id: T.untyped,
71
+ filename: T.untyped,
72
+ mime_type: T.untyped,
73
+ size: T.untyped,
74
+ metadata: T.untyped,
75
+ duration_ms: T.untyped,
76
+ checksum: T.untyped,
77
+ additional_data: T.untyped,
78
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
79
+ }
80
+ def self.build(storage:,
81
+ file_id:,
82
+ filename: nil,
83
+ mime_type: nil,
84
+ size: nil,
85
+ metadata: nil,
86
+ duration_ms: nil,
87
+ checksum: nil,
88
+ additional_data: nil,
89
+ timestamp: Time.now)
90
+ h = base_hash(storage: storage,
91
+ file_id: file_id)
92
+ h[LogField::Filename] = filename unless filename.nil?
93
+ h[LogField::MimeType] = mime_type unless mime_type.nil?
94
+ h[LogField::Size] = size unless size.nil?
95
+ h[LogField::Metadata] = metadata unless metadata.nil?
96
+ h[LogField::DurationMs] = duration_ms unless duration_ms.nil?
97
+ h[LogField::Checksum] = checksum unless checksum.nil?
98
+ h
99
+ end
100
+
101
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
102
+ def to_h
103
+ self.class.build(
104
+ storage: storage,
105
+ file_id: file_id,
106
+ filename: filename,
107
+ mime_type: mime_type,
108
+ size: size,
109
+ metadata: metadata,
110
+ duration_ms: duration_ms,
111
+ checksum: checksum,
112
+ timestamp: timestamp
113
+ )
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,93 @@
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 Url < 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::Url
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 :url, String
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 {
52
+ params(storage: T.untyped,
53
+ file_id: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
54
+ }
55
+ def self.base_hash(storage: nil,
56
+ file_id: nil)
57
+ h = {}
58
+ h[LogField::Storage] = storage unless storage.nil?
59
+ h[LogField::FileId] = file_id unless file_id.nil?
60
+ h
61
+ end
62
+
63
+ sig {
64
+ params(url: T.untyped,
65
+ storage: T.untyped,
66
+ file_id: T.untyped,
67
+ additional_data: T.untyped,
68
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
69
+ }
70
+ def self.build(url:,
71
+ storage:,
72
+ file_id:,
73
+ additional_data: nil,
74
+ timestamp: Time.now)
75
+ h = base_hash(storage: storage,
76
+ file_id: file_id)
77
+ h[LogField::Url] = url
78
+ h
79
+ end
80
+
81
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
82
+ def to_h
83
+ self.class.build(
84
+ storage: storage,
85
+ file_id: file_id,
86
+ url: url,
87
+ timestamp: timestamp
88
+ )
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,77 +1,41 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative "interfaces/common_fields"
5
- require_relative "shared/serialize_common"
6
- require_relative "../enums/source"
7
- require_relative "../enums/event"
8
- require_relative "../enums/level"
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_storage/upload"
10
+ require_relative "active_storage/download"
11
+ require_relative "active_storage/delete"
12
+ require_relative "active_storage/metadata"
13
+ require_relative "active_storage/exist"
14
+ require_relative "active_storage/stream"
15
+ require_relative "active_storage/url"
9
16
 
10
17
  module LogStruct
11
18
  module Log
12
- # ActiveStorage log entry for structured logging
13
- class ActiveStorage < T::Struct
14
- extend T::Sig
15
-
16
- include Interfaces::CommonFields
17
- include SerializeCommon
18
-
19
- # Define valid event types for ActiveStorage
20
- ActiveStorageEvent = T.type_alias {
21
- T.any(
22
- Event::Upload,
23
- Event::Download,
24
- Event::Delete,
25
- Event::Metadata,
26
- Event::Exist,
27
- Event::Stream,
28
- Event::Url,
29
- Event::Unknown
30
- )
31
- }
32
-
33
- # Common fields
34
- const :source, Source::Storage, default: T.let(Source::Storage, Source::Storage)
35
- const :event, ActiveStorageEvent
36
- const :timestamp, Time, factory: -> { Time.now }
37
- const :level, Level, default: T.let(Level::Info, Level)
38
-
39
- # ActiveStorage-specific fields
40
- const :operation, T.nilable(Symbol), default: nil
41
- const :storage, T.nilable(String), default: nil
42
- const :file_id, T.nilable(String), default: nil
43
- const :filename, T.nilable(String), default: nil
44
- const :mime_type, T.nilable(String), default: nil
45
- const :size, T.nilable(Integer), default: nil
46
- const :metadata, T.nilable(T::Hash[String, T.untyped]), default: nil
47
- const :duration, T.nilable(Float), default: nil
48
- const :checksum, T.nilable(String), default: nil
49
- const :exist, T.nilable(T::Boolean), default: nil
50
- const :url, T.nilable(String), default: nil
51
- const :prefix, T.nilable(String), default: nil
52
- const :range, T.nilable(String), default: nil
53
-
54
- # Convert the log entry to a hash for serialization
55
- sig { override.params(strict: T::Boolean).returns(T::Hash[Symbol, T.untyped]) }
56
- def serialize(strict = true)
57
- hash = serialize_common(strict)
58
-
59
- # Add ActiveStorage-specific fields - only include non-nil values
60
- hash[LOG_KEYS.fetch(:operation)] = operation if operation
61
- hash[LOG_KEYS.fetch(:storage)] = storage if storage
62
- hash[LOG_KEYS.fetch(:file_id)] = file_id if file_id
63
- hash[LOG_KEYS.fetch(:filename)] = filename if filename
64
- hash[LOG_KEYS.fetch(:mime_type)] = mime_type if mime_type
65
- hash[LOG_KEYS.fetch(:size)] = size if size
66
- hash[LOG_KEYS.fetch(:metadata)] = metadata if metadata
67
- hash[LOG_KEYS.fetch(:duration)] = duration if duration
68
- hash[LOG_KEYS.fetch(:checksum)] = checksum if checksum
69
- hash[LOG_KEYS.fetch(:exist)] = exist if !exist.nil?
70
- hash[LOG_KEYS.fetch(:url)] = url if url
71
- hash[LOG_KEYS.fetch(:prefix)] = prefix if prefix
72
- hash[LOG_KEYS.fetch(:range)] = range if range
73
-
74
- hash
19
+ class ActiveStorage
20
+ class BaseFields < T::Struct
21
+ extend T::Sig
22
+ const :storage, String
23
+ const :file_id, String
24
+
25
+ Kwargs = T.type_alias do
26
+ {
27
+ storage: String,
28
+ file_id: String
29
+ }
30
+ end
31
+
32
+ sig { returns(Kwargs) }
33
+ def to_kwargs
34
+ {
35
+ storage: storage,
36
+ file_id: file_id
37
+ }
38
+ end
75
39
  end
76
40
  end
77
41
  end
@@ -0,0 +1,88 @@
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 Ahoy < T::Struct
23
+ # typed: strict
24
+ # frozen_string_literal: true
25
+
26
+ extend T::Sig
27
+
28
+ extend T::Sig
29
+
30
+ # Shared/common fields
31
+ const :source, Source::App, default: Source::App
32
+ const :event, Event, default: Event::Log
33
+ const :timestamp, Time, factory: -> { Time.now }
34
+ const :level, Level, default: Level::Info
35
+
36
+ # Event-specific fields
37
+ const :message, String
38
+ const :ahoy_event, String
39
+ const :properties, T.nilable(T::Hash[Symbol, T.untyped]), default: nil
40
+
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
+
48
+ # Serialize shared fields
49
+ include LogStruct::Log::Interfaces::CommonFields
50
+ include LogStruct::Log::Shared::SerializeCommon
51
+
52
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
53
+ def self.base_hash
54
+ {}
55
+ end
56
+
57
+ sig {
58
+ params(message: T.untyped,
59
+ ahoy_event: T.untyped,
60
+ properties: T.untyped,
61
+ additional_data: T.untyped,
62
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
63
+ }
64
+ def self.build(message:,
65
+ ahoy_event:,
66
+ properties: nil,
67
+ additional_data: nil,
68
+ timestamp: Time.now)
69
+ h = base_hash
70
+ h[LogField::Message] = message
71
+ h[LogField::AhoyEvent] = ahoy_event
72
+ h[LogField::Properties] = properties unless properties.nil?
73
+ h
74
+ end
75
+
76
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
77
+ def to_h
78
+ self.class.build(
79
+ message: message,
80
+ ahoy_event: ahoy_event,
81
+ properties: properties,
82
+ additional_data: additional_data,
83
+ timestamp: timestamp
84
+ )
85
+ end
86
+ end
87
+ end
88
+ end