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,136 @@
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 Finish < 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::Finish
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 :finished_at, Time
46
+ const :process_id, Integer
47
+ const :thread_id, String
48
+
49
+ # Additional data
50
+ include LogStruct::Log::Interfaces::AdditionalDataField
51
+ const :additional_data, T.nilable(T::Hash[T.any(String, Symbol), T.untyped]), default: nil
52
+ include LogStruct::Log::Shared::MergeAdditionalDataFields
53
+
54
+ # Request fields (optional)
55
+
56
+ # Serialize shared fields
57
+ include LogStruct::Log::Interfaces::CommonFields
58
+ include LogStruct::Log::Shared::SerializeCommon
59
+
60
+ sig {
61
+ params(job_id: T.untyped,
62
+ job_class: T.untyped,
63
+ queue_name: T.untyped,
64
+ arguments: T.untyped,
65
+ executions: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
66
+ }
67
+ def self.base_hash(job_id: nil,
68
+ job_class: nil,
69
+ queue_name: nil,
70
+ arguments: nil,
71
+ executions: nil)
72
+ h = {}
73
+ h[LogField::JobId] = job_id unless job_id.nil?
74
+ h[LogField::JobClass] = job_class unless job_class.nil?
75
+ h[LogField::QueueName] = queue_name unless queue_name.nil?
76
+ h[LogField::Arguments] = arguments unless arguments.nil?
77
+ h[LogField::Executions] = executions unless executions.nil?
78
+ h
79
+ end
80
+
81
+ sig {
82
+ params(duration_ms: T.untyped,
83
+ finished_at: T.untyped,
84
+ process_id: T.untyped,
85
+ thread_id: T.untyped,
86
+ job_id: T.untyped,
87
+ job_class: T.untyped,
88
+ queue_name: T.untyped,
89
+ arguments: T.untyped,
90
+ executions: T.untyped,
91
+ additional_data: T.untyped,
92
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
93
+ }
94
+ def self.build(duration_ms:,
95
+ finished_at:,
96
+ process_id:,
97
+ thread_id:,
98
+ job_id: nil,
99
+ job_class: nil,
100
+ queue_name: nil,
101
+ arguments: nil,
102
+ executions: nil,
103
+ additional_data: nil,
104
+ timestamp: Time.now)
105
+ h = base_hash(job_id: job_id,
106
+ job_class: job_class,
107
+ queue_name: queue_name,
108
+ arguments: arguments,
109
+ executions: executions)
110
+ h[LogField::DurationMs] = duration_ms
111
+ h[LogField::FinishedAt] = finished_at
112
+ h[LogField::ProcessId] = process_id
113
+ h[LogField::ThreadId] = thread_id
114
+ h
115
+ end
116
+
117
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
118
+ def to_h
119
+ self.class.build(
120
+ job_id: job_id,
121
+ job_class: job_class,
122
+ queue_name: queue_name,
123
+ arguments: arguments,
124
+ executions: executions,
125
+ duration_ms: duration_ms,
126
+ finished_at: finished_at,
127
+ process_id: process_id,
128
+ thread_id: thread_id,
129
+ additional_data: additional_data,
130
+ timestamp: timestamp
131
+ )
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,131 @@
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 Log < 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::Log
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 :message, String
45
+ const :process_id, Integer
46
+ const :thread_id, String
47
+
48
+ # Additional data
49
+ include LogStruct::Log::Interfaces::AdditionalDataField
50
+ const :additional_data, T.nilable(T::Hash[T.any(String, Symbol), T.untyped]), default: nil
51
+ include LogStruct::Log::Shared::MergeAdditionalDataFields
52
+
53
+ # Request fields (optional)
54
+
55
+ # Serialize shared fields
56
+ include LogStruct::Log::Interfaces::CommonFields
57
+ include LogStruct::Log::Shared::SerializeCommon
58
+
59
+ sig {
60
+ params(job_id: T.untyped,
61
+ job_class: T.untyped,
62
+ queue_name: T.untyped,
63
+ arguments: T.untyped,
64
+ executions: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
65
+ }
66
+ def self.base_hash(job_id: nil,
67
+ job_class: nil,
68
+ queue_name: nil,
69
+ arguments: nil,
70
+ executions: nil)
71
+ h = {}
72
+ h[LogField::JobId] = job_id unless job_id.nil?
73
+ h[LogField::JobClass] = job_class unless job_class.nil?
74
+ h[LogField::QueueName] = queue_name unless queue_name.nil?
75
+ h[LogField::Arguments] = arguments unless arguments.nil?
76
+ h[LogField::Executions] = executions unless executions.nil?
77
+ h
78
+ end
79
+
80
+ sig {
81
+ params(message: T.untyped,
82
+ process_id: T.untyped,
83
+ thread_id: T.untyped,
84
+ job_id: T.untyped,
85
+ job_class: T.untyped,
86
+ queue_name: T.untyped,
87
+ arguments: T.untyped,
88
+ executions: T.untyped,
89
+ additional_data: T.untyped,
90
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
91
+ }
92
+ def self.build(message:,
93
+ process_id:,
94
+ thread_id:,
95
+ job_id: nil,
96
+ job_class: nil,
97
+ queue_name: nil,
98
+ arguments: nil,
99
+ executions: 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
+ h[LogField::Message] = message
108
+ h[LogField::ProcessId] = process_id
109
+ h[LogField::ThreadId] = thread_id
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
+ message: message,
122
+ process_id: process_id,
123
+ thread_id: thread_id,
124
+ additional_data: additional_data,
125
+ timestamp: timestamp
126
+ )
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,136 @@
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 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, 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, Time
46
+ const :priority, T.nilable(Integer), default: nil
47
+ const :cron_key, T.nilable(String), default: nil
48
+
49
+ # Additional data
50
+ include LogStruct::Log::Interfaces::AdditionalDataField
51
+ const :additional_data, T.nilable(T::Hash[T.any(String, Symbol), T.untyped]), default: nil
52
+ include LogStruct::Log::Shared::MergeAdditionalDataFields
53
+
54
+ # Request fields (optional)
55
+
56
+ # Serialize shared fields
57
+ include LogStruct::Log::Interfaces::CommonFields
58
+ include LogStruct::Log::Shared::SerializeCommon
59
+
60
+ sig {
61
+ params(job_id: T.untyped,
62
+ job_class: T.untyped,
63
+ queue_name: T.untyped,
64
+ arguments: T.untyped,
65
+ executions: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
66
+ }
67
+ def self.base_hash(job_id: nil,
68
+ job_class: nil,
69
+ queue_name: nil,
70
+ arguments: nil,
71
+ executions: nil)
72
+ h = {}
73
+ h[LogField::JobId] = job_id unless job_id.nil?
74
+ h[LogField::JobClass] = job_class unless job_class.nil?
75
+ h[LogField::QueueName] = queue_name unless queue_name.nil?
76
+ h[LogField::Arguments] = arguments unless arguments.nil?
77
+ h[LogField::Executions] = executions unless executions.nil?
78
+ h
79
+ end
80
+
81
+ sig {
82
+ params(duration_ms: T.untyped,
83
+ scheduled_at: T.untyped,
84
+ job_id: T.untyped,
85
+ job_class: T.untyped,
86
+ queue_name: T.untyped,
87
+ arguments: T.untyped,
88
+ executions: T.untyped,
89
+ priority: T.untyped,
90
+ cron_key: T.untyped,
91
+ additional_data: T.untyped,
92
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
93
+ }
94
+ def self.build(duration_ms:,
95
+ scheduled_at:,
96
+ job_id: nil,
97
+ job_class: nil,
98
+ queue_name: nil,
99
+ arguments: nil,
100
+ executions: nil,
101
+ priority: nil,
102
+ cron_key: nil,
103
+ additional_data: nil,
104
+ timestamp: Time.now)
105
+ h = base_hash(job_id: job_id,
106
+ job_class: job_class,
107
+ queue_name: queue_name,
108
+ arguments: arguments,
109
+ executions: executions)
110
+ h[LogField::DurationMs] = duration_ms
111
+ h[LogField::ScheduledAt] = scheduled_at
112
+ h[LogField::Priority] = priority unless priority.nil?
113
+ h[LogField::CronKey] = cron_key unless cron_key.nil?
114
+ h
115
+ end
116
+
117
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
118
+ def to_h
119
+ self.class.build(
120
+ job_id: job_id,
121
+ job_class: job_class,
122
+ queue_name: queue_name,
123
+ arguments: arguments,
124
+ executions: executions,
125
+ duration_ms: duration_ms,
126
+ scheduled_at: scheduled_at,
127
+ priority: priority,
128
+ cron_key: cron_key,
129
+ additional_data: additional_data,
130
+ timestamp: timestamp
131
+ )
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,136 @@
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 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, 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 :process_id, Integer
45
+ const :thread_id, String
46
+ const :wait_ms, T.nilable(Float), default: nil
47
+ const :scheduled_at, T.nilable(Time), default: nil
48
+
49
+ # Additional data
50
+ include LogStruct::Log::Interfaces::AdditionalDataField
51
+ const :additional_data, T.nilable(T::Hash[T.any(String, Symbol), T.untyped]), default: nil
52
+ include LogStruct::Log::Shared::MergeAdditionalDataFields
53
+
54
+ # Request fields (optional)
55
+
56
+ # Serialize shared fields
57
+ include LogStruct::Log::Interfaces::CommonFields
58
+ include LogStruct::Log::Shared::SerializeCommon
59
+
60
+ sig {
61
+ params(job_id: T.untyped,
62
+ job_class: T.untyped,
63
+ queue_name: T.untyped,
64
+ arguments: T.untyped,
65
+ executions: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
66
+ }
67
+ def self.base_hash(job_id: nil,
68
+ job_class: nil,
69
+ queue_name: nil,
70
+ arguments: nil,
71
+ executions: nil)
72
+ h = {}
73
+ h[LogField::JobId] = job_id unless job_id.nil?
74
+ h[LogField::JobClass] = job_class unless job_class.nil?
75
+ h[LogField::QueueName] = queue_name unless queue_name.nil?
76
+ h[LogField::Arguments] = arguments unless arguments.nil?
77
+ h[LogField::Executions] = executions unless executions.nil?
78
+ h
79
+ end
80
+
81
+ sig {
82
+ params(process_id: T.untyped,
83
+ thread_id: T.untyped,
84
+ job_id: T.untyped,
85
+ job_class: T.untyped,
86
+ queue_name: T.untyped,
87
+ arguments: T.untyped,
88
+ executions: T.untyped,
89
+ wait_ms: T.untyped,
90
+ scheduled_at: T.untyped,
91
+ additional_data: T.untyped,
92
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
93
+ }
94
+ def self.build(process_id:,
95
+ thread_id:,
96
+ job_id: nil,
97
+ job_class: nil,
98
+ queue_name: nil,
99
+ arguments: nil,
100
+ executions: nil,
101
+ wait_ms: nil,
102
+ scheduled_at: nil,
103
+ additional_data: nil,
104
+ timestamp: Time.now)
105
+ h = base_hash(job_id: job_id,
106
+ job_class: job_class,
107
+ queue_name: queue_name,
108
+ arguments: arguments,
109
+ executions: executions)
110
+ h[LogField::ProcessId] = process_id
111
+ h[LogField::ThreadId] = thread_id
112
+ h[LogField::WaitMs] = wait_ms unless wait_ms.nil?
113
+ h[LogField::ScheduledAt] = scheduled_at unless scheduled_at.nil?
114
+ h
115
+ end
116
+
117
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
118
+ def to_h
119
+ self.class.build(
120
+ job_id: job_id,
121
+ job_class: job_class,
122
+ queue_name: queue_name,
123
+ arguments: arguments,
124
+ executions: executions,
125
+ process_id: process_id,
126
+ thread_id: thread_id,
127
+ wait_ms: wait_ms,
128
+ scheduled_at: scheduled_at,
129
+ additional_data: additional_data,
130
+ timestamp: timestamp
131
+ )
132
+ end
133
+ end
134
+ end
135
+ end
136
+ end