Beispiel #1
0
        public AllPostprocessorsControlHandler(
            IManagerInternal postprocessorsManager,
            ICorrelationManager correlationManager
            )
        {
            this.postprocessorsManager = postprocessorsManager;
            this.getOutputs            = Selectors.Create(
                () => postprocessorsManager.LogSourcePostprocessors,
                () => correlationManager.StateSummary,
                (outputs, correlatorSummary) =>
                outputs.GetAutoPostprocessingCapableOutputs()
                .Union(GetCorrelationOutputs(outputs, correlatorSummary))
                .ToArray()
                );
            this.getControlData = Selectors.Create(
                getOutputs,
                outputs => {
                var relevantPostprocessorExists = outputs.Any();

                return(new ControlData(
                           !relevantPostprocessorExists,
                           "*action Run all postprocessors*",
                           ControlData.StatusColor.Neutral
                           ));
            }
                );
        }
Beispiel #2
0
        public SearchResultMessagesModel(
            ILogSourcesManager logSources,
            ISearchManager searchManager,
            IFiltersFactory filtersFactory
            )
        {
            this.searchManager = searchManager;
            logSources.OnLogSourceColorChanged += (s, e) =>
            {
                OnLogSourceColorChanged?.Invoke(s, e);
            };

            int searchFiltersListVersion = 0;

            searchManager.SearchResultsChanged += (s, e) => ++ searchFiltersListVersion;
            searchManager.SearchResultChanged  += (s, e) => searchFiltersListVersion += ((e.Flags & SearchResultChangeFlag.VisibleChanged) != 0 ? 1 : 0);
            this.getSearchFiltersList           = Selectors.Create(
                () => searchFiltersListVersion,
                _ =>
            {
                var list = filtersFactory.CreateFiltersList(FilterAction.Exclude, FiltersListPurpose.Search);
                foreach (var f in searchManager
                         .Results
                         .Where(r => r.Visible && r.OptionsFilter != null)
                         .Select(r => r.OptionsFilter))
                {
                    list.Insert(list.Items.Count, f.Clone());
                }
                return(list);
            }
                );
        }
        public LoadedMessagesViewModeStrategy(
            ILogSourcesManager logSourcesManager,
            IChangeNotification changeNotification
            )
        {
            this.logSourcesManager  = logSourcesManager;
            this.changeNotification = changeNotification;
            this.rawModeAllowed     = Selectors.Create(
                () => logSourcesManager.VisibleItems,
                sources => sources.Any(s => s.Provider.Factory.ViewOptions.RawViewAllowed)
                );
            this.isRawMode = Selectors.Create(
                rawModeAllowed,
                () => manuallySetRawMode,
                () => logSourcesManager.VisibleItems,
                (allowed, set, sources) =>
            {
                return
                (!allowed ? false :
                 set != null ? set.Value :
                 sources.All(s => s.Provider.Factory.ViewOptions.PreferredView == PreferredViewMode.Raw));
            }
                );

            logSourceRemovedHandler = (s, e) =>
            {
                if (logSourcesManager.Items.Count == 0 && manuallySetRawMode.HasValue)
                {
                    manuallySetRawMode = null;                     // reset automatic mode when last source is gone
                    changeNotification.Post();
                }
            };

            logSourcesManager.OnLogSourceRemoved += logSourceRemovedHandler;
        }
        public PresenterPersistentState(
            Persistence.IStorageManager storageManager,
            string globalStateStorageEntryName,
            string logSourceSpecificStateSectionName,
            IChangeNotification changeNotification,
            Func <ImmutableHashSet <string> > availableTagsSelector,
            Func <IEnumerable <ILogSource> > sourcesSelector
            )
        {
            this.changeNotification        = changeNotification;
            this.stateEntry                = storageManager.GetEntry(globalStateStorageEntryName);
            this.logSourceStateSectionName = logSourceSpecificStateSectionName;
            this.availableTagsSelector     = CreateAvailableTagsSelectorAdapter(availableTagsSelector);
            this.sourcesSelector           = sourcesSelector;

            this.getDefaultPredicate = Selectors.Create(
                this.availableTagsSelector,
                availableTags => TagsPredicate.MakeMatchAnyPredicate(availableTags)
                );

            this.getTagsPredicate = Selectors.Create(
                getDefaultPredicate,
                sourcesSelector,
                () => savedTagsRevision,
                (defaultPredicate, sources, _revision) => LoadPredicate(sources, defaultPredicate, logSourceStateSectionName)
                );
        }
        async void IPresenter.ShowWindow(ILogSource source)
        {
            this.source = source;

            this.annotation = source.Annotation;
            this.timeOffset = source.TimeOffsets.ToString();

            this.getViewState = Selectors.Create(
                () => annotation,
                () => timeOffset,
                () => (source.Visible, source.TrackingEnabled, source.ColorIndex, source.DisplayName),
                () => theme.ThreadColors,
                () => forceUpdateRevision,
                (annotation, timeOffset, sourceProps, themeThreadColors, rev) => MakeViewState(
                    annotation,
                    timeOffset,
                    sourceProps.Visible,
                    sourceProps.TrackingEnabled,
                    sourceProps.ColorIndex,
                    sourceProps.DisplayName,
                    source.Provider,
                    preprocessings,
                    themeThreadColors,
                    source.Threads.Items
                    )
                );

            currentWindow = view.CreateWindow();

            var autoCloseDialog = Updaters.Create(
                () => this.source.IsDisposed,
                disposed =>
            {
                if (disposed)
                {
                    currentWindow.Close();
                }
            }
                );

            using (changeNotification.CreateSubscription(autoCloseDialog))
            {
                try
                {
                    changeNotification.Active = true;
                    await currentWindow.ShowModalDialog();
                }
                finally
                {
                    changeNotification.Active = false;
                    this.getViewState         = () => emptyViewState;
                    currentWindow             = null;
                }
            }
        }
Beispiel #6
0
        void IView.SetViewModel(IViewModel viewModel)
        {
            this.viewModel = viewModel;

            res = new GraphicsResources(
                viewModel,
                Font.FontFamily.Name,
                Font.Size,
                8f,
                6f,
                new LJD.Image(TimelineVisualizerControlResources.UserAction),
                new LJD.Image(TimelineVisualizerControlResources.APICall),
                new LJD.Image(TimelineVisualizerControlResources.TimelineBookmark),
                new LJD.Image(TimelineVisualizerControlResources.FocusedMsgSlaveVert),
                UIUtils.Dpi.ScaleUp(1, 120),
                new LJD.Brush(System.Drawing.SystemColors.Control.ToColor())
                );
            drawing = new ControlDrawing(res);
            var vm = GetUpToDateViewMetrics();

            var rulersPanelHeight = vm.RulersPanelHeight;

            activitiesScrollBar.SmallChange = vm.LineHeight;
            activitiesScrollBar.Top         = rulersPanelHeight;
            quickSearchEditBox.Top          = rulersPanelHeight - quickSearchEditBox.Height;
            panel5.Height = rulersPanelHeight;

            this.changeNotification = viewModel.ChangeNotification;
            var updateNotificationsButton = Updaters.Create(() => viewModel.NotificationsIconVisibile, v => notificationsButton.Visible = v);
            var updateNoContentMessage    = Updaters.Create(() => viewModel.NoContentMessageVisibile, SetNoContentMessageVisibility);
            var updateVertScroller        = Updaters.Create(
                Selectors.Create(() => viewModel.ActivitiesCount, () => activitiesViewPanelSize, (activitiesCount, sz) => new { activitiesCount, sz }),
                key => UpdateActivitiesScroller(key.activitiesCount, key.sz.Value));
            var updateCurrentActivityInfo = Updaters.Create(() => viewModel.CurrentActivity, UpdateCurrentActivityControls);

            this.changeNotificationSubscription = changeNotification.CreateSubscription(() => {
                updateNotificationsButton();
                updateNoContentMessage();
                updateVertScroller();
                updateCurrentActivityInfo();
            });
            this.ParentForm.VisibleChanged += (s, e) =>
            {
                if (this.ParentForm.Visible)
                {
                    viewModel.OnWindowShown();
                }
                else
                {
                    viewModel.OnWindowHidden();
                }
            };
        }
        public PostprocessorsManager(
            ILogSourcesManager logSources,
            Telemetry.ITelemetryCollector telemetry,
            ISynchronizationContext modelSyncContext,
            ISynchronizationContext threadPoolSyncContext,
            IHeartBeatTimer heartbeat,
            Progress.IProgressAggregator progressAggregator,
            Settings.IGlobalSettingsAccessor settingsAccessor,
            IOutputDataDeserializer outputDataDeserializer,
            ITraceSourceFactory traceSourceFactory,
            ILogPartTokenFactories logPartTokenFactories,
            Correlation.ISameNodeDetectionTokenFactories sameNodeDetectionTokenFactories,
            IChangeNotification changeNotification,
            LogMedia.IFileSystem logFileSystem
            )
        {
            this.logSources                      = logSources;
            this.telemetry                       = telemetry;
            this.progressAggregator              = progressAggregator;
            this.settingsAccessor                = settingsAccessor;
            this.modelSyncContext                = modelSyncContext;
            this.threadPoolSyncContext           = threadPoolSyncContext;
            this.heartbeat                       = heartbeat;
            this.outputDataDeserializer          = outputDataDeserializer;
            this.logPartTokenFactories           = logPartTokenFactories;
            this.sameNodeDetectionTokenFactories = sameNodeDetectionTokenFactories;
            this.changeNotification              = changeNotification;
            this.logFileSystem                   = logFileSystem;
            this.tracer  = traceSourceFactory.CreateTraceSource("App", "ppm");
            this.updater = new AsyncInvokeHelper(modelSyncContext, Refresh);

            logSources.OnLogSourceAdded             += (sender, args) => updater.Invoke();
            logSources.OnLogSourceRemoved           += (sender, args) => updater.Invoke();
            logSources.OnLogSourceAnnotationChanged += (sender, args) => updater.Invoke();
            logSources.OnLogSourceStatsChanged      += (object sender, LogSourceStatsEventArgs e) =>
            {
                if ((e.Flags & LogProviderStatsFlag.ContentsEtag) != 0)
                {
                    updater.Invoke();
                }
            };

            this.visiblePostprocessorsOutputs = Selectors.Create(
                () => postprocessorsOutputs,
                () => logSources.Items,
                (outputs, sources) => {
                var sourcesMap = sources.ToLookup(s => s);
                return(ImmutableArray.CreateRange(outputs.Where(output => sourcesMap.Contains(output.LogSource))));
            }
                );

            Refresh();
        }
Beispiel #8
0
 public CorrelatorPostprocessorControlHandler(
     ICorrelationManager correlationManager,
     ITempFilesManager tempFilesManager,
     IShellOpen shellOpen
     )
 {
     this.correlationManager = correlationManager;
     this.tempFilesManager   = tempFilesManager;
     this.shellOpen          = shellOpen;
     this.getControlData     = Selectors.Create(
         () => correlationManager.StateSummary,
         GetCurrentData
         );
 }
Beispiel #9
0
        public Presenter(
            IView view,
            IPluginsManagerInternal pluginsManager,
            IChangeNotification changeNotification,
            AutoUpdate.IAutoUpdater autoUpdater
            )
        {
            this.pluginsManager = pluginsManager;
            this.view           = view;
            this.autoUpdater    = autoUpdater;

            this.changeNotification = changeNotification.CreateChainedChangeNotification();
            this.fetchCancellation  = new CancellationTokenSource();

            this.pluginInstallationRequestsBuilder = pluginsManager.CreatePluginInstallationRequestsBuilder();

            this.listItemsSelector = Selectors.Create(
                () => pluginInstallationRequestsBuilder.InstallationRequests,
                () => pluginsInfo,
                () => selectedPlugin,
                (requests, all, selected) =>
            {
                return(ImmutableArray.CreateRange(all.Select(p => new ListItem(p, requests, selected?.Id))));
            }
                );

            this.selectedPluginDataSelector = Selectors.Create(
                listItemsSelector,
                list =>
            {
                var itemData = list.Select(i => i.MakeSelectedPluginData()).FirstOrDefault(i => i != null);
                return(itemData ?? new SelectedPluginData
                {
                    actionCaption = "Install",
                    actionEnabled = false,
                    caption = "",
                    description = ""
                });
            }
                );

            view.SetViewModel(this);

            this.FetchPlugins();
        }
Beispiel #10
0
        public HighlightBackgroundColorsTable(
            IColorTheme colorTheme
            )
        {
            var numColors = FilterAction.IncludeAndColorizeLast - FilterAction.IncludeAndColorizeFirst + 1;

            if (lightThemeColors.Length != numColors)
            {
                throw new Exception("inconsistent constants");
            }
            colorsSelector = Selectors.Create(
                () => colorTheme.Mode,
                theme => ImmutableArray.CreateRange((
                                                        theme == ColorThemeMode.Light ?
                                                        lightThemeColors
                                  : HSLColorsGenerator.Generate(numHues: numColors, saturation: 0.80, lightness: 0.30)
                                                        ).Select(ColorTableUtils.FromRGB))
                );
        }
Beispiel #11
0
        public HighlightingManager(
            ISearchResultModel searchResultModel,
            Func <MessageTextGetter> displayTextGetterSelector,
            Func <int> viewSizeSelector,
            IFiltersList highlightFilters,
            ISelectionManager selectionManager,
            IWordSelection wordSelection,
            IColorTheme theme,
            RegularExpressions.IRegexFactory regexFactory
            )
        {
            var viewSizeQuantizedSelector = Selectors.Create(
                viewSizeSelector,
                viewSize => (1 + (viewSize / 16)) * 16
                );

            this.getHighlightingHandler = Selectors.Create(
                () => (highlightFilters?.FilteringEnabled, highlightFilters?.Items, highlightFilters?.FiltersVersion),
                displayTextGetterSelector,
                viewSizeQuantizedSelector,
                () => theme.HighlightingColors,
                (filtersData, displayTextGetter, viewSize, hlColors) => filtersData.FilteringEnabled == true ?
                new CachingHighlightingHandler(msg => GetHlHighlightingRanges(msg, filtersData.Items, displayTextGetter, hlColors), ViewSizeToCacheSize(viewSize))
                                        : (IHighlightingHandler) new DummyHandler()
                );
            this.getSearchResultHandler = Selectors.Create(
                () => searchResultModel?.SearchFiltersList,
                displayTextGetterSelector,
                viewSizeQuantizedSelector,
                (filters, displayTextGetter, viewSize) => filters != null ?
                new CachingHighlightingHandler(msg => GetSearchResultsHighlightingRanges(msg, filters, displayTextGetter), ViewSizeToCacheSize(viewSize))
                                        : null
                );
            this.getSelectionHandler = Selectors.Create(
                () => selectionManager.Selection,
                displayTextGetterSelector,
                viewSizeQuantizedSelector,
                (selection, displayTextGetter, viewSize) =>
                MakeSelectionInplaceHighlightingHander(selection, displayTextGetter, wordSelection, ViewSizeToCacheSize(viewSize), regexFactory)
                );
        }
        public CorrelationManager(
            IManagerInternal postprocessingManager,
            Func <Solver.ISolver> solverFactory,
            ISynchronizationContext modelThreadSync,
            ILogSourcesManager logSourcesManager,
            IChangeNotification changeNotification,
            Telemetry.ITelemetryCollector telemetryCollector
            )
        {
            this.postprocessingManager = postprocessingManager;
            this.solverFactory         = solverFactory;
            this.modelThreadSync       = modelThreadSync;
            this.logSourcesManager     = logSourcesManager;
            this.changeNotification    = changeNotification;
            this.telemetryCollector    = telemetryCollector;

            logSourcesManager.OnLogSourceTimeOffsetChanged += (s, e) =>
            {
                ++logSourceTimeOffsetRevision;
                changeNotification.Post();
            };

            this.getOutputs = Selectors.Create(
                () => postprocessingManager.LogSourcePostprocessors,
                outputs => ImmutableArray.CreateRange(
                    outputs.Where(output => output.Postprocessor.Kind == PostprocessorKind.Correlator)
                    )
                );
            this.getStateSummary = Selectors.Create(
                getOutputs,
                () => logConnectionIdToLastRunResult,
                () => lastRunSummary,
                () => logSourceTimeOffsetRevision,
                GetCorrelatorStateSummary
                );
        }