Пример #1
0
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))
Пример #2
0
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))