Advertisement
Guest User

Untitled

a guest
Dec 16th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. require "pg"
  2.  
  3. # start a posgress
  4. # $ docker run --name mypg -e POSTGRES_DB=crystal -e POSTGRES_USER=postgress -e POSTGRES_PASSWORD= -p 5432:5432 postgres:9.5
  5. # <ctrl+c> to stop server
  6.  
  7. # restart it
  8. # $ docker start -a mypg
  9. # <ctrl+c> to stop server
  10.  
  11. database_url = "postgres://postgress@localhost/crystal?retry_attempts=8&max_idle_pool_size=4&retry_delay=3"
  12.  
  13. quick_sql = "SELECT pg_backend_pid()"
  14. slow_sql = "SELECT pg_backend_pid(), pg_sleep(3)"
  15. abort_connections = "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid()"
  16.  
  17. macro every(delay)
  18. spawn do
  19. loop do
  20. begin
  21. sleep {{delay}}
  22. {{yield}}
  23. rescue e : DB::PoolRetryAttemptsExceeded
  24. puts e
  25. exit
  26. end
  27. end
  28. end
  29. end
  30.  
  31. DB.open database_url do |db|
  32. db.setup_connection do |cnn|
  33. puts "connection created #{cnn.object_id}"
  34. end
  35.  
  36. every 1.0 do
  37. puts "quick by #{db.scalar(quick_sql)}"
  38. end
  39.  
  40. every 0.3 do
  41. puts "slow by #{db.scalar(slow_sql)}"
  42. end
  43.  
  44. every 10.0 do
  45. puts "killing connections #{db.scalar abort_connections}"
  46. end
  47.  
  48. sleep
  49. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement