github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/sawtooth-core-master/families/settings/sawtooth_settings/processor/main.py (about) 1 # Copyright 2017 Intel Corporation 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 # ------------------------------------------------------------------------------ 15 16 import argparse 17 import logging 18 import os 19 import sys 20 import pkg_resources 21 22 from colorlog import ColoredFormatter 23 24 from sawtooth_sdk.processor.core import TransactionProcessor 25 from sawtooth_sdk.processor.log import init_console_logging 26 from sawtooth_sdk.processor.log import log_configuration 27 from sawtooth_sdk.processor.config import get_log_config 28 from sawtooth_sdk.processor.config import get_log_dir 29 from sawtooth_sdk.processor.config import get_config_dir 30 from sawtooth_settings.processor.handler import SettingsTransactionHandler 31 from sawtooth_settings.processor.config.settings import SettingsConfig 32 from sawtooth_settings.processor.config.settings import \ 33 load_default_settings_config 34 from sawtooth_settings.processor.config.settings import \ 35 load_toml_settings_config 36 from sawtooth_settings.processor.config.settings import \ 37 merge_settings_config 38 39 40 DISTRIBUTION_NAME = 'sawtooth-settings' 41 42 43 def create_console_handler(verbose_level): 44 clog = logging.StreamHandler() 45 formatter = ColoredFormatter( 46 "%(log_color)s[%(asctime)s.%(msecs)03d " 47 "%(levelname)-8s %(module)s]%(reset)s " 48 "%(white)s%(message)s", 49 datefmt="%Y-%m-%d %H:%M:%S", 50 reset=True, 51 log_colors={ 52 'DEBUG': 'cyan', 53 'INFO': 'green', 54 'WARNING': 'yellow', 55 'ERROR': 'red', 56 'CRITICAL': 'red', 57 }) 58 59 clog.setFormatter(formatter) 60 61 if verbose_level == 0: 62 clog.setLevel(logging.WARN) 63 elif verbose_level == 1: 64 clog.setLevel(logging.INFO) 65 else: 66 clog.setLevel(logging.DEBUG) 67 68 return clog 69 70 71 def setup_loggers(verbose_level, processor): 72 log_config = get_log_config(filename="settings_log_config.toml") 73 74 # If no toml, try loading yaml 75 if log_config is None: 76 log_config = get_log_config(filename="settings_log_config.yaml") 77 78 if log_config is not None: 79 log_configuration(log_config=log_config) 80 else: 81 log_dir = get_log_dir() 82 # use the transaction processor zmq identity for filename 83 log_configuration( 84 log_dir=log_dir, 85 name="settings-" + str(processor.zmq_id)[2:-1]) 86 87 init_console_logging(verbose_level=verbose_level) 88 89 90 def create_parser(prog_name): 91 parser = argparse.ArgumentParser( 92 prog=prog_name, 93 description='Starts a Settings transaction processor (settings-tp).', 94 epilog='This process is required to apply any changes to on-chain ' 95 'settings used by the Sawtooth platform.', 96 formatter_class=argparse.RawDescriptionHelpFormatter) 97 98 parser.add_argument( 99 '-C', '--connect', 100 help='specify the endpoint for the validator connection (default: ' 101 'tcp://localhost:4004) ') 102 103 parser.add_argument( 104 '-v', '--verbose', 105 action='count', 106 default=0, 107 help='enable more verbose output to stderr') 108 109 try: 110 version = pkg_resources.get_distribution(DISTRIBUTION_NAME).version 111 except pkg_resources.DistributionNotFound: 112 version = 'UNKNOWN' 113 114 parser.add_argument( 115 '-V', '--version', 116 action='version', 117 version=(DISTRIBUTION_NAME + ' (Hyperledger Sawtooth) version {}') 118 .format(version), 119 help='display version information') 120 121 return parser 122 123 124 def load_settings_config(first_config): 125 default_settings_config = \ 126 load_default_settings_config() 127 conf_file = os.path.join(get_config_dir(), 'settings.toml') 128 129 toml_config = load_toml_settings_config(conf_file) 130 131 return merge_settings_config( 132 configs=[first_config, toml_config, default_settings_config]) 133 134 135 def create_settings_config(args): 136 return SettingsConfig(connect=args.connect) 137 138 139 def main(prog_name=os.path.basename(sys.argv[0]), args=None, 140 with_loggers=True): 141 if args is None: 142 args = sys.argv[1:] 143 parser = create_parser(prog_name) 144 args = parser.parse_args(args) 145 146 arg_config = create_settings_config(args) 147 settings_config = load_settings_config(arg_config) 148 processor = TransactionProcessor(url=settings_config.connect) 149 150 if with_loggers is True: 151 if args.verbose is None: 152 verbose_level = 0 153 else: 154 verbose_level = args.verbose 155 setup_loggers(verbose_level=verbose_level, processor=processor) 156 157 handler = SettingsTransactionHandler() 158 159 processor.add_handler(handler) 160 161 try: 162 processor.start() 163 except KeyboardInterrupt: 164 pass 165 finally: 166 processor.stop()