Class: Kanshi

Inherits:
Object
  • Object
show all
Defined in:
lib/kanshi.rb

Defined Under Namespace

Classes: Collector, ScrollsReporter

Constant Summary collapse

Queries =
"SELECT\n  pg_database_size(d.datname) AS size,\n  numbackends,\n  xact_commit,\n  xact_rollback,\n  blks_read,\n  blks_hit,\n  blks_read + blks_hit AS blks_total,\n  tup_fetched,\n  tup_returned,\n  tup_inserted,\n  tup_updated,\n  tup_deleted\nFROM\n  pg_stat_database d\nWHERE\n  d.datname = ?;\n\nSELECT\n  SUM(seq_scan)::bigint AS seq_scan,\n  SUM(seq_tup_read)::bigint AS seq_tup_read,\n  SUM(idx_scan)::bigint AS idx_scan,\n  SUM(idx_tup_fetch)::bigint AS idx_tup_fetch\nFROM\n  pg_stat_user_tables;\n\nSELECT\n  SUM(heap_blks_read)::bigint AS heap_blks_read,\n  SUM(heap_blks_hit)::bigint AS heap_blks_hit,\n  SUM(idx_blks_read)::bigint AS idx_blks_read,\n  SUM(idx_blks_hit)::bigint AS idx_blks_hit\nFROM\n  pg_statio_user_tables;\n\nSELECT\n  COUNT(*) AS locks_waiting\nFROM\n  pg_locks\nWHERE\n  granted = 'f';\n\nSELECT\n  EXTRACT('epoch' from SUM(NOW() - xact_start)) AS total_open_xact_time\nFROM\n  pg_stat_activity\nWHERE\n  xact_start IS NOT NULL;\n\nSELECT\n  COUNT(*) AS xact_waiting\nFROM\n  pg_stat_activity\nWHERE\n  waiting = 't';\n\nSELECT\n  COUNT(*) AS xact_idle\nFROM\n  pg_stat_activity\nWHERE\n  current_query = '<IDLE> in transaction';\n".split(/\s*;\s*/)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Kanshi

Returns a new instance of Kanshi.



12
13
14
15
16
17
18
19
20
# File 'lib/kanshi.rb', line 12

def initialize(options = {})
  @options = {
    :databases => {},
    :delay => 60,
    :reporter => ScrollsReporter
  }
  @options.merge!(options)
  @reporter = @options[:reporter].new
end

Class Method Details

.run(*args) ⇒ Object



8
9
10
# File 'lib/kanshi.rb', line 8

def self.run(*args)
  self.new(*args).run
end

Instance Method Details

#reportObject



29
30
31
32
33
34
35
36
# File 'lib/kanshi.rb', line 29

def report
  @options[:databases].each do |name, database_url|
    @reporter.report(
      name,
      database_url,
      Collector.collect(database_url))
  end
end

#runObject



22
23
24
25
26
27
# File 'lib/kanshi.rb', line 22

def run
  loop do
    report
    sleep(@options[:delay])
  end
end