Add super_admin debug event log (#1816)

* Add super-admin debug event log

* Address debug log review feedback

* Whitelist debug filter params

* Make debug log retention configurable
This commit is contained in:
Sure Admin (bot)
2026-05-17 16:55:01 +02:00
committed by GitHub
parent 2df10ca4ef
commit 70fc52769d
18 changed files with 632 additions and 12 deletions

View File

@@ -81,6 +81,32 @@ class Security::Price::ImporterTest < ActiveSupport::TestCase
).import_provider_prices
end
test "logs provider fetch failures to debug log" do
Security::Price.delete_all
error = Provider::Error.new("Rate limit exceeded")
@provider.stubs(:fetch_security_prices).returns(provider_error_response(error))
assert_difference "DebugLogEntry.count", 1 do
Security::Price::Importer.new(
security: @security,
security_provider: @provider,
start_date: 2.days.ago.to_date,
end_date: Date.current
).import_provider_prices
end
entry = DebugLogEntry.order(:created_at).last
assert_equal "security_price_fetch", entry.category
assert_equal "warn", entry.level
assert_equal "Could not fetch prices for ticker", entry.message
assert_equal "security/price/importer", entry.source.underscore
assert_equal @security.id, entry.metadata["security_id"]
assert_equal @security.ticker, entry.metadata["ticker"]
assert_equal "Rate limit exceeded", entry.metadata["provider_error"]
end
test "writes post-listing prices when holding predates provider history" do
# Regression: a 2018-06-15 trade for a pair the provider only has from
# 2020-01-03 onwards (e.g. BTCEUR on Binance) used to hit the

View File

@@ -153,6 +153,30 @@ class Security::ProvidedTest < ActiveSupport::TestCase
assert_equal fallback_provider, @security.price_data_provider
end
test "import_provider_details logs provider metadata failures to debug log" do
provider = mock("provider")
provider.stubs(:class).returns(Provider::TwelveData)
provider.stubs(:fetch_security_info).returns(
provider_error_response(Provider::Error.new("metadata unavailable"))
)
@security.stubs(:price_data_provider).returns(provider)
assert_difference "DebugLogEntry.count", 1 do
@security.import_provider_details
end
entry = DebugLogEntry.order(:created_at).last
assert_equal "security_metadata_fetch", entry.category
assert_equal "warn", entry.level
assert_equal "Failed to get security info", entry.message
assert_equal "security", entry.source.underscore
assert_equal @security.id, entry.metadata["security_id"]
assert_equal @security.ticker, entry.metadata["ticker"]
assert_equal "metadata unavailable", entry.metadata["provider_error"]
assert_equal "twelve_data", entry.provider_key
end
# --- provider_status ---
test "provider_status returns provider_unavailable when assigned provider disabled" do