Module: Chronicle
- Defined in:
- lib/chronicle.rb,
lib/chronicle/util.rb,
lib/chronicle/engine.rb,
lib/chronicle/version.rb,
lib/chronicle/configuration.rb,
app/models/chronicle/api_log.rb,
app/models/chronicle/api_route.rb,
app/models/chronicle/error_log.rb,
app/errors/chronicle/base_error.rb,
app/models/chronicle/admin_user.rb,
app/models/chronicle/error_group.rb,
app/jobs/chronicle/application_job.rb,
app/errors/chronicle/forbidden_error.rb,
app/errors/chronicle/not_found_error.rb,
app/errors/chronicle/validation_error.rb,
app/jobs/chronicle/flush_api_logs_job.rb,
app/errors/chronicle/bad_request_error.rb,
app/services/chronicle/api_logs/buffer.rb,
app/models/chronicle/application_record.rb,
app/services/chronicle/api_logs/flusher.rb,
app/services/chronicle/api_logs/metrics.rb,
app/services/chronicle/api_logs/updater.rb,
app/services/chronicle/api_routes/stats.rb,
app/errors/chronicle/resource_busy_error.rb,
app/mailers/chronicle/application_mailer.rb,
app/controllers/chronicle/auth_controller.rb,
app/errors/chronicle/authentication_error.rb,
app/errors/chronicle/not_acceptable_error.rb,
app/controllers/chronicle/api_logs_controller.rb,
app/controllers/chronicle/resource_controller.rb,
app/controllers/concerns/chronicle/filterable.rb,
app/controllers/concerns/chronicle/pagination.rb,
app/controllers/chronicle/api_routes_controller.rb,
app/controllers/chronicle/error_logs_controller.rb,
app/controllers/chronicle/application_controller.rb,
app/services/chronicle/error_logs/group_resolver.rb,
app/controllers/chronicle/error_groups_controller.rb
Defined Under Namespace
Modules: ApiLogs, ApiRoutes, ErrorLogs, Filterable, Pagination, Util Classes: AdminUser, ApiLog, ApiLogsController, ApiRoute, ApiRoutesController, ApplicationController, ApplicationJob, ApplicationMailer, ApplicationRecord, AuthController, AuthenticationError, BadRequestError, BaseError, Configuration, ConfigurationError, Engine, Error, ErrorGroup, ErrorGroupsController, ErrorLog, ErrorLogsController, FlushApiLogsJob, ForbiddenError, NotAcceptableError, NotFoundError, ResourceBusyError, ResourceController, ValidationError
Constant Summary collapse
- VERSION =
'0.1.0'.freeze
Class Method Summary collapse
-
.buffer_api_log(payload) ⇒ Object
Buffers an API log payload to a per-process file.
-
.bulk_log_api(payloads) ⇒ Object
Bulk-inserts API log payloads directly, bypassing the file buffer.
- .config ⇒ Object
- .configuration ⇒ Object
- .configure {|configuration| ... } ⇒ Object
-
.flush_api_logs! ⇒ Object
Drains all per-PID buffer files into the database.
-
.log_error(payload) ⇒ Object
Synchronously creates an ErrorLog.
- .reset_configuration! ⇒ Object
Class Method Details
.buffer_api_log(payload) ⇒ Object
Buffers an API log payload to a per-process file. The buffer is drained periodically by Chronicle::FlushApiLogsJob, and opportunistically when the configured flush size is exceeded.
30 31 32 33 |
# File 'lib/chronicle.rb', line 30 def buffer_api_log(payload) return if configuration.api_logging_disabled? ApiLogs::Buffer.append(payload) end |
.bulk_log_api(payloads) ⇒ Object
Bulk-inserts API log payloads directly, bypassing the file buffer. Intended for tests, backfills, or hosts that implement their own buffering.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/chronicle.rb', line 37 def bulk_log_api(payloads) return if configuration.api_logging_disabled? return if payloads.blank? now = Time.current allowed = ApiLog.column_names - ['id'] rows = payloads.map do |raw| row = raw.respond_to?(:stringify_keys) ? raw.stringify_keys.slice(*allowed) : raw.slice(*allowed) row['created_at'] ||= now row['updated_at'] ||= now row end rows.each_slice(ApiLogs::Flusher::INSERT_BATCH_SIZE) do |batch| ApiLog.insert_all(batch) # rubocop:disable Rails/SkipsModelValidations end ApiLogs::Flusher.sync_routes(rows) end |
.config ⇒ Object
23 24 25 |
# File 'lib/chronicle.rb', line 23 def config configuration end |
.configuration ⇒ Object
11 12 13 |
# File 'lib/chronicle.rb', line 11 def configuration @configuration ||= Configuration.new end |
.configure {|configuration| ... } ⇒ Object
15 16 17 |
# File 'lib/chronicle.rb', line 15 def configure yield configuration end |
.flush_api_logs! ⇒ Object
Drains all per-PID buffer files into the database. Safe to run concurrently — atomic file renames prevent double-processing.
66 67 68 |
# File 'lib/chronicle.rb', line 66 def flush_api_logs! ApiLogs::Flusher.call end |
.log_error(payload) ⇒ Object
Synchronously creates an ErrorLog. The model’s before_validation hook routes it through ErrorLogs::GroupResolver for fingerprint dedup.
59 60 61 62 |
# File 'lib/chronicle.rb', line 59 def log_error(payload) return if configuration.error_logging_disabled? ErrorLog.create!(payload) end |
.reset_configuration! ⇒ Object
19 20 21 |
# File 'lib/chronicle.rb', line 19 def reset_configuration! @configuration = Configuration.new end |