Skip to content

Instantly share code, notes, and snippets.

@Someguy123
Last active November 15, 2020 14:58
Show Gist options
  • Save Someguy123/1adf8b8660087d3b6a9dd834a7dc6ebb to your computer and use it in GitHub Desktop.
Save Someguy123/1adf8b8660087d3b6a9dd834a7dc6ebb to your computer and use it in GitHub Desktop.

Revisions

  1. Someguy123 revised this gist Aug 18, 2020. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion loader.py
    Original file line number Diff line number Diff line change
    @@ -86,12 +86,13 @@ def copyright():


    rpc_node = sys.argv[1]
    rpc_node = rpc_node.split(',') if ',' in rpc_node else [rpc_node]

    if len(sys.argv) > 2:
    batch_size = int(sys.argv[2])

    #sa = SteemAsync(['http://hived.deathwing.me:32779'])
    sa = SteemAsync([rpc_node])
    sa = SteemAsync(rpc_node)
    #sa = SteemAsync(['http://direct.hived.privex.io:8291'])
    #sa.config_set('batch_size', 50)
    sa.config_set('batch_size', batch_size)
  2. Someguy123 revised this gist Aug 18, 2020. 1 changed file with 6 additions and 3 deletions.
    9 changes: 6 additions & 3 deletions loader.py
    Original file line number Diff line number Diff line change
    @@ -11,17 +11,20 @@
    # ------------------------------------------------------
    Usage:
    # download file to loader.py
    # install python3.8
    apt update
    apt install -y python3 python3-pip python3.8
    # install steem-async and privex-helpers libraries
    python3.8 -m pip install -U steem-async privex-helpers
    # download file to loader.py
    wget -O loader.py https://gist.github.com/Someguy123/1adf8b8660087d3b6a9dd834a7dc6ebb/raw/loader.py
    # make it executable
    chmod +x loader.py
    # show help
    ./loader.py
    # run the script
  3. Someguy123 created this gist Aug 18, 2020.
    133 changes: 133 additions & 0 deletions loader.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,133 @@
    #!/usr/bin/env python3.8
    """
    # ------------------------------------------------------
    #
    # Hive/Steem RPC get_block benchmarker
    # Written by Someguy123 (github.com/Someguy123)
    #
    # (C) 2020 Someguy123 / Privex || License: X11 / MIT
    # Buy a server from Privex! https://www.privex.io
    #
    # ------------------------------------------------------
    Usage:
    # download file to loader.py
    # install python3.8
    apt update
    apt install -y python3 python3-pip python3.8
    # install steem-async and privex-helpers libraries
    python3.8 -m pip install -U steem-async privex-helpers
    chmod +x loader.py
    # show help
    ./loader.py
    # run the script
    ./loader.py https://anyx.io
    ./loader.py http://direct.hived.privex.io:8291 500
    ./loader.py https://hived.deathwing.me 50
    """
    import asyncio
    import time
    import sys
    import logging
    try:
    from privex.steem import SteemAsync
    from privex.helpers import env_csv, env_bool
    from privex.loghelper import LogHelper
    except Exception as e:
    print("Failed to import one or more modules... Error is:", type(e), str(e))
    print()
    print("Please make sure steem-async and privex-helpers are installed into your python3.8:\n")
    print(" python3.8 -m pip install -U steem-async privex-helpers\n")
    sys.exit(1)

    batch_size = 40

    block_ranges = env_csv('BLOCK_RANGES', ['1-2000', '2001-5000', '5001-10000', '10001-20000', '20001-50000'])
    quiet = env_bool('QUIET', True)

    if quiet:
    _lh = LogHelper('privex.steem', handler_level=logging.ERROR)
    _lh.add_console_handler()

    def copyright():
    print("\n ------------------------------------------------------ \n")
    print(" Hive/Steem RPC get_block benchmarker ")
    print(" Written by Someguy123 (github.com/Someguy123) ")
    print()
    print(" (C) 2020 Someguy123 / Privex || License: X11 / MIT")
    print(" Buy a server from Privex! https://www.privex.io")
    print("\n ------------------------------------------------------ \n")


    if len(sys.argv) < 2:
    print(f"Usage: {sys.argv[0]} [rpc_node_url] (batch_size={batch_size})")
    print()
    print("Examples:\n")
    print(f" {sys.argv[0]} https://hived.deathwing.me")
    print(f" BLOCK_RANGES='1-500,1000-2000,3000-6000,6000-10000,10000-50000' {sys.argv[0]} https://hived.deathwing.me")
    print(f" {sys.argv[0]} http://direct.hived.privex.io 400")
    print(f" {sys.argv[0]} http://direct.hived.privex.io:8291 1000")
    print()
    print("Env vars:\n")
    print(f" BLOCK_RANGES - default: {','.join(block_ranges)}")
    print(f" Load these ranges of blocks from rpc_node_url\n")
    copyright()
    sys.exit(1)


    rpc_node = sys.argv[1]

    if len(sys.argv) > 2:
    batch_size = int(sys.argv[2])

    #sa = SteemAsync(['http://hived.deathwing.me:32779'])
    sa = SteemAsync([rpc_node])
    #sa = SteemAsync(['http://direct.hived.privex.io:8291'])
    #sa.config_set('batch_size', 50)
    sa.config_set('batch_size', batch_size)

    total_blocks = 0

    async def bench_blocks(start: int, end: int):
    global total_blocks
    total_blocks += end - start
    st = time.time()
    print(f"\nGetting blocks {start} to {end}")
    bk = await sa.get_blocks(start, end)
    print("result length:", len(bk))
    print("item 0 content:", bk[0])
    print("Time taken:", time.time() - st, "seconds")

    async def main():
    global total_blocks
    print("RPC Node:", rpc_node)
    print("Batch size:", batch_size)
    print("Block ranges:", block_ranges)
    print()
    init_st = time.time()
    for bran in block_ranges:
    sblock, eblock = bran.split('-')
    await bench_blocks(int(sblock), int(eblock))
    #await bench_blocks(1, 2000)
    #await bench_blocks(2001, 5000)
    #await bench_blocks(5000, 10000)
    #await bench_blocks(10000, 20000)
    #await bench_blocks(20000, 50000)
    print()
    totalt = time.time() - init_st
    print("Total blocks:", total_blocks)
    print("Total time to get blocks:", totalt, "seconds")
    print("Blocks per second:", total_blocks / totalt)
    print()

    if __name__ == '__main__':
    copyright()
    time.sleep(1)
    asyncio.run(main())