Bladeren bron

works on TaskExecuteProvider (dummy), not completed

Dalibor Votruba 2 jaren geleden
bovenliggende
commit
4d0b26e50e

+ 26 - 0
Workbench/Processor/Task/ExecuteProvider/DummyExecuteProvider.cs

@@ -0,0 +1,26 @@
+using Quadarax.Foundation.Core.Data;
+
+namespace Quadarax.Foundation.Core.Business.Processor.Task.ExecuteProvider
+{
+    public class DummyExecuteProvider : TaskExecuteProvider
+    {
+        #region *** Constants ***
+        public const string EP_DMY_DURATION = "duration";
+        public const string EP_DMY_RESULT = "result";
+        public const string EP_DMY_ERROR = "error-emit";
+        #endregion  
+
+
+        #region *** Overrides ***
+        protected override void OnExecute(ITaskIdentifier taskIdentifier, ITypedArgument[] arguments, ITaskExecuteResult result)
+        {
+            throw new NotImplementedException();
+        }
+
+        protected override void OnValidateArguments(ITypedArgument[] arguments)
+        {
+            throw new NotImplementedException();
+        }
+        #endregion
+    }
+}

+ 9 - 0
Workbench/Processor/Task/ExecuteProvider/ITaskExecuteProvider.cs

@@ -0,0 +1,9 @@
+using Quadarax.Foundation.Core.Data;
+
+namespace Quadarax.Foundation.Core.Business.Processor.Task.ExecuteProvider
+{
+    internal interface ITaskExecuteProvider
+    {
+        ITaskExecuteResult Execute(ITaskIdentifier taskIdentifier, ITypedArgument[] arguments);
+    }
+}

+ 9 - 0
Workbench/Processor/Task/ExecuteProvider/ITaskExecuteResult.cs

@@ -0,0 +1,9 @@
+using Quadarax.Foundation.Core.Data;
+
+namespace Quadarax.Foundation.Core.Business.Processor.Task.ExecuteProvider
+{
+    public interface ITaskExecuteResult : IResult
+    {
+        TimeSpan ExecutionTime { get; }
+    }
+}

+ 76 - 0
Workbench/Processor/Task/ExecuteProvider/TaskExecuteProvider.cs

@@ -0,0 +1,76 @@
+using Quadarax.Foundation.Core.Data;
+using Quadarax.Foundation.Core.Logging;
+using Quadarax.Foundation.Core.Value.Extensions;
+
+namespace Quadarax.Foundation.Core.Business.Processor.Task.ExecuteProvider
+{
+    public abstract class TaskExecuteProvider : ITaskExecuteProvider
+    {
+        #region *** Properties ***
+        protected ILog Log => _log;
+        #endregion
+
+        #region *** Private fields ***
+        private ILog _log;
+        #endregion
+
+        #region *** Constructors ***
+        protected TaskExecuteProvider()
+        {
+            _log = new ConsoleLogger().GetLogger(GetType());
+        }
+        #endregion
+
+        public ITaskExecuteResult Execute(ITaskIdentifier taskIdentifier, ITypedArgument[] arguments)
+        {
+            Log.Log(LogSeverityEnum.Debug, $"[{taskIdentifier}] Start executing task '{GetType().Name}' ...");
+            var start = DateTime.Now;
+            var duration = TimeSpan.Zero;
+            var result = new TaskExecuteResult(TimeSpan.Zero);
+            try
+            {
+                OnValidateArguments(arguments);
+                OnExecute(taskIdentifier, arguments, result);
+            }
+            catch (Exception e)
+            {
+                Log.Log(LogSeverityEnum.Error, $"[{taskIdentifier}] Error executing task '{GetType().Name}' : {e.Message}", e);
+                result.AddError(new Error(e));
+                result.SetSuccess(false);
+            }
+            finally
+            {
+                duration = DateTime.Now.Subtract(start);
+                Log.Log(LogSeverityEnum.Debug,
+                    $"[{taskIdentifier}] Finished executing task @{DateTime.Now.Subtract(start).ToReadableString()}");
+            }
+            result.ExecutionTime = duration;
+            return result;
+        }
+
+        protected abstract void OnExecute(ITaskIdentifier taskIdentifier, ITypedArgument[] arguments,
+            ITaskExecuteResult result);
+        protected abstract void OnValidateArguments(ITypedArgument[] arguments);
+
+
+        #region *** Nested classes ***
+        private class TaskExecuteResult : Result, ITaskExecuteResult
+        {
+            #region *** Properties ***
+            public TimeSpan ExecutionTime { get; set; }
+            #endregion
+
+            #region *** Constructors ***
+            public TaskExecuteResult()
+            {
+
+            }
+            public TaskExecuteResult(TimeSpan executionTime)
+            {
+                ExecutionTime = executionTime;
+            }
+            #endregion
+        }
+        #endregion
+    }
+}

+ 2 - 2
Workbench/Processor/Task/TaskExecuteProviderFactory.cs → Workbench/Processor/Task/ExecuteProvider/TaskExecuteProviderFactory.cs

@@ -2,7 +2,7 @@
 using Quadarax.Foundation.Core.Object;
 using Quadarax.Foundation.Core.Reflection;
 
-namespace Quadarax.Foundation.Core.Business.Processor.Task
+namespace Quadarax.Foundation.Core.Business.Processor.Task.ExecuteProvider
 {
     internal class TaskExecuteProviderFactory
     {
@@ -16,7 +16,7 @@ namespace Quadarax.Foundation.Core.Business.Processor.Task
         {
             var type = TypeUtils.GetRemoteType(providerClass);
             if (type == null) throw new Exception($"Cannot find type {providerClass}");
-            
+
             return (ITaskExecuteProvider)Activator.CreateInstance(type, arguments);
         }
     }

+ 0 - 9
Workbench/Processor/Task/ITaskExecuteProvider.cs

@@ -1,9 +0,0 @@
-using Quadarax.Foundation.Core.Object;
-
-namespace Quadarax.Foundation.Core.Business.Processor.Task
-{
-    internal interface ITaskExecuteProvider
-    {
-        IResult Execute(ITypedArgument[] arguments);
-    }
-}

+ 0 - 12
Workbench/Processor/Task/TaskExecuteProvider.cs

@@ -1,12 +0,0 @@
-using Quadarax.Foundation.Core.Object;
-
-namespace Quadarax.Foundation.Core.Business.Processor.Task
-{
-    public abstract class TaskExecuteProvider : ITaskExecuteProvider
-    {
-        public IResult Execute(ITypedArgument[] arguments)
-        {
-            throw new NotImplementedException();
-        }
-    }
-}