YieldedProvider[] LoadYieldedProviders()             // this method is run in model thread
            {
                trace.Info("Loading yielded providers");
                YieldedProvider[] providersToYield;
                if (cancellation.IsCancellationRequested)
                {
                    providersToYield = new YieldedProvider[0];
                }
                else if (yieldedProviders.Count > 1)
                {
                    bool[] selection;
                    if ((options & PreprocessingOptions.SkipLogsSelectionDialog) != 0)
                    {
                        selection = Enumerable.Repeat(true, yieldedProviders.Count).ToArray();
                    }
                    else
                    {
                        ((IPreprocessingStepCallback)this).SetStepDescription("Waiting user input");
                        selection = userRequests.SelectItems("Select logs to load",
                                                             yieldedProviders.Select(p => string.Format(
                                                                                         "{1}\\{2}: {0}", p.DisplayName, p.Factory.CompanyName, p.Factory.FormatName)).ToArray());
                    }
                    providersToYield = yieldedProviders.Zip(Enumerable.Range(0, yieldedProviders.Count),
                                                            (p, i) => selection[i] ? p : new YieldedProvider()).Where(p => p.Factory != null).ToArray();
                }
                else
                {
                    providersToYield = yieldedProviders.ToArray();
                    if (yieldedProviders.Count == 0 && failure == null && childPreprocessings.Count == 0 && (options & PreprocessingOptions.SkipIneffectivePreprocessingMessage) == 0)
                    {
                        userRequests.NotifyUserAboutIneffectivePreprocessing(displayName);
                    }
                }
                var failedProviders = new List <string>();

                foreach (var provider in providersToYield)
                {
                    try
                    {
                        providerYieldedCallback(provider);
                    }
                    catch (Exception e)
                    {
                        failedProviders.Add(provider.Factory.GetUserFriendlyConnectionName(provider.ConnectionParams));
                        trace.Error(e, "Failed to load from {0} from {1}", provider.Factory.FormatName, provider.ConnectionParams);
                    }
                }
                if (failedProviders.Count > 0)
                {
                    userRequests.NotifyUserAboutPreprocessingFailure(displayName,
                                                                     "Failed to handle " + string.Join(", ", failedProviders));
                }
                return(providersToYield);
            }
            public LogSourcePreprocessing(
                LogSourcesPreprocessingManager owner,
                IPreprocessingUserRequests userRequests,
                Action <YieldedProvider> providerYieldedCallback,
                RecentLogEntry recentLogEntry,
                PreprocessingOptions options
                ) :
                this(owner, userRequests, providerYieldedCallback)
            {
                this.options = options;
                preprocLogic = async() =>
                {
                    IConnectionParams            preprocessedConnectParams = null;
                    IFileBasedLogProviderFactory fileBasedFactory          = recentLogEntry.Factory as IFileBasedLogProviderFactory;
                    bool interrupted = false;
                    if (fileBasedFactory != null)
                    {
                        using (var perfop = new Profiling.Operation(trace, recentLogEntry.Factory.GetUserFriendlyConnectionName(recentLogEntry.ConnectionParams)))
                        {
                            PreprocessingStepParams currentParams = null;
                            foreach (var loadedStep in LoadStepsFromConnectionParams(recentLogEntry.ConnectionParams))
                            {
                                currentParams = await ProcessLoadedStep(loadedStep, currentParams).ConfigureAwait(continueOnCapturedContext: !isLongRunning);

                                perfop.Milestone(string.Format("completed {0} {1}", loadedStep.Action, loadedStep.Param));
                                if (currentParams == null)
                                {
                                    interrupted = true;
                                    break;
                                }
                                currentDescription = genericProcessingDescription;
                            }
                            if (currentParams != null)
                            {
                                preprocessedConnectParams = fileBasedFactory.CreateParams(currentParams.Uri);
                                currentParams.DumpToConnectionParams(preprocessedConnectParams);
                            }
                        }
                    }
                    if (!interrupted)
                    {
                        var provider = new YieldedProvider(recentLogEntry.Factory, preprocessedConnectParams ?? recentLogEntry.ConnectionParams, "",
                                                           (this.options & PreprocessingOptions.MakeLogHidden) != 0);
                        ((IPreprocessingStepCallback)this).YieldLogProvider(provider);
                    }
                };
            }
Esempio n. 3
0
            async Task <YieldedProvider[]> LoadYieldedProviders()            // this method is run in model thread
            {
                trace.Info("Loading yielded providers");
                YieldedProvider[] providersToYield;
                if (cancellation.IsCancellationRequested)
                {
                    providersToYield = new YieldedProvider[0];
                }
                else
                {
                    var postponeTasks = new List <Task>();
                    var eventArg      = new LogSourcePreprocessingWillYieldEventArg(
                        this, yieldedProviders.AsReadOnly(), postponeTasks);
                    owner?.PreprocessingWillYieldProviders?.Invoke(owner, eventArg);
                    if (postponeTasks.Count > 0)
                    {
                        ((IPreprocessingStepCallback)this).SetStepDescription("Waiting");
                        await Task.WhenAll(postponeTasks);
                    }
                    var selection = Enumerable.Range(0, yieldedProviders.Count).Select(eventArg.IsAllowed).ToArray();
                    providersToYield = yieldedProviders.Zip(Enumerable.Range(0, yieldedProviders.Count),
                                                            (p, i) => selection[i] ? p : new YieldedProvider()).Where(p => p.Factory != null).ToArray();
                }
                var failedProviders = new List <YieldedProvider>();

                foreach (var provider in providersToYield)
                {
                    try
                    {
                        providerYieldedCallback(provider);
                    }
                    catch (Exception e)
                    {
                        failedProviders.Add(provider);
                        trace.Error(e, "Failed to load from {0} from {1}", provider.Factory.FormatName, provider.ConnectionParams);
                    }
                }
                if (failedProviders.Count > 0)
                {
                    owner.PreprocessingYieldFailed?.Invoke(owner,
                                                           new LogSourcePreprocessingFailedEventArg(this, failedProviders.AsReadOnly()));
                }
                return(providersToYield);
            }
Esempio n. 4
0
 void IPreprocessingStepCallback.YieldLogProvider(YieldedProvider provider)
 {
     provider.ConnectionParams = SanitizePreprocessingSteps(provider.ConnectionParams);
     yieldedProviders.Add(provider);
 }