require_relative '../lib/familia'
require 'logger'
Familia.enable_database_logging = true
DatabaseLogger.logger = Familia::FamiliaLogger.new($stdout)
DatabaseLogger.logger.level = Familia::FamiliaLogger::TRACE
puts "\n=== Scenario 1: No Sampling (logs all 100 commands) ==="
DatabaseLogger.sample_rate = nil
100.times { |i| Familia.dbclient.set("key_#{i}", "value_#{i}") }
puts "Commands captured: #{DatabaseLogger.commands.size}"
puts "(Check output above - should see ~100 log lines)"
puts "\n=== Scenario 2: 10% Sampling (logs ~10 of 100 commands) ==="
DatabaseLogger.clear_commands
DatabaseLogger.sample_rate = 0.1
100.times { |i| Familia.dbclient.set("sampled_10_#{i}", "value_#{i}") }
puts "Commands captured: #{DatabaseLogger.commands.size}"
puts "(Check output above - should see ~10 log lines)"
puts "\n=== Scenario 3: 1% Sampling (logs ~1 of 100 commands) ==="
DatabaseLogger.clear_commands
DatabaseLogger.sample_rate = 0.01
100.times { |i| Familia.dbclient.set("sampled_1_#{i}", "value_#{i}") }
puts "Commands captured: #{DatabaseLogger.commands.size}"
puts "(Check output above - should see ~1 log line)"
puts "\n=== Scenario 4: 10% Sampling + Structured Logging ==="
DatabaseLogger.clear_commands
DatabaseLogger.sample_rate = 0.1
DatabaseLogger.structured_logging = true
100.times { |i| Familia.dbclient.set("structured_#{i}", "value_#{i}") }
puts "Commands captured: #{DatabaseLogger.commands.size}"
puts "(Check structured output above)"
puts "\n=== Key Insights ==="
puts "✓ Command capture is unaffected (always 100 commands captured)"
puts "✓ Only logger output is sampled (reduces log volume)"
puts "✓ Tests can verify commands while production logs stay clean"
puts "✓ Deterministic sampling (every Nth command) ensures consistency"