コード例 #1
0
 /// <summary>
 /// Explicitely instanciation of event argument.
 /// </summary>
 /// <param name="percentage">The percetange</param>
 /// <param name="taskName">The task name</param>
 /// <param name="state">The state</param>
 /// <param name="reason">The action type</param>
 internal NodeProgressEventArgs(LogReason reason, int percentage, string taskName = null, object state = null)
 {
     Percentage = Math.Max(0, Math.Min(100, percentage));
     TaskName   = taskName;
     State      = state;
     Reason     = reason;
 }
コード例 #2
0
 /// <summary>
 /// Wrapping an internal event reference.
 /// </summary>
 /// <param name="state">The source state</param>
 /// <param name="taskName">The task name</param>
 /// <param name="reason">The action type</param>
 internal NodeProgressEventArgs(LogReason reason, ProgressStateToken state, string taskName = null)
 {
     InternalState = state;
     TaskName      = $"{taskName ?? state?.StateObject}";
     State         = state?.StateObject;
     Percentage    = state?.Percentage ?? 0;
     Reason        = reason;
 }
コード例 #3
0
ファイル: LogMessage.cs プロジェクト: bekraft/BitubTRexDynamo
        internal LogMessage(string source, LogSeverity severity, LogReason reason, string template, params object[] args) : this()
        {
            Source   = source;
            Severity = severity;
            Reason   = reason;

            messageTemplate = template;
            this.args       = args;
        }
コード例 #4
0
 public OnLogHandlerArgs(string text, LogReason reason, OutputLevel outputLevel = OutputLevel.INFO)
 {
     Text        = text;
     Reason      = reason;
     OutputLevel = outputLevel;
 }
コード例 #5
0
 /// <summary>
 /// Notifies all sinks on progress end.
 /// </summary>
 /// <param name="action">The logging action happened</param>
 /// <param name="isCanceled">Whether the progress was cancelled</param>
 /// <param name="isBroken">Whether the progress was broken</param>
 internal protected void NotifyOnProgressEnded(LogReason action, bool isCanceled, bool isBroken)
 {
     OnProgressEnded(new NodeProgressEndEventArgs(action, Name, isCanceled, isBroken));
 }
コード例 #6
0
 /// <summary>
 /// Notifies all sinks on progress change.
 /// </summary>
 /// <param name="action">The logging action happened</param>
 /// <param name="percentage">The current percentage</param>
 /// <param name="stateObject">The current state object</param>
 internal protected void NotifyOnProgressChanged(LogReason action, int percentage, object stateObject)
 {
     OnProgressChanged(new NodeProgressEventArgs(action, percentage, Name, stateObject));
 }
コード例 #7
0
 /// <summary>
 /// Manually notifying on finish.
 /// </summary>
 /// <param name="finishAction">The finishing action.</param>
 /// <param name="isBroken">Whether the finish is reached by error</param>
 internal protected void OnProgressEnded(LogReason finishAction, bool isBroken)
 {
     OnProgressEnded(new NodeProgressEndEventArgs(finishAction, Name, false, isBroken));
 }
コード例 #8
0
 /// <summary>
 /// New progress end by giving explicit details.
 /// </summary>
 /// <param name="taskName">Taskname</param>
 /// <param name="isCanceled">Cancellation flag</param>
 /// <param name="isBroken">Broken flag</param>
 /// <param name="reason">The action type</param>
 /// <param name="stateObject">The end state object</param>
 internal NodeProgressEndEventArgs(LogReason reason, string taskName, object stateObject = null, bool isCanceled = false, bool isBroken = false)
     : base(reason, 100, taskName, stateObject)
 {
     IsCanceled = isCanceled;
     IsBroken   = isBroken;
 }
コード例 #9
0
 /// <summary>
 /// New progress end by internal state and task name.
 /// </summary>
 /// <param name="endState">The internal state</param>
 /// <param name="taskName">The task name</param>
 /// <param name="reason">The log reason type</param>
 internal NodeProgressEndEventArgs(LogReason reason, ProgressStateToken endState, string taskName = null)
     : base(reason, endState, taskName)
 {
     IsCanceled = endState?.State.HasFlag(ProgressTokenState.IsCanceled) ?? false;
     IsBroken   = endState?.State.HasFlag(ProgressTokenState.IsBroken) ?? false;
 }
コード例 #10
0
        public static IfcModel BySourceAndTransform(IfcModel source, IfcTransform transform, string nameAddon, object objFilterMask)
        {
            if (null == source)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (null == transform)
            {
                throw new ArgumentNullException(nameof(transform));
            }

            if (null == nameAddon)
            {
                nameAddon = transform.Mark;
            }

            LogReason filterMask = DynamicArgumentDelegation.TryCastEnumOrDefault(objFilterMask, LogReason.Any);

            if (null == transform.CancellationSource)
            {
                transform.CancellationSource = new CancellationTokenSource();
            }

            return(IfcStore.ByTransform(source, (model, node) =>
            {
                log.LogInformation("Starting '{1}' ({0}) on {2} ...", node.GetHashCode(), transform.transformDelegate.Name, node.Name);
                try
                {
                    using (var task = transform.transformDelegate.Run(model, node.CreateProgressMonitor(LogReason.Transformed)))
                    {
                        task.Wait(transform.TimeOutMillis, transform.CancellationSource.Token);

                        log.LogInformation("Finalized '{1}' ({0}) on {2}.", node.GetHashCode(), transform.transformDelegate.Name, node.Name);

                        if (task.IsCompleted)
                        {
                            if (node is ProgressingTask np)
                            {
                                np.OnProgressEnded(LogReason.Changed, false);
                            }

                            using (var result = task.Result)
                            {
                                switch (result.ResultCode)
                                {
                                case TransformResult.Code.Finished:
                                    var name = $"{transform.transformDelegate.Name}({node.Name})";
                                    node.OnActionLogged(TransformLogToMessage(name, result.Log, filterMask).ToArray());
                                    return result.Target;

                                case TransformResult.Code.Canceled:
                                    node.OnActionLogged(LogMessage.BySeverityAndMessage(
                                                            node.Name, LogSeverity.Error, LogReason.Any, "Canceled by user request ({0}).", node.Name));
                                    break;

                                case TransformResult.Code.ExitWithError:
                                    node.OnActionLogged(LogMessage.BySeverityAndMessage(
                                                            node.Name, LogSeverity.Error, LogReason.Any, "Caught error ({0}): {1}", node.Name, result.Cause));
                                    break;
                                }
                            }
                        }
                        else
                        {
                            if (node is ProgressingTask np)
                            {
                                np.OnProgressEnded(LogReason.Changed, true);
                            }

                            node.OnActionLogged(LogMessage.BySeverityAndMessage(
                                                    node.Name, LogSeverity.Error, LogReason.Changed, $"Task incompletely terminated (Status {task.Status})."));
                        }
                        return null;
                    }
                }
                catch (Exception thrownOnExec)
                {
                    log.LogError("{0} '{1}'\n{2}", thrownOnExec, thrownOnExec.Message, thrownOnExec.StackTrace);
                    throw new Exception("Exception while executing task");
                }
            }, nameAddon));
        }
コード例 #11
0
 private static IEnumerable <LogMessage> TransformLogToMessage(string storeName, IEnumerable <TransformLogEntry> logEntries, LogReason filter = LogReason.Any)
 {
     foreach (var entry in logEntries)
     {
         var action = TransformActionToActionType(entry.performed);
         if (LogReason.None != (filter & action))
         {
             yield return(LogMessage.BySeverityAndMessage(
                              storeName,
                              LogSeverity.Info,
                              action, "#{0} {1}",
                              entry.handle.EntityLabel.ToString() ?? "(not set)",
                              entry.handle.EntityExpressType.Name ?? "(type unknown)"));
         }
     }
 }