kopia lustrzana https://github.com/bugout-dev/moonstream
Add initial version.
rodzic
8efa9858ac
commit
d31ef8b909
|
@ -15,7 +15,7 @@ from moonstreamdb.db import (
|
|||
)
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
from .db import view_call_to_label, commit_session
|
||||
from .db import view_call_to_label, commit_session, clean_labels
|
||||
from .Multicall2_interface import Contract as Multicall2
|
||||
from ..settings import (
|
||||
NB_CONTROLLER_ACCESS_ID,
|
||||
|
@ -395,6 +395,35 @@ def parse_abi(args: argparse.Namespace) -> None:
|
|||
json.dump(output_json, f)
|
||||
|
||||
|
||||
def clean_labels_handler(args: argparse.Namespace) -> None:
|
||||
|
||||
blockchain_type = AvailableBlockchainType(args.blockchain)
|
||||
|
||||
web3_client = _retry_connect_web3(
|
||||
blockchain_type=blockchain_type, access_id=args.access_id
|
||||
)
|
||||
|
||||
logger.info(f"Label cleaner connected to blockchain: {blockchain_type}")
|
||||
|
||||
block_number = web3_client.eth.get_block("latest").number # type: ignore
|
||||
|
||||
engine = create_moonstream_engine(
|
||||
MOONSTREAM_DB_URI,
|
||||
pool_pre_ping=True,
|
||||
pool_size=MOONSTREAM_POOL_SIZE,
|
||||
statement_timeout=MOONSTREAM_STATE_CRAWLER_DB_STATEMENT_TIMEOUT_MILLIS,
|
||||
)
|
||||
process_session = sessionmaker(bind=engine)
|
||||
db_session = process_session()
|
||||
|
||||
try:
|
||||
clean_labels(
|
||||
db_session, blockchain_type, args.block_number_cutoff, block_number
|
||||
)
|
||||
finally:
|
||||
db_session.close()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.set_defaults(func=lambda _: parser.print_help())
|
||||
|
@ -431,6 +460,25 @@ def main() -> None:
|
|||
)
|
||||
view_state_crawler_parser.set_defaults(func=handle_crawl)
|
||||
|
||||
view_state_cleaner = subparsers.add_parser(
|
||||
"clean-state-labels",
|
||||
help="Clean labels from database",
|
||||
)
|
||||
view_state_cleaner.add_argument(
|
||||
"--blockchain",
|
||||
"-b",
|
||||
type=str,
|
||||
help="Type of blovkchain wich writng in database",
|
||||
required=True,
|
||||
)
|
||||
view_state_cleaner.add_argument(
|
||||
"--blocks-cutoff",
|
||||
"-N",
|
||||
type=str,
|
||||
help="Amount blocks back after wich data will be remove.",
|
||||
)
|
||||
view_state_cleaner.set_defaults(func=clean_labels_handler)
|
||||
|
||||
generate_view_parser = subparsers.add_parser(
|
||||
"parse-abi",
|
||||
help="Parse view methods from the abi file.",
|
||||
|
|
|
@ -59,3 +59,34 @@ def commit_session(db_session: Session) -> None:
|
|||
logger.error(f"Failed to save labels: {e}")
|
||||
db_session.rollback()
|
||||
raise e
|
||||
|
||||
|
||||
def clean_labels(
|
||||
db_session: Session,
|
||||
blockchain_type: AvailableBlockchainType,
|
||||
block_number_cutoff: int,
|
||||
block_number: int,
|
||||
) -> None:
|
||||
"""
|
||||
Remove all labels with the given name from the database.
|
||||
"""
|
||||
|
||||
label_model = get_label_model(blockchain_type)
|
||||
|
||||
table = label_model.__tablename__
|
||||
|
||||
try:
|
||||
logger.info("Removing labels from database")
|
||||
db_session.execute(
|
||||
"""DELETE FROM {} WHERE label =:label and block_number < :block_number""".format(
|
||||
table
|
||||
),
|
||||
{
|
||||
"label": VIEW_STATE_CRAWLER_LABEL,
|
||||
"block_number": block_number - block_number_cutoff,
|
||||
},
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to remove labels: {e}")
|
||||
db_session.rollback()
|
||||
raise e
|
||||
|
|
Ładowanie…
Reference in New Issue