def status(): store = Store() client = ApiClient() start = store.start_point() end = store.end_point() srs = store.get_srs() witnesses = get_witnesses(client) print '' templ = '%-11s' print fire.core.formatting.Bold(templ % 'Start Block') + ': ' + str(start) print fire.core.formatting.Bold(templ % ' End Block') + ': ' + str(end) print '' templ = '%-45s %-40s %-30s %-10s' print fire.core.formatting.Bold( templ % ('SR Address', 'SR NAME', 'OutOfTime Txs', 'Total Blocks')) for sr in srs: oft_cnt = store.get_sr_oft_cnts(sr) if witnesses.has_key(sr): sr_name = witnesses[sr]['url'] else: sr_name = '-' block_cnt = store.get_sr_blocks_cnts(sr) print(templ % (sr, sr_name, oft_cnt, block_cnt))
def query(recent_days=0, min_block=0, max_block=0): store = Store() srs = store.get_srs() srs_cnts_map = {} def add_srs_cnts(sr, counter): if not srs_cnts_map.has_key(sr): srs_cnts_map[sr] = 0 srs_cnts_map[sr] += counter def traversing_blocks(start, end): for block_number in range(start, end + 1): for sr in srs: cnts = store.get_sr_block_oft_cnts(sr, block_number) add_srs_cnts(sr, cnts) db_start = store.start_point() db_end = store.end_point() db_min_timestamp = 0 db_max_timestamp = 0 if db_start != -1: db_min_timestamp = store.get_block_time(db_start) if db_end != -1: db_max_timestamp = store.get_block_time(db_end) client = ApiClient() witnesses = get_witnesses(client) process_start = db_start process_end = db_end if recent_days == 0 and min_block == 0 and max_block == 0: pass elif recent_days != 0: sec = recent_days * 24 * 60 * 60 blocks = int(sec / 3) start = db_end - blocks if start < db_start: print fire.core.formatting.Error( 'specified blocks span is too large and needs ' 'to be parsed from block %d and currently %d' % (start, db_start)) return process_start = start process_end = db_end elif recent_days == 0 and min_block != 0 or max_block != 0: if min_block >= max_block: print fire.core.formatting.Error( 'min_block must be less than max_block') return if min_block < db_start or max_block > db_end: print fire.core.formatting.Error( 'The specified time range is incorrect and ' 'must be between %d and %d' % (db_start, db_end)) return process_start = min_block process_end = max_block else: print fire.core.formatting.Error( 'min_block and max_block specify errors') return traversing_blocks(process_start, process_end) start_timestamp = store.get_block_time(process_start) end_timestamp = store.get_block_time(process_end) templ = '%-45s %-40s %-15s %-15s' util.status_msg_div() util.status_msg( ' Time Range:', '%s ~ %s' % (util.timestamp_to_strftime(start_timestamp), util.timestamp_to_strftime(end_timestamp))) util.status_msg('TimeStamp Range:', '%d ~ %d' % (start_timestamp, end_timestamp)) util.status_msg(' Block Range:', '%d ~ %d' % (process_start, process_end)) util.status_msg_div() print fire.core.formatting.Bold( templ % ('SR Address', 'SR NAME', 'OutOfTime Txs', 'Total Blocks')) for sr in srs: if witnesses.has_key(sr): sr_name = witnesses[sr]['url'] else: sr_name = '-' if srs_cnts_map.has_key(sr): oft_cnt = srs_cnts_map[sr] block_cnt = store.get_sr_blocks_cnts(sr) print(templ % (sr, sr_name, oft_cnt, block_cnt))