#!/usr/bin/env python3 import argparse import logging import os import os.path import sys import threading from solana.publickey import PublicKey sys.path.insert(0, os.path.abspath( os.path.join(os.path.dirname(__file__), ".."))) import mango # nopep8 parser = argparse.ArgumentParser(description="Show program logs for an account, as they arrive.") mango.ContextBuilder.add_command_line_parameters(parser) mango.Wallet.add_command_line_parameters(parser) parser.add_argument("--address", type=PublicKey, required=True, help="Address of the Solana account to watch") args: argparse.Namespace = mango.parse_args(parser) context = mango.ContextBuilder.from_command_line_parameters(args) disposer = mango.DisposePropagator() manager = mango.IndividualWebSocketSubscriptionManager(context) disposer.add_disposable(manager) log_subscription = mango.WebSocketLogSubscription(context, args.address) manager.add(log_subscription) publisher = log_subscription.publisher publisher.subscribe(mango.PrintingObserverSubscriber(False)) manager.open() # Wait - don't exit. Exiting will be handled by signals/interrupts. waiter = threading.Event() try: waiter.wait() except: pass logging.info("Shutting down...") disposer.dispose() logging.info("Shutdown complete.")