Add `arrived` attribute (file creation timestamp) to books table.
[quanlib.git] / tconn.rb
1 # tconn.rb
2 #
3 # Timed Connection:  
4 # Wrapper around a PG Connection that provides a report on where time was spent executing SQL
5 #
6
7 require 'pg'
8
9 class TimedConn 
10   def initialize(wrapped_conn)
11     @conn = wrapped_conn
12     @stmts = {}
13     @total_time = 0
14   end
15
16   def close
17     @conn.close()
18     puts "Connection closing.  Total SQL time:  " + @total_time.to_s + " secs"
19     @stmts.each do |sql, info| 
20       elapsed = info[2]
21       calls = info[1]
22       puts elapsed.to_s + " secs: " + calls.to_s + " times:  " + sql
23     end
24   end
25
26   def exec(*args, &block)
27     before = Time.now
28     #puts args.inspect
29     result = @conn.exec(*args)
30     #puts result.inspect
31     after = Time.now
32     elapsed = (after - before)
33     remember(args[0], elapsed)
34     @total_time += elapsed
35     if block_given?
36       yield(result)
37     else
38       return result
39     end
40   end
41
42   def exec_params(*args, &block)
43     before = Time.now
44     #puts args.inspect
45     result = @conn.exec_params(*args)
46     #puts result.inspect
47     after = Time.now
48     elapsed = (after - before)
49     remember(args[0], elapsed)
50     @total_time += elapsed
51     if block_given?
52       yield(result)
53     else
54       return result
55     end
56   end
57
58   def remember(sql, elapsed)
59     if @stmts.has_key?(sql)
60       stmt = @stmts[sql]
61     else
62       stmt = [sql, 0, 0]
63     end
64
65     stmt[1] += 1  # Number of times this statement has been invoked
66     stmt[2] += elapsed   # total elapsed time spent on this statement
67     
68     @stmts[sql] = stmt
69   end
70 end
71