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); } }; }
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); }
void IPreprocessingStepCallback.YieldLogProvider(YieldedProvider provider) { provider.ConnectionParams = SanitizePreprocessingSteps(provider.ConnectionParams); yieldedProviders.Add(provider); }