Add initial version.

pull/669/head
Andrey 2022-09-13 19:03:48 +03:00
rodzic 8efa9858ac
commit d31ef8b909
2 zmienionych plików z 80 dodań i 1 usunięć

Wyświetl plik

@ -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.",

Wyświetl plik

@ -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