diff --git a/pisa/__init__.py b/pisa/__init__.py index dd06913..e7d380b 100644 --- a/pisa/__init__.py +++ b/pisa/__init__.py @@ -1,27 +1,37 @@ -import logging - -from pisa.utils.auth_proxy import AuthServiceProxy +import os import pisa.conf as conf +from common.tools import check_conf_fields, setup_logging, extend_paths +from pisa.utils.auth_proxy import AuthServiceProxy HOST = "localhost" PORT = 9814 +LOG_PREFIX = "pisa" -# Create the file logger -f_logger = logging.getLogger("pisa_file_log") -f_logger.setLevel(logging.INFO) +# Load config fields +conf_fields = { + "BTC_RPC_USER": {"value": conf.BTC_RPC_USER, "type": str}, + "BTC_RPC_PASSWD": {"value": conf.BTC_RPC_PASSWD, "type": str}, + "BTC_RPC_HOST": {"value": conf.BTC_RPC_HOST, "type": str}, + "BTC_RPC_PORT": {"value": conf.BTC_RPC_PORT, "type": int}, + "BTC_NETWORK": {"value": conf.BTC_NETWORK, "type": str}, + "FEED_PROTOCOL": {"value": conf.FEED_PROTOCOL, "type": str}, + "FEED_ADDR": {"value": conf.FEED_ADDR, "type": str}, + "FEED_PORT": {"value": conf.FEED_PORT, "type": int}, + "DATA_FOLDER": {"value": conf.DATA_FOLDER, "type": str}, + "MAX_APPOINTMENTS": {"value": conf.MAX_APPOINTMENTS, "type": int}, + "EXPIRY_DELTA": {"value": conf.EXPIRY_DELTA, "type": int}, + "MIN_TO_SELF_DELAY": {"value": conf.MIN_TO_SELF_DELAY, "type": int}, + "SERVER_LOG_FILE": {"value": conf.SERVER_LOG_FILE, "type": str, "path": True}, + "PISA_SECRET_KEY": {"value": conf.PISA_SECRET_KEY, "type": str, "path": True}, + "DB_PATH": {"value": conf.DB_PATH, "type": str, "path": True}, +} -fh = logging.FileHandler(conf.SERVER_LOG_FILE) -fh.setLevel(logging.INFO) -fh_formatter = logging.Formatter("%(message)s") -fh.setFormatter(fh_formatter) -f_logger.addHandler(fh) +# Expand user (~) if found and check fields are correct +conf_fields["DATA_FOLDER"]["value"] = os.path.expanduser(conf_fields["DATA_FOLDER"]["value"]) +# Extend relative paths +conf_fields = extend_paths(conf_fields["DATA_FOLDER"]["value"], conf_fields) -# Create the console logger -c_logger = logging.getLogger("pisa_console_log") -c_logger.setLevel(logging.INFO) +# Sanity check fields and build config dictionary +config = check_conf_fields(conf_fields) -ch = logging.StreamHandler() -ch.setLevel(logging.INFO) -ch_formatter = logging.Formatter("%(message)s.", "%Y-%m-%d %H:%M:%S") -ch.setFormatter(ch_formatter) -c_logger.addHandler(ch) +setup_logging(config.get("SERVER_LOG_FILE"), LOG_PREFIX) diff --git a/pisa/pisad.py b/pisa/pisad.py index 6be2c98..1c35000 100644 --- a/pisa/pisad.py +++ b/pisa/pisad.py @@ -1,21 +1,20 @@ -import os from getopt import getopt from sys import argv, exit from signal import signal, SIGINT, SIGQUIT, SIGTERM from common.logger import Logger -from common.tools import check_conf_fields, setup_data_folder +from common.tools import setup_data_folder +from pisa import config, LOG_PREFIX from pisa.api import API from pisa.watcher import Watcher from pisa.builder import Builder -import pisa.conf as conf from pisa.db_manager import DBManager from pisa.chain_monitor import ChainMonitor from pisa.block_processor import BlockProcessor from pisa.tools import can_connect_to_bitcoind, in_correct_network -logger = Logger("Daemon") +logger = Logger(actor="Daemon", log_name_prefix=LOG_PREFIX) def handle_signals(signal_received, frame): @@ -27,49 +26,6 @@ def handle_signals(signal_received, frame): exit(0) -def load_config(config): - """ - Looks through all of the config options to make sure they contain the right type of data and builds a config - dictionary. - - Args: - config (:obj:`module`): It takes in a config module object. - - Returns: - :obj:`dict` A dictionary containing the config values. - """ - - conf_dict = {} - - data_folder = config.DATA_FOLDER - if isinstance(data_folder, str): - data_folder = os.path.expanduser(data_folder) - else: - raise ValueError("The provided user folder is invalid.") - - conf_fields = { - "BTC_RPC_USER": {"value": config.BTC_RPC_USER, "type": str}, - "BTC_RPC_PASSWD": {"value": config.BTC_RPC_PASSWD, "type": str}, - "BTC_RPC_HOST": {"value": config.BTC_RPC_HOST, "type": str}, - "BTC_RPC_PORT": {"value": config.BTC_RPC_PORT, "type": int}, - "BTC_NETWORK": {"value": config.BTC_NETWORK, "type": str}, - "FEED_PROTOCOL": {"value": config.FEED_PROTOCOL, "type": str}, - "FEED_ADDR": {"value": config.FEED_ADDR, "type": str}, - "FEED_PORT": {"value": config.FEED_PORT, "type": int}, - "DATA_FOLDER": {"value": data_folder, "type": str}, - "MAX_APPOINTMENTS": {"value": config.MAX_APPOINTMENTS, "type": int}, - "EXPIRY_DELTA": {"value": config.EXPIRY_DELTA, "type": int}, - "MIN_TO_SELF_DELAY": {"value": config.MIN_TO_SELF_DELAY, "type": int}, - "SERVER_LOG_FILE": {"value": data_folder, "type": str}, - "PISA_SECRET_KEY": {"value": data_folder + config.PISA_SECRET_KEY, "type": str}, - "DB_PATH": {"value": data_folder + config.DB_PATH, "type": str}, - } - - check_conf_fields(conf_fields, logger) - - return conf_dict - - def main(): global db_manager, chain_monitor @@ -77,16 +33,15 @@ def main(): signal(SIGTERM, handle_signals) signal(SIGQUIT, handle_signals) - pisa_config = load_config(conf) logger.info("Starting PISA") - setup_data_folder(pisa_config.get("DATA_FOLDER"), logger) - db_manager = DBManager(pisa_config.get("DB_PATH")) + setup_data_folder(config.get("DATA_FOLDER"), logger) + db_manager = DBManager(config.get("DB_PATH")) if not can_connect_to_bitcoind(): logger.error("Can't connect to bitcoind. Shutting down") - elif not in_correct_network(pisa_config.get("BTC_NETWORK")): + elif not in_correct_network(config.get("BTC_NETWORK")): logger.error("bitcoind is running on a different network, check conf.py and bitcoin.conf. Shutting down") else: @@ -98,10 +53,10 @@ def main(): watcher_appointments_data = db_manager.load_watcher_appointments() responder_trackers_data = db_manager.load_responder_trackers() - with open(pisa_config.get("PISA_SECRET_KEY"), "rb") as key_file: + with open(config.get("PISA_SECRET_KEY"), "rb") as key_file: secret_key_der = key_file.read() - watcher = Watcher(db_manager, chain_monitor, secret_key_der, pisa_config) + watcher = Watcher(db_manager, chain_monitor, secret_key_der, config) chain_monitor.attach_watcher(watcher.block_queue, watcher.asleep) chain_monitor.attach_responder(watcher.responder.block_queue, watcher.responder.asleep) @@ -147,7 +102,7 @@ def main(): watcher.block_queue = Builder.build_block_queue(missed_blocks_watcher) # Fire the API - API(watcher, config=pisa_config).start() + API(watcher, config=config).start() except Exception as e: logger.error("An error occurred: {}. Shutting down".format(e))