Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require "pg"
- # start a posgress
- # $ docker run --name mypg -e POSTGRES_DB=crystal -e POSTGRES_USER=postgress -e POSTGRES_PASSWORD= -p 5432:5432 postgres:9.5
- # <ctrl+c> to stop server
- # restart it
- # $ docker start -a mypg
- # <ctrl+c> to stop server
- database_url = "postgres://postgress@localhost/crystal?retry_attempts=8&max_idle_pool_size=4&retry_delay=3"
- quick_sql = "SELECT pg_backend_pid()"
- slow_sql = "SELECT pg_backend_pid(), pg_sleep(3)"
- abort_connections = "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid()"
- macro every(delay)
- spawn do
- loop do
- begin
- sleep {{delay}}
- {{yield}}
- rescue e : DB::PoolRetryAttemptsExceeded
- puts e
- exit
- end
- end
- end
- end
- DB.open database_url do |db|
- db.setup_connection do |cnn|
- puts "connection created #{cnn.object_id}"
- end
- every 1.0 do
- puts "quick by #{db.scalar(quick_sql)}"
- end
- every 0.3 do
- puts "slow by #{db.scalar(slow_sql)}"
- end
- every 10.0 do
- puts "killing connections #{db.scalar abort_connections}"
- end
- sleep
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement