Browse Source

!44 start/stop command should return correct exit-code based on result of process

Merge pull request !44 from liangyongxiong/master
tags/v0.2.0-alpha
mindspore-ci-bot Gitee 5 years ago
parent
commit
1f2f85844b
5 changed files with 41 additions and 26 deletions
  1. +5
    -3
      mindinsight/backend/run.py
  2. +6
    -5
      mindinsight/scripts/start.py
  3. +8
    -7
      mindinsight/scripts/stop.py
  4. +19
    -8
      mindinsight/utils/command.py
  5. +3
    -3
      mindinsight/utils/log.py

+ 5
- 3
mindinsight/backend/run.py View File

@@ -231,6 +231,8 @@ def start():


log_size = _get_file_size(errorlog_abspath) log_size = _get_file_size(errorlog_abspath)


stdout = setup_logger('mindinsight', 'stdout', console=True, logfile=False, formatter='%(message)s')

# start server # start server
process = subprocess.Popen( process = subprocess.Popen(
shlex.split(cmd), shlex.split(cmd),
@@ -241,15 +243,15 @@ def start():
) )
_, stderr = process.communicate() _, stderr = process.communicate()
if stderr: if stderr:
print(stderr.decode())
stdout.error(stderr.decode())


# wait command success to end when gunicorn running in daemon. # wait command success to end when gunicorn running in daemon.
if gunicorn_conf.daemon and process.wait() == 0: if gunicorn_conf.daemon and process.wait() == 0:
state_result = _check_server_start_stat(errorlog_abspath, log_size) state_result = _check_server_start_stat(errorlog_abspath, log_size)
# print gunicorn start state to stdout # print gunicorn start state to stdout
print('Web address: http://{}:{}'.format(settings.HOST, settings.PORT))
stdout.info('Web address: http://{}:{}'.format(settings.HOST, settings.PORT))
for line in state_result["prompt_message"]: for line in state_result["prompt_message"]:
print(line)
stdout.info(line)




if __name__ == '__main__': if __name__ == '__main__':


+ 6
- 5
mindinsight/scripts/start.py View File

@@ -15,6 +15,7 @@
"""Start mindinsight service.""" """Start mindinsight service."""


import os import os
import sys
import argparse import argparse
from importlib import import_module from importlib import import_module


@@ -183,19 +184,19 @@ class Command(BaseCommand):
""" """
for key, value in args.__dict__.items(): for key, value in args.__dict__.items():
if value is not None: if value is not None:
self.logger.info('%s = %s', key, value)
self.logfile.info('%s = %s', key, value)


try: try:
self.check_port() self.check_port()
except PortNotAvailableError as error: except PortNotAvailableError as error:
print(error.message)
self.logger.error(error.message)
return
self.console.error(error.message)
self.logfile.error(error.message)
sys.exit(1)


run_module = import_module('mindinsight.backend.run') run_module = import_module('mindinsight.backend.run')
run_module.start() run_module.start()


self.logger.info('Start mindinsight done.')
self.logfile.info('Start mindinsight done.')


def check_port(self): def check_port(self):
"""Check port.""" """Check port."""


+ 8
- 7
mindinsight/scripts/stop.py View File

@@ -15,6 +15,7 @@
"""Stop mindinsight service.""" """Stop mindinsight service."""


import os import os
import sys
import argparse import argparse
import signal import signal
import getpass import getpass
@@ -96,10 +97,10 @@ class Command(BaseCommand):
port, pid = args.port, args.pid port, pid = args.port, args.pid
if not pid: if not pid:
msg = f'No mindinsight service found for port {port}' msg = f'No mindinsight service found for port {port}'
print(msg)
return
self.console.error(msg)
sys.exit(1)


self.logger.info('Stop mindinsight with port %s and pid %s.', port, pid)
self.logfile.info('Stop mindinsight with port %s and pid %s.', port, pid)


process = psutil.Process(pid) process = psutil.Process(pid)
child_pids = [child.pid for child in process.children()] child_pids = [child.pid for child in process.children()]
@@ -108,8 +109,8 @@ class Command(BaseCommand):
try: try:
os.kill(pid, signal.SIGKILL) os.kill(pid, signal.SIGKILL)
except PermissionError: except PermissionError:
print('kill pid %s failed due to permission error' % pid)
return
self.console.info('kill pid %s failed due to permission error' % pid)
sys.exit(1)


# cleanup gunicorn worker processes # cleanup gunicorn worker processes
for child_pid in child_pids: for child_pid in child_pids:
@@ -119,9 +120,9 @@ class Command(BaseCommand):
pass pass


for hook in HookUtils.instance().hooks(): for hook in HookUtils.instance().hooks():
hook.on_shutdown(self.logger)
hook.on_shutdown(self.logfile)


print('Stop mindinsight service successfully')
self.console.info('Stop mindinsight service successfully')


def get_process(self, port): def get_process(self, port):
""" """


+ 19
- 8
mindinsight/utils/command.py View File

@@ -30,7 +30,11 @@ class BaseCommand:
name = '' name = ''
description = '' description = ''


logger = None
# logger for console output instead of built-in print
console = None

# logger for log file recording in case audit is required
logfile = None


def add_arguments(self, parser): def add_arguments(self, parser):
""" """
@@ -64,21 +68,28 @@ class BaseCommand:
Args: Args:
args (Namespace): parsed arguments to hold customized parameters. args (Namespace): parsed arguments to hold customized parameters.
""" """
error = None
try: try:
self.update_settings(args) self.update_settings(args)
except MindInsightException as error:
print(error.message)
else:
self.logger = setup_logger('scripts', self.name)
self.run(args)
except MindInsightException as e:
error = e

self.console = setup_logger('mindinsight', 'console', console=True, logfile=False, formatter='%(message)s')
if error is not None:
self.console.error(error.message)
sys.exit(1)

self.logfile = setup_logger('scripts', self.name, console=False, logfile=True)
self.run(args)




def main(): def main():
"""Entry point for mindinsight CLI.""" """Entry point for mindinsight CLI."""


console = setup_logger('mindinsight', 'console', console=True, logfile=False, formatter='%(message)s')
if (sys.version_info.major, sys.version_info.minor) < (3, 7): if (sys.version_info.major, sys.version_info.minor) < (3, 7):
print('Python version should be at least 3.7')
return
console.error('Python version should be at least 3.7')
sys.exit(1)


permissions = os.R_OK | os.W_OK | os.X_OK permissions = os.R_OK | os.W_OK | os.X_OK




+ 3
- 3
mindinsight/utils/log.py View File

@@ -146,7 +146,7 @@ def get_logger(sub_module, log_name):
return logging.getLogger(name='{}.{}'.format(sub_module, log_name)) return logging.getLogger(name='{}.{}'.format(sub_module, log_name))




def setup_logger(sub_module, log_name, console=False, logfile=True, **kwargs):
def setup_logger(sub_module, log_name, **kwargs):
""" """
Setup logger with sub module name and log file name. Setup logger with sub module name and log file name.


@@ -189,12 +189,12 @@ def setup_logger(sub_module, log_name, console=False, logfile=True, **kwargs):
if not formatter: if not formatter:
formatter = settings.LOG_FORMAT formatter = settings.LOG_FORMAT


if console:
if kwargs.get('console', True):
console_handler = logging.StreamHandler(sys.stdout) console_handler = logging.StreamHandler(sys.stdout)
console_handler.formatter = MindInsightFormatter(sub_module, formatter) console_handler.formatter = MindInsightFormatter(sub_module, formatter)
logger.addHandler(console_handler) logger.addHandler(console_handler)


if logfile:
if kwargs.get('logfile', True):
max_bytes = kwargs.get('maxBytes', settings.LOG_ROTATING_MAXBYTES) max_bytes = kwargs.get('maxBytes', settings.LOG_ROTATING_MAXBYTES)


if not isinstance(max_bytes, int) or not max_bytes > 0: if not isinstance(max_bytes, int) or not max_bytes > 0:


Loading…
Cancel
Save