internal static IObservable <TSource> TraceRX <TSource>(this IObservable <TSource> source,
                                                         Func <TSource, string> messageFactory        = null, string name = null, Action <string> traceAction = null,
                                                         Func <Exception, string> errorMessageFactory = null,
                                                         ObservableTraceStrategy traceStrategy        = ObservableTraceStrategy.OnNextOrOnError,
                                                         [CallerMemberName] string memberName         = "", [CallerFilePath] string sourceFilePath = "",
                                                         [CallerLineNumber] int sourceLineNumber      = 0)
 => source.Trace(name, ReactiveModule.TraceSource, messageFactory, errorMessageFactory, traceAction, traceStrategy, memberName, sourceFilePath, sourceLineNumber);
        private void Persist_Only(ObservableTraceStrategy strategy)
        {
            using var application = Platform.Win.NewApplication <ReactiveLoggerModule>();
            application.WhenModelChanged().FirstAsync()
            .Select(_ => {
                var logger = application.Model.ToReactiveModule <IModelReactiveModuleLogger>().ReactiveLogger;
                logger.TraceSources[nameof(ReactiveModule)].Level = SourceLevels.Verbose;
                logger.TraceSources.PersistStrategy = strategy;
                return(Unit.Default);
            }).Subscribe();
            application.AddModule <ReactiveLoggerModule>(typeof(RL));
            application.Logon();
            var objectSpace = application.CreateObjectSpace();

            objectSpace.Delete(objectSpace.GetObjectsQuery <TraceEvent>().ToArray());
            objectSpace.CommitChanges();


            var testObserver = application.WhenObjectSpaceCreated()
                               .Do(_ => {
                if (strategy == ObservableTraceStrategy.OnError)
                {
                    throw new NotImplementedException();
                }
            }).FirstAsync().Test();
            var eventObserver = application.WhenTraceEvent(rxAction: EnumsNET.Enums.Parse <RXAction>(strategy.ToString())).FirstAsync().Test();

            application.CreateObjectSpace();
            testObserver.AwaitDone(Timeout);
            eventObserver.AwaitDone(Timeout);

            objectSpace = application.CreateObjectSpace();
            objectSpace.GetObjectsQuery <TraceEvent>().FirstOrDefault(_ => _.RXAction != RXAction.OnNext).ShouldBeNull();
        }
Exemple #3
0
 internal static IObservable <TSource> TraceHideToolBarModule <TSource>(this IObservable <TSource> source, string name = null,
                                                                        Action <string> traceAction             = null,
                                                                        ObservableTraceStrategy traceStrategy   = ObservableTraceStrategy.All,
                                                                        [CallerMemberName] string memberName    = "",
                                                                        [CallerFilePath] string sourceFilePath  = "",
                                                                        [CallerLineNumber] int sourceLineNumber = 0)
 {
     return(source.Trace(name, HideToolBarModule.TraceSource, traceAction, traceStrategy, memberName, sourceFilePath, sourceLineNumber));
 }
        public static IObservable <TSource> Trace <TSource>(this IObservable <TSource> source, string name = null, TraceSource traceSource = null,
                                                            Action <string> traceAction             = null,
                                                            ObservableTraceStrategy traceStrategy   = ObservableTraceStrategy.All,
                                                            [CallerMemberName] string memberName    = "",
                                                            [CallerFilePath] string sourceFilePath  = "",
                                                            [CallerLineNumber] int sourceLineNumber = 0)
        {
            if (traceSource?.Switch.Level == SourceLevels.Off)
            {
                return(source);
            }

            return(Observable.Create <TSource>(observer => {
                void Action(string m, object v, Action <string> ta)
                {
                    if (v != null)
                    {
                        v = CalculateValue(v);
                    }
                    ta($"{name}.{Path.GetFileNameWithoutExtension(sourceFilePath)}.{memberName}({sourceLineNumber}): {m}({v})".TrimStart('.'));
                }

                if (traceStrategy == ObservableTraceStrategy.All)
                {
                    Action("Subscribe", "", traceAction.TraceInformation(traceSource));
                }
                var disposable = source.Subscribe(
                    v => {
                    if (traceStrategy != ObservableTraceStrategy.None)
                    {
                        Action("OnNext", v, traceAction.TraceInformation(traceSource));
                    }
                    observer.OnNext(v);
                },
                    e => {
                    Action("OnError", e.GetAllMessages(), traceAction.TraceError(traceSource));
                    observer.OnError(e);
                },
                    () => {
                    if (traceStrategy == ObservableTraceStrategy.All)
                    {
                        Action("OnCompleted", "", traceAction.TraceInformation(traceSource));
                    }
                    observer.OnCompleted();
                });
                return () => {
                    if (traceStrategy == ObservableTraceStrategy.All)
                    {
                        Action("Dispose", "", traceAction.TraceInformation(traceSource));
                    }
                    disposable.Dispose();
                };
            }));
        }
 internal static IObservable <TSource> TracePositionInListView <TSource>(this IObservable <TSource> source, Func <TSource, string> messageFactory = null, string name = null, Action <string> traceAction = null,
                                                                         Func <Exception, string> errorMessageFactory = null, ObservableTraceStrategy traceStrategy   = ObservableTraceStrategy.All,
                                                                         [CallerMemberName] string memberName         = "", [CallerFilePath] string sourceFilePath    = "", [CallerLineNumber] int sourceLineNumber = 0)
 => source.Trace(name, PositionInListViewModule.TraceSource, messageFactory, errorMessageFactory, traceAction, traceStrategy, memberName);
 internal static IObservable <TSource> TraceModelMapper <TSource>(this IObservable <TSource> source, Func <TSource, TSource> traceSelector = null, string name = null,
                                                                  Action <string> traceAction             = null, ObservableTraceStrategy traceStrategy = ObservableTraceStrategy.All,
                                                                  [CallerMemberName] string memberName    = "", [CallerFilePath] string sourceFilePath  = "",
                                                                  [CallerLineNumber] int sourceLineNumber = 0)
 {
     traceSelector = traceSelector ?? (_ => _);
     return(source.SelectMany(_ => {
         return traceSelector(_).AsObservable().Trace(name, ModelMapperModule.TraceSource, traceAction, traceStrategy,
                                                      memberName, sourceFilePath,
                                                      sourceLineNumber).Select(__ => _);
     }));
 }
 public void Persist_Only_OnError(ObservableTraceStrategy strategy) => Persist_Only(strategy);
Exemple #8
0
 public static IObservable <TSource> Trace <TSource>(this IObservable <TSource> source, string name = null, TraceSource traceSource                      = null,
                                                     Func <TSource, string> messageFactory          = null, Func <Exception, string> errorMessageFactory = null, Action <string> traceAction = null,
                                                     ObservableTraceStrategy traceStrategy          = ObservableTraceStrategy.All,
                                                     [CallerMemberName] string memberName           = "",
                                                     [CallerFilePath] string sourceFilePath         = "",
                                                     [CallerLineNumber] int sourceLineNumber        = 0) => Observable.Create <TSource>(observer => {