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()