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

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

.configObject



23
24
25
# File 'lib/chronicle.rb', line 23

def config
  configuration
end

.configurationObject



11
12
13
# File 'lib/chronicle.rb', line 11

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Yields:



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