- def add_database_stats(self, cursor):
- cursor.execute(DATABASE)
- for row in cursor:
- database_name = row.get('database_name')
- self.add_derive_value('db_stat_xact_commit', prefix=database_name, value=int(row.get('xact_commit', 0)))
- self.add_derive_value('db_stat_xact_rollback', prefix=database_name, value=int(row.get('xact_rollback', 0)))
- self.add_derive_value('db_stat_blks_read', prefix=database_name, value=int(row.get('blks_read', 0)))
- self.add_derive_value('db_stat_blks_hit', prefix=database_name, value=int(row.get('blks_hit', 0)))
- self.add_derive_value('db_stat_tup_returned', prefix=database_name, value=int(row.get('tup_returned', 0)))
- self.add_derive_value('db_stat_tup_fetched', prefix=database_name, value=int(row.get('tup_fetched', 0)))
- self.add_derive_value('db_stat_tup_inserted', prefix=database_name, value=int(row.get('tup_inserted', 0)))
- self.add_derive_value('db_stat_tup_updated', prefix=database_name, value=int(row.get('tup_updated', 0)))
- self.add_derive_value('db_stat_tup_deleted', prefix=database_name, value=int(row.get('tup_deleted', 0)))
- self.add_derive_value('db_stat_conflicts', prefix=database_name, value=int(row.get('conflicts', 0)))
-
- def add_backend_stats(self, cursor):
- cursor.execute(BACKENDS)
- temp = cursor.fetchone()
-
- self.data['backend_process_active'] = int(temp.get('backends_active', 0))
- self.data['backend_process_idle'] = int(temp.get('backends_idle', 0))
-
- def add_index_stats(self, cursor):
- cursor.execute(INDEX_STATS)
- temp = cursor.fetchone()
- self.data['index_count'] = int(temp.get('indexes', 0))
- self.data['index_size'] = int(temp.get('size_indexes', 0))
-
- def add_table_stats(self, cursor):
- cursor.execute(TABLE_STATS)
- temp = cursor.fetchone()
- self.data['table_count'] = int(temp.get('relations', 0))
- self.data['table_size'] = int(temp.get('size_relations', 0))
-
- def add_lock_stats(self, cursor):
- cursor.execute(DATABASE_LOCKS)
- # First zero out all current lock values.
- for database_name in self.databases:
- for lock_type in LOCK_TYPES:
- lock_id = "{}_{}".format(database_name, lock_type.lower())
- self.data[lock_id] = 0
-
- # Now populate those that have current locks
- for row in cursor:
- database_name, lock_type, lock_count = row
- lock_id = "{}_{}".format(database_name, lock_type.lower())
- self.data[lock_id] = lock_count
-
- def add_wal_stats(self, cursor):
- cursor.execute(ARCHIVE)
- temp = cursor.fetchone()
- self.add_derive_value('wal_total', int(temp.get('file_count', 0)))
- self.add_derive_value('wal_ready', int(temp.get('ready_count', 0)))
- self.add_derive_value('wal_done', int(temp.get('done_count', 0)))
-
- def add_statio_stats(self, cursor):
- cursor.execute(STATIO)
- temp = cursor.fetchone()
- self.add_derive_value('operations_heap_blocks_read', int(temp.get('heap_blocks_read', 0)))
- self.add_derive_value('operations_heap_blocks_hit', int(temp.get('heap_blocks_hit', 0)))
- self.add_derive_value('operations_index_blocks_read', int(temp.get('index_blocks_read', 0)))
- self.add_derive_value('operations_index_blocks_hit', int(temp.get('index_blocks_hit', 0)))
- self.add_derive_value('operations_toast_blocks_read', int(temp.get('toast_blocks_read', 0)))
- self.add_derive_value('operations_toast_blocks_hit', int(temp.get('toast_blocks_hit', 0)))
- self.add_derive_value('operations_toastindex_blocks_read', int(temp.get('toastindex_blocks_read', 0)))
- self.add_derive_value('operations_toastindex_blocks_hit', int(temp.get('toastindex_blocks_hit', 0)))
-
- def add_bgwriter_stats(self, cursor):
- cursor.execute(BGWRITER)
- temp = cursor.fetchone()
-
- self.add_derive_value('background_writer_scheduled', temp.get('checkpoints_timed', 0))
- self.add_derive_value('background_writer_requested', temp.get('checkpoints_requests', 0))
-
- def add_derive_value(self, key, value, prefix=None):
- if prefix:
- key = "{}_{}".format(prefix, key)
- if key not in self.old_data.keys():
- self.data[key] = 0