move session creation up the stack
This commit is contained in:
parent
c34485c493
commit
c912e8aa74
17
cli.py
17
cli.py
@ -5,6 +5,7 @@ import sys
|
|||||||
import click
|
import click
|
||||||
|
|
||||||
from mev_inspect.concurrency import coro
|
from mev_inspect.concurrency import coro
|
||||||
|
from mev_inspect.db import get_sessions
|
||||||
from mev_inspect.inspector import MEVInspector
|
from mev_inspect.inspector import MEVInspector
|
||||||
|
|
||||||
RPC_URL_ENV = "RPC_URL"
|
RPC_URL_ENV = "RPC_URL"
|
||||||
@ -23,7 +24,10 @@ def cli():
|
|||||||
@coro
|
@coro
|
||||||
async def inspect_block_command(block_number: int, rpc: str):
|
async def inspect_block_command(block_number: int, rpc: str):
|
||||||
inspector = MEVInspector(rpc)
|
inspector = MEVInspector(rpc)
|
||||||
await inspector.inspect_single_block(block=block_number)
|
inspect_session, trace_session = get_sessions()
|
||||||
|
await inspector.inspect_single_block(
|
||||||
|
block=block_number, inspect_session=inspect_session, trace_session=trace_session
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@ -32,7 +36,10 @@ async def inspect_block_command(block_number: int, rpc: str):
|
|||||||
@coro
|
@coro
|
||||||
async def fetch_block_command(block_number: int, rpc: str):
|
async def fetch_block_command(block_number: int, rpc: str):
|
||||||
inspector = MEVInspector(rpc)
|
inspector = MEVInspector(rpc)
|
||||||
block = await inspector.create_from_block(block_number=block_number)
|
_, trace_session = get_sessions()
|
||||||
|
block = await inspector.create_from_block(
|
||||||
|
block_number=block_number, trace_session=trace_session
|
||||||
|
)
|
||||||
print(block.json())
|
print(block.json())
|
||||||
|
|
||||||
|
|
||||||
@ -62,8 +69,12 @@ async def inspect_many_blocks_command(
|
|||||||
max_concurrency=max_concurrency,
|
max_concurrency=max_concurrency,
|
||||||
request_timeout=request_timeout,
|
request_timeout=request_timeout,
|
||||||
)
|
)
|
||||||
|
inspect_session, trace_session = get_sessions()
|
||||||
await inspector.inspect_many_blocks(
|
await inspector.inspect_many_blocks(
|
||||||
after_block=after_block, before_block=before_block
|
after_block=after_block,
|
||||||
|
before_block=before_block,
|
||||||
|
inspect_session=inspect_session,
|
||||||
|
trace_session=trace_session,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,13 +2,14 @@ import asyncio
|
|||||||
import logging
|
import logging
|
||||||
import traceback
|
import traceback
|
||||||
from asyncio import CancelledError
|
from asyncio import CancelledError
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from sqlalchemy.ext.asyncio import async_scoped_session
|
||||||
from web3 import Web3
|
from web3 import Web3
|
||||||
from web3.eth import AsyncEth
|
from web3.eth import AsyncEth
|
||||||
|
|
||||||
from mev_inspect.block import create_from_block_number
|
from mev_inspect.block import create_from_block_number
|
||||||
from mev_inspect.classifiers.trace import TraceClassifier
|
from mev_inspect.classifiers.trace import TraceClassifier
|
||||||
from mev_inspect.db import get_sessions
|
|
||||||
from mev_inspect.inspect_block import inspect_block
|
from mev_inspect.inspect_block import inspect_block
|
||||||
from mev_inspect.provider import get_base_provider
|
from mev_inspect.provider import get_base_provider
|
||||||
|
|
||||||
@ -27,8 +28,9 @@ class MEVInspector:
|
|||||||
self.trace_classifier = TraceClassifier()
|
self.trace_classifier = TraceClassifier()
|
||||||
self.max_concurrency = asyncio.Semaphore(max_concurrency)
|
self.max_concurrency = asyncio.Semaphore(max_concurrency)
|
||||||
|
|
||||||
async def create_from_block(self, block_number: int):
|
async def create_from_block(
|
||||||
_, trace_session = get_sessions()
|
self, block_number: int, trace_session: Optional[async_scoped_session]
|
||||||
|
):
|
||||||
return await create_from_block_number(
|
return await create_from_block_number(
|
||||||
base_provider=self.base_provider,
|
base_provider=self.base_provider,
|
||||||
w3=self.w3,
|
w3=self.w3,
|
||||||
@ -36,8 +38,12 @@ class MEVInspector:
|
|||||||
trace_session=trace_session,
|
trace_session=trace_session,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def inspect_single_block(self, block: int):
|
async def inspect_single_block(
|
||||||
inspect_session, trace_session = get_sessions()
|
self,
|
||||||
|
block: int,
|
||||||
|
inspect_session: async_scoped_session,
|
||||||
|
trace_session: Optional[async_scoped_session],
|
||||||
|
):
|
||||||
return await inspect_block(
|
return await inspect_block(
|
||||||
inspect_session,
|
inspect_session,
|
||||||
trace_session,
|
trace_session,
|
||||||
@ -47,12 +53,22 @@ class MEVInspector:
|
|||||||
block,
|
block,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def inspect_many_blocks(self, after_block: int, before_block: int):
|
async def inspect_many_blocks(
|
||||||
|
self,
|
||||||
|
after_block: int,
|
||||||
|
before_block: int,
|
||||||
|
inspect_session: async_scoped_session,
|
||||||
|
trace_session: Optional[async_scoped_session],
|
||||||
|
):
|
||||||
tasks = []
|
tasks = []
|
||||||
for block_number in range(after_block, before_block):
|
for block_number in range(after_block, before_block):
|
||||||
tasks.append(
|
tasks.append(
|
||||||
asyncio.ensure_future(
|
asyncio.ensure_future(
|
||||||
self.safe_inspect_block(block_number=block_number)
|
self.safe_inspect_block(
|
||||||
|
block_number=block_number,
|
||||||
|
inspect_session=inspect_session,
|
||||||
|
trace_session=trace_session,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
logger.info(f"Gathered {len(tasks)} blocks to inspect")
|
logger.info(f"Gathered {len(tasks)} blocks to inspect")
|
||||||
@ -64,8 +80,13 @@ class MEVInspector:
|
|||||||
logger.error(f"Exited due to {type(e)}")
|
logger.error(f"Exited due to {type(e)}")
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
async def safe_inspect_block(self, block_number: int):
|
async def safe_inspect_block(
|
||||||
inspect_session, trace_session = get_sessions()
|
self,
|
||||||
|
block_number: int,
|
||||||
|
inspect_session: async_scoped_session,
|
||||||
|
trace_session: Optional[async_scoped_session],
|
||||||
|
):
|
||||||
|
|
||||||
async with self.max_concurrency:
|
async with self.max_concurrency:
|
||||||
return await inspect_block(
|
return await inspect_block(
|
||||||
inspect_session,
|
inspect_session,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user