diff -r 24e94a3da209 -r d8ff52a0390f pgtoolkit/tools/listserial.py --- a/pgtoolkit/tools/listserial.py Mon May 26 18:18:21 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,69 +0,0 @@ -from pgtoolkit.toolbase import SimpleTool -from pgtoolkit import pgbrowser -from pycolib.ansicolor import highlight, WHITE, YELLOW, RED, BOLD - - -class ListSerialTool(SimpleTool): - - """List sequences near to overflow. - - Checks all sequences attached to a column of type integer. - - Highlight dangerous values of sequence: - * Yellow - near overflow (90%) - * Red - already over... - - Does not list sequences with value under 50% of range. - - """ - - max_int = 2147483647 - - def __init__(self): - SimpleTool.__init__(self, name='listserial') - - def main(self): - conn = self.pgm.get_conn('target') - browser = pgbrowser.PgBrowser(conn) - rows = browser.list_sequences() - sequences = [] - for row in rows: - if row['related_column_type'] == 'integer': - # read sequence attributes like last_value - q = 'SELECT * FROM "%s"."%s"' % (row['sequence_schema'], row['sequence_name']) - curs = conn.cursor() - curs.execute(q) - attrs = curs.fetchone_dict() - # skip this sequence if its cycled and has safe max_value - if attrs['is_cycled'] and attrs['max_value'] <= self.max_int: - continue - # skip sequences with last_value not yet in half of max_int - if attrs['last_value'] < self.max_int / 2: - continue - # remember rest of sequences - row['attrs'] = attrs - sequences.append(row) - # sort most dangerous on top - sequences.sort(key=lambda x: x['attrs']['last_value'], reverse=True) - # print out what we've found - for seq in sequences: - print('Sequence:', seq['sequence_schema'] + '.' + seq['sequence_name']) - print(' Related:', seq['sequence_schema'] + '.' + seq['related_table'], seq['related_column'], '(' + seq['related_column_type'] + ')') - print(' integer max', '2147483647') - # colorize last value - last_val = seq['attrs']['last_value'] - col = WHITE + BOLD - if last_val > self.max_int * 0.9: - # near max - col = YELLOW + BOLD - if last_val > self.max_int: - # over max - col = RED + BOLD - print(' last_value', highlight(1, col) + str(last_val) + highlight(0)) - for key in ('min_value', 'max_value', 'is_cycled'): - print(' ', key, seq['attrs'][key]) - print() - - -cls = ListSerialTool -