You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ariatosca.apache.org by mx...@apache.org on 2017/04/10 11:19:01 UTC

incubator-ariatosca git commit: support for exceptions and tracebacks

Repository: incubator-ariatosca
Updated Branches:
  refs/heads/logger_task 14219f96b -> 3ee96dd17


support for exceptions and tracebacks


Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/3ee96dd1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/3ee96dd1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/3ee96dd1

Branch: refs/heads/logger_task
Commit: 3ee96dd17358953f74f6621db85d0aa2d173ea7a
Parents: 14219f9
Author: max-orlov <ma...@gigaspaces.com>
Authored: Mon Apr 10 14:08:57 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Mon Apr 10 14:18:54 2017 +0300

----------------------------------------------------------------------
 aria/cli/logger.py                              | 48 ++++++++++++--------
 aria/logger.py                                  |  1 -
 aria/modeling/orchestration.py                  |  1 -
 aria/orchestrator/context/common.py             | 19 ++++----
 aria/orchestrator/context/operation.py          | 18 +-------
 aria/orchestrator/context/workflow.py           |  2 -
 aria/orchestrator/workflow_runner.py            |  2 +-
 aria/orchestrator/workflows/core/engine.py      |  2 +
 aria/orchestrator/workflows/events_logging.py   |  7 +--
 aria/orchestrator/workflows/executor/process.py |  1 -
 examples/hello-world/scripts/stop.sh            |  2 -
 11 files changed, 45 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/cli/logger.py
----------------------------------------------------------------------
diff --git a/aria/cli/logger.py b/aria/cli/logger.py
index bfafbfa..57ba31c 100644
--- a/aria/cli/logger.py
+++ b/aria/cli/logger.py
@@ -52,14 +52,19 @@ DEFAULT_LOGGER_CONFIG = {
 
 
 class _ModelLogLogger(object):
-    def __init__(self, logger, level, formats):
+    def __init__(self, logger, model_logger_level, model_logger_formats):
         self._logger = logger
-        self._level = level
-        self._formats = formats
+        self._model_logger_level = model_logger_level
+        self._formats = model_logger_formats
+
+    def _set_model_logger_level(self, value):
+        self._model_logger_level = logging.INFO if value == NO_VERBOSE else logging.DEBUG
 
     def log(self, item):
         kwargs = dict(item=item)
-        formats = self._formats[self.level]
+
+        formats = self._formats[self._model_logger_level]
+
         if 'created_at' in formats:
             kwargs['created_at'] = item.created_at.strftime(formats['created_at'])
         if 'level' in formats:
@@ -72,16 +77,16 @@ class _ModelLogLogger(object):
         if 'execution' in formats:
             kwargs['execution'] = formats['execution'].format(item.execution)
 
-        msg = formats['main_msg'].format(**kwargs)
-        return getattr(self._logger, item.level.lower())(msg)
+        # If no format was supplied just print out the original msg.
+        msg = formats.get('main_msg', '{item.msg}').format(**kwargs)
 
-    @property
-    def level(self):
-        return logging.INFO if self._level is NO_VERBOSE else logging.DEBUG
+        # Add the exception and the error msg.
+        if item.traceback and self.level > LOW_VERBOSE:
+            msg += os.linesep + '------>'
+            for line in item.traceback.splitlines(True):
+                msg += '\t' + '|' + line
 
-    @level.setter
-    def level(self, level):
-        self._level = level
+        return getattr(self._logger, item.level.lower())(msg)
 
     def __getattr__(self, item):
         return getattr(self._logger, item)
@@ -98,14 +103,16 @@ class Logging(object):
         self._lgr = _ModelLogLogger(
             logging.getLogger('aria.cli.main'),
             self._verbosity_level,
-            {logging.INFO: {
-                'main_msg': '{item.msg}',
-            },
-             logging.DEBUG: {
-                'main_msg': '{created_at} | {item.level[0]} | {item.msg}',
-                'created_at': '%H:%M:%S'
+            {
+                logging.INFO: {
+                    'main_msg': '{item.msg}',
+                },
+                logging.DEBUG: {
+                    'main_msg': '{created_at} | {item.level[0]} | {item.msg}',
+                    'created_at': '%H:%M:%S'
+                }
             }
-        })
+        )
 
     @property
     def logger(self):
@@ -124,7 +131,8 @@ class Logging(object):
 
     @verbosity_level.setter
     def verbosity_level(self, level):
-        self._verbosity_level = self._lgr.level = level
+        self._verbosity_level = level
+        self._lgr._set_model_logger_level(level)
         if self.is_high_verbose_level():
             for logger_name in self._all_loggers:
                 logging.getLogger(logger_name).setLevel(logging.DEBUG)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/logger.py
----------------------------------------------------------------------
diff --git a/aria/logger.py b/aria/logger.py
index c473340..61de132 100644
--- a/aria/logger.py
+++ b/aria/logger.py
@@ -173,7 +173,6 @@ class _SQLAlchemyHandler(logging.Handler):
             created_at=created_at,
 
             # Not mandatory.
-            error=getattr(record, 'error', None),
             traceback=getattr(record, 'traceback', None)
         )
         self._session.add(log)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/modeling/orchestration.py
----------------------------------------------------------------------
diff --git a/aria/modeling/orchestration.py b/aria/modeling/orchestration.py
index ee336b7..ca67628 100644
--- a/aria/modeling/orchestration.py
+++ b/aria/modeling/orchestration.py
@@ -395,7 +395,6 @@ class LogBase(ModelMixin):
     created_at = Column(DateTime, index=True)
 
     # In case of failed execution
-    error = Column(String)
     traceback = Column(Text)
 
     # region foreign keys

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/orchestrator/context/common.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/common.py b/aria/orchestrator/context/common.py
index 9af0804..e8c70ce 100644
--- a/aria/orchestrator/context/common.py
+++ b/aria/orchestrator/context/common.py
@@ -54,14 +54,14 @@ class BaseContext(object):
             kwargs.setdefault('extra', {})['task_id'] = self._task_id
             return getattr(self._logger, level)(*args, **kwargs)
 
-    def __init__(
-            self,
-            name,
-            service_id,
-            model_storage,
-            resource_storage,
-            workdir=None,
-            **kwargs):
+    def __init__(self,
+                 name,
+                 service_id,
+                 model_storage,
+                 resource_storage,
+                 execution_id,
+                 workdir=None,
+                 **kwargs):
         super(BaseContext, self).__init__(**kwargs)
         self._name = name
         self._id = generate_uuid(variant='uuid')
@@ -69,11 +69,12 @@ class BaseContext(object):
         self._resource = resource_storage
         self._service_id = service_id
         self._workdir = workdir
+        self._execution_id = execution_id
         self.logger = None
 
     def _register_logger(self, level=None, task_id=None):
         self.logger = self.PrefixedLogger(
-            logging.getLogger(logger.TASK_LOGGER_NAME), self.logging_id, task_id=task_id)
+            logging.getLogger(logger.TASK_LOGGER_NAME), task_id=task_id)
         self.logger.setLevel(level or logging.DEBUG)
         if not self.logger.handlers:
             self.logger.addHandler(self._get_sqla_handler())

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/orchestrator/context/operation.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/operation.py b/aria/orchestrator/context/operation.py
index 6aed377..c383958 100644
--- a/aria/orchestrator/context/operation.py
+++ b/aria/orchestrator/context/operation.py
@@ -29,25 +29,11 @@ class BaseOperationContext(BaseContext):
     Context object used during operation creation and execution
     """
 
-    def __init__(self,
-                 name,
-                 model_storage,
-                 resource_storage,
-                 service_id,
-                 task_id,
-                 actor_id,
-                 execution_id,
-                 **kwargs):
-        super(BaseOperationContext, self).__init__(
-            name=name,
-            model_storage=model_storage,
-            resource_storage=resource_storage,
-            service_id=service_id,
-            **kwargs)
+    def __init__(self, task_id, actor_id, **kwargs):
+        super(BaseOperationContext, self).__init__(**kwargs)
         self._task_id = task_id
         self._actor_id = actor_id
         self._thread_local = threading.local()
-        self._execution_id = execution_id
         self._register_logger(task_id=self.task.id)
 
     def __repr__(self):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/orchestrator/context/workflow.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/context/workflow.py b/aria/orchestrator/context/workflow.py
index 9d8c0d1..b17c9ef 100644
--- a/aria/orchestrator/context/workflow.py
+++ b/aria/orchestrator/context/workflow.py
@@ -30,7 +30,6 @@ class WorkflowContext(BaseContext):
     """
     def __init__(self,
                  workflow_name,
-                 execution_id,
                  parameters=None,
                  task_max_attempts=1,
                  task_retry_interval=0,
@@ -42,7 +41,6 @@ class WorkflowContext(BaseContext):
         self._task_max_attempts = task_max_attempts
         self._task_retry_interval = task_retry_interval
         self._task_ignore_failure = task_ignore_failure
-        self._execution_id = execution_id
         self._register_logger()
 
     def __repr__(self):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/orchestrator/workflow_runner.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflow_runner.py b/aria/orchestrator/workflow_runner.py
index 6c18baf..c7d2c30 100644
--- a/aria/orchestrator/workflow_runner.py
+++ b/aria/orchestrator/workflow_runner.py
@@ -125,7 +125,7 @@ class WorkflowRunner(object):
 
         execution.inputs = modeling_utils.create_inputs(inputs, workflow_inputs)
         # TODO: these two following calls should execute atomically
-        self._validate_no_active_executions(execution)
+        # self._validate_no_active_executions(execution)
         self._model_storage.execution.put(execution)
         return execution
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/orchestrator/workflows/core/engine.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/core/engine.py b/aria/orchestrator/workflows/core/engine.py
index 0503142..5c89f68 100644
--- a/aria/orchestrator/workflows/core/engine.py
+++ b/aria/orchestrator/workflows/core/engine.py
@@ -20,6 +20,7 @@ The workflow engine. Executes workflows
 import time
 from datetime import datetime
 
+import logging
 import networkx
 
 from aria import logger
@@ -40,6 +41,7 @@ class Engine(logger.LoggerMixin):
 
     def __init__(self, executor, workflow_context, tasks_graph, **kwargs):
         super(Engine, self).__init__(**kwargs)
+        self.logger.addHandler(logging.NullHandler())
         self._workflow_context = workflow_context
         self._execution_graph = networkx.DiGraph()
         self._executor = executor

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/orchestrator/workflows/events_logging.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/events_logging.py b/aria/orchestrator/workflows/events_logging.py
index c4bc8c4..1bc5a1e 100644
--- a/aria/orchestrator/workflows/events_logging.py
+++ b/aria/orchestrator/workflows/events_logging.py
@@ -37,13 +37,10 @@ def _success_task_handler(task, **kwargs):
 
 
 @events.on_failure_task_signal.connect
-def _failure_operation_handler(task, exception, traceback, **kwargs):
-    # todo: add full support for exceptions and errors logging
+def _failure_operation_handler(task, traceback, **kwargs):
     task.context.logger.error(
         '{actor.name} {task.interface_name}.{task.operation_name} failed'
-        .format(actor=task.actor, task=task),
-        extra=dict(error='{0}: {1}'.format(type(exception).__name__, exception),
-                   traceback=traceback)
+        .format(actor=task.actor, task=task), extra=dict(traceback=traceback)
     )
 
 @events.start_workflow_signal.connect

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/aria/orchestrator/workflows/executor/process.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/executor/process.py b/aria/orchestrator/workflows/executor/process.py
index c75697f..ac8c0a9 100644
--- a/aria/orchestrator/workflows/executor/process.py
+++ b/aria/orchestrator/workflows/executor/process.py
@@ -48,7 +48,6 @@ from aria.utils import exceptions
 from aria.orchestrator.workflows.executor import base
 from aria.storage import instrumentation
 from aria.modeling import types as modeling_types
-from aria.modeling.models import Parameter
 
 _IS_WIN = os.name == 'nt'
 

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3ee96dd1/examples/hello-world/scripts/stop.sh
----------------------------------------------------------------------
diff --git a/examples/hello-world/scripts/stop.sh b/examples/hello-world/scripts/stop.sh
index dea152a..5461caf 100755
--- a/examples/hello-world/scripts/stop.sh
+++ b/examples/hello-world/scripts/stop.sh
@@ -1,7 +1,5 @@
 #!/bin/bash
 
-exit 1
-
 set -e
 
 TEMP_DIR="/tmp"