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"