[ https://issues.apache.org/jira/browse/ARIA-146?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15983165#comment-15983165 ]
ASF GitHub Bot commented on ARIA-146: ------------------------------------- Github user mxmrlv commented on a diff in the pull request: https://github.com/apache/incubator-ariatosca/pull/109#discussion_r113231457 --- Diff: aria/cli/execution_logging.py --- @@ -12,62 +12,208 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - +import os +import re from StringIO import StringIO +from contextlib import contextmanager from . import logger +from .color import Color from .env import env + +LEVEL = 'level' +TIMESTAMP = 'timestamp' +MESSAGE = 'message' +IMPLEMENTATION = 'implementation' +INPUTS = 'inputs' +TRACEBACK = 'traceback' +MARKER = 'marker' + +FINAL_STATES = 'final_states' +SUCCESS_STATE = 'success' +CANCEL_STATE = 'cancel' +FAIL_STATE = 'fail' + + +_EXECUTION_BASE_PATTERN = "\'.*\' workflow execution " +_SUCCESSFUL_EXECUTION_PATTERN = _EXECUTION_BASE_PATTERN + "succeeded" +_FAILED_EXECUTION_PATTERN = _EXECUTION_BASE_PATTERN + "failed" +_CANCELED_EXECUTION_PATTERN = _EXECUTION_BASE_PATTERN + "canceled" + DEFAULT_FORMATTING = { - logger.NO_VERBOSE: {'message': '{item.msg}'}, + logger.NO_VERBOSE: {'message': '{message}'}, logger.LOW_VERBOSE: { - 'message': '{timestamp} | {item.level[0]} | {item.msg}', - 'timestamp': '%H:%M:%S' + MESSAGE: '{timestamp} | {level} | {message}', + LEVEL: '{level[0]}', + TIMESTAMP: '%H:%M:%S', }, logger.MEDIUM_VERBOSE: { - 'message': '{timestamp} | {item.level[0]} | {implementation} | {item.msg} ', - 'timestamp': '%H:%M:%S' + MESSAGE: '{timestamp} | {level} | {implementation} | {message} ', + LEVEL: '{level[0]}', + TIMESTAMP: '%H:%M:%S' }, logger.HIGH_VERBOSE: { - 'message': '{timestamp} | {item.level[0]} | {implementation}({inputs}) | {item.msg} ', - 'timestamp': '%H:%M:%S' + MESSAGE: '{timestamp} | {level} | {implementation} | {inputs} | {message} ', + LEVEL: '{level[0]}', + TIMESTAMP: '%H:%M:%S' + }, +} + +DEFAULT_STYLING = { + LEVEL: { + 'info': Color.Fore.LIGHTMAGENTA_EX, + 'debug': Color.Schema(fore=Color.Fore.LIGHTMAGENTA_EX, style=Color.Style.DIM), + 'error': Color.Schema(fore=Color.Fore.RED, style=Color.Style.BRIGHT), }, + TIMESTAMP: { + 'info': Color.Fore.LIGHTMAGENTA_EX, + 'debug': Color.Schema(fore=Color.Fore.LIGHTMAGENTA_EX, style=Color.Style.DIM), + 'error': Color.Schema(fore=Color.Fore.RED, style=Color.Style.BRIGHT), + }, + MESSAGE: { + 'info': Color.Fore.LIGHTBLUE_EX, + 'debug': Color.Schema(fore=Color.Fore.LIGHTBLUE_EX, style=Color.Style.DIM), + 'error': Color.Schema(fore=Color.Fore.RED, style=Color.Style.BRIGHT), + }, + IMPLEMENTATION: { + 'info': Color.Fore.LIGHTBLACK_EX, + 'debug': Color.Schema(fore=Color.Fore.LIGHTBLACK_EX, style=Color.Style.DIM), + 'error': Color.Schema(fore=Color.Fore.RED, style=Color.Style.BRIGHT), + }, + INPUTS: { + 'info': Color.Fore.BLUE, + 'debug': Color.Schema(fore=Color.Fore.BLUE, style=Color.Style.DIM), + 'error': Color.Schema(fore=Color.Fore.RED, style=Color.Style.BRIGHT), + }, + TRACEBACK: {'error': Color.Fore.RED}, + + MARKER: Color.Back.LIGHTYELLOW_EX, + FINAL_STATES: { + SUCCESS_STATE: Color.Fore.GREEN, + CANCEL_STATE: Color.Fore.YELLOW, + FAIL_STATE: Color.Fore.RED, + } } +_PATTERNS = { + SUCCESS_STATE: re.compile(_SUCCESSFUL_EXECUTION_PATTERN), + CANCEL_STATE: re.compile(_CANCELED_EXECUTION_PATTERN), + FAIL_STATE: re.compile(_FAILED_EXECUTION_PATTERN) + +} + + +class _StylizedLogs(object): + + def __init__(self): + self._formats = DEFAULT_FORMATTING + self._styles = DEFAULT_STYLING + self._mark_pattern = None + + def _push(self, styles=None, formats=None, mark_pattern=None): + self._styles = styles or self._styles + self._formats = formats or self._formats + self._mark_pattern = mark_pattern + + def _implementation(self, implementation, log_item): + return self._stylize(implementation, log_item, IMPLEMENTATION) + + def _inputs(self, inputs, log_item): + return self._stylize(inputs, log_item, INPUTS) + + def _timestamp(self, timestamp, log_item): + return self._stylize(timestamp, log_item, TIMESTAMP) + + def _message(self, message, log_item): + return self._stylize(message, log_item, MESSAGE) + + def _traceback(self, traceback, log_item): + return self._stylize(traceback, log_item, TRACEBACK) + + def _level(self, log_item): + return self._stylize(log_item.level[0], log_item, LEVEL) + + def _stylize(self, msg, log_item, msg_type): + schema = (self._final_string_schema(log_item.msg) or + self._styles[msg_type].get(log_item.level.lower(), '')) + return Color.stylize(msg, schema) + + def _markup(self, str_, original_message): + if self._mark_pattern is None: + return str_ + else: + regex_pattern = re.compile(self._mark_pattern) + matches = re.search(regex_pattern, original_message) + if not matches: + return str_ + return Color.markup(str_, matches, self._styles[MARKER]) + + def _final_string_schema(self, original_message): --- End diff -- sheesh > Support colorful execution logging > ---------------------------------- > > Key: ARIA-146 > URL: https://issues.apache.org/jira/browse/ARIA-146 > Project: AriaTosca > Issue Type: Story > Reporter: Ran Ziv > Assignee: Maxim Orlov > Priority: Minor > > Add support for printing execution logs in color -- This message was sent by Atlassian JIRA (v6.3.15#6346)