예제 #1
0
        public void SetUp()
        {
            _settings       = new ApplicationSettings("adwad");
            _bookmarks      = new Bookmarks("aawdwa");
            _dispatcher     = new ManualDispatcher();
            _scheduler      = new ManualTaskScheduler();
            _logFileFactory = new PluginLogFileFactory(_scheduler);
            _filesystem     = new InMemoryFilesystem();
            _dataSources    = new DataSources(_logFileFactory, _scheduler, _filesystem, _settings.DataSources, _bookmarks);
            _quickFilters   = new QuickFilters(_settings.QuickFilters);
            _actionCenter   = new ActionCenter();
            _updater        = new Mock <IAutoUpdater>();

            _services = new ServiceContainer();
            _services.RegisterInstance <ITaskScheduler>(_scheduler);
            _services.RegisterInstance <IDispatcher>(_dispatcher);
            _services.RegisterInstance <IPluginLoader>(new PluginRegistry());
            _services.RegisterInstance <IHighlighters>(new HighlighterCollection());
            _services.RegisterInstance <INavigationService>(new NavigationService());

            _mainWindow = new MainWindowViewModel(_services,
                                                  _settings,
                                                  _dataSources,
                                                  _quickFilters,
                                                  _actionCenter,
                                                  _updater.Object);
        }
예제 #2
0
 public void SetUp()
 {
     _settings       = new Tailviewer.Settings.DataSources();
     _scheduler      = new ManualTaskScheduler();
     _logFileFactory = new PluginLogFileFactory(_scheduler);
     _dataSources    = new DataSources(_logFileFactory, _scheduler, _settings);
     _actionCenter   = new Mock <IActionCenter>();
 }
예제 #3
0
 public void SetUp()
 {
     _scheduler      = new DefaultTaskScheduler();
     _logFileFactory = new PluginLogFileFactory(_scheduler);
     _settings       = new DataSource(TextLogFileAcceptanceTest.File20Mb)
     {
         Id = DataSourceId.CreateNew()
     };
     _dataSource = new SingleDataSource(_logFileFactory, _scheduler, _settings, TimeSpan.FromMilliseconds(100));
 }
예제 #4
0
 public void SetUp()
 {
     _taskScheduler  = new ManualTaskScheduler();
     _logFileFactory = new PluginLogFileFactory(_taskScheduler);
     _filesystem     = new InMemoryFilesystem();
     _settings       = new DataSource
     {
         Id = DataSourceId.CreateNew(),
         MergedDataSourceDisplayMode = DataSourceDisplayMode.CharacterCode
     };
 }
        public void SetUp()
        {
            _settings  = new Tailviewer.Settings.DataSourceSettings();
            _bookmarks = new Mock <IBookmarks>();

            _scheduler      = new ManualTaskScheduler();
            _logFileFactory = new PluginLogFileFactory(_scheduler);
            _filesystem     = new InMemoryFilesystem();
            _dataSources    = new DataSources(_logFileFactory, _scheduler, _filesystem, _settings, _bookmarks.Object);
            _actionCenter   = new Mock <IActionCenter>();
        }
예제 #6
0
 public void SetUp()
 {
     _taskScheduler  = new ManualTaskScheduler();
     _logFileFactory = new PluginLogFileFactory(_taskScheduler);
     _settings       = new DataSource
     {
         Id = DataSourceId.CreateNew(),
         MergedDataSourceDisplayMode = DataSourceDisplayMode.CharacterCode
     };
     _merged = new MergedDataSource(_taskScheduler, _settings, TimeSpan.Zero)
     {
         IsSingleLine = true
     };
 }
예제 #7
0
        public void TestOpen2()
        {
            var fname   = @"D:\some awesome log file.db";
            var plugin  = new Mock <IFileFormatPlugin>();
            var logFile = new Mock <ILogFile>();

            plugin.Setup(x => x.SupportedExtensions).Returns(new[] { ".db" });
            plugin.Setup(x => x.Open(It.IsAny <IServiceContainer>(), It.Is <string>(y => y == fname)))
            .Returns(() => logFile.Object);

            var factory       = new PluginLogFileFactory(_scheduler, plugin.Object);
            var actualLogFile = factory.Open(fname, out _);

            actualLogFile.Should().BeOfType <NoThrowLogFile>("because PluginLogFileFactory should protect us from buggy plugin implementations");

            actualLogFile.GetLine(42);
            logFile.Verify(x => x.GetLine(It.Is <int>(y => y == 42)), Times.Once,
                           "because even though we've been given a proxy, it should nevertheless forward all calls to the actual implementation");
        }
예제 #8
0
        public void SetUp()
        {
            _scheduler      = new ManualTaskScheduler();
            _logFileFactory = new PluginLogFileFactory(_scheduler);

            _logFile   = new Mock <ILogFile>();
            _entries   = new List <LogLine>();
            _listeners = new LogFileListenerCollection(_logFile.Object);
            _logFile.Setup(x => x.AddListener(It.IsAny <ILogFileListener>(), It.IsAny <TimeSpan>(), It.IsAny <int>()))
            .Callback((ILogFileListener listener, TimeSpan maximumWaitTime, int maximumLineCount) => _listeners.AddListener(listener, maximumWaitTime, maximumLineCount));
            _logFile.Setup(x => x.RemoveListener(It.IsAny <ILogFileListener>()))
            .Callback((ILogFileListener listener) => _listeners.RemoveListener(listener));
            _logFile.Setup(x => x.GetSection(It.IsAny <LogFileSection>(), It.IsAny <LogLine[]>()))
            .Callback(
                (LogFileSection section, LogLine[] entries) =>
                _entries.CopyTo((int)section.Index, entries, 0, section.Count));
            _logFile.Setup(x => x.GetLine(It.IsAny <int>())).Returns((int index) => _entries[index]);
            _logFile.Setup(x => x.Count).Returns(() => _entries.Count);
            _logFile.Setup(x => x.EndOfSourceReached).Returns(true);
        }
예제 #9
0
        public void TestOpenDontMatchRegex()
        {
            var plugin  = new Mock <IFileFormatPlugin2>();
            var logFile = new Mock <ILogFile>();

            plugin.Setup(x => x.SupportedFileNames).Returns(new[]
            {
                new Regex("txt"),
                new Regex("sfa_[^\\.]*\\.log")
            });
            plugin.Setup(x => x.SupportedExtensions).Returns(new[] { ".db" });
            plugin.Setup(x => x.Open(It.IsAny <IServiceContainer>(), It.IsAny <string>()))
            .Returns(() => logFile.Object);

            var factory  = new PluginLogFileFactory(_scheduler, plugin.Object);
            var filename = @"C:\sfa_12345.log\.db\txt\foo.log";

            factory.Open(filename, out _);
            plugin.Verify(x => x.Open(It.IsAny <IServiceContainer>(), filename), Times.Never,
                          "because neither regex nor file extension match (only the filename should be matched, not the path) and therefore the plugin may not have been used");
        }
예제 #10
0
        public void SetUp()
        {
            _settings        = new ApplicationSettings("adwad");
            _dispatcher      = new ManualDispatcher();
            _scheduler       = new ManualTaskScheduler();
            _logFileFactory  = new PluginLogFileFactory(_scheduler);
            _dataSources     = new DataSources(_logFileFactory, _scheduler, _settings.DataSources);
            _quickFilters    = new QuickFilters(_settings.QuickFilters);
            _actionCenter    = new ActionCenter();
            _updater         = new Mock <IAutoUpdater>();
            _analysisStorage = new Mock <IAnalysisStorage>();

            _mainWindow = new MainWindowViewModel(_settings,
                                                  _dataSources,
                                                  _quickFilters,
                                                  _actionCenter,
                                                  _updater.Object,
                                                  _scheduler,
                                                  _analysisStorage.Object,
                                                  _dispatcher,
                                                  new PluginRegistry());
        }
예제 #11
0
        public void TestOpenMatchRegex()
        {
            var plugin  = new Mock <IFileFormatPlugin2>();
            var logFile = new Mock <ILogFile>();

            plugin.Setup(x => x.SupportedFileNames).Returns(new[]
            {
                new Regex("txt"),
                new Regex("sfa_[^\\.]*\\.log")
            });
            plugin.Setup(x => x.SupportedExtensions).Returns(new[] { ".db" });
            plugin.Setup(x => x.Open(It.IsAny <IServiceContainer>(), It.IsAny <string>()))
            .Returns(() => logFile.Object);

            var factory       = new PluginLogFileFactory(_scheduler, plugin.Object);
            var filename      = @"C:\logs\sfa_12345.log";
            var actualLogFile = factory.Open(filename, out _);

            plugin.Verify(x => x.Open(It.IsAny <IServiceContainer>(), filename), Times.Once);
            actualLogFile.GetLine(42);
            logFile.Verify(x => x.GetLine(It.Is <int>(y => y == 42)), Times.Once,
                           "because even though we've been given a proxy, it should nevertheless forward all calls to the actual implementation");
        }
예제 #12
0
 public void OneTimeSetUp()
 {
     _scheduler      = new ManualTaskScheduler();
     _logFileFactory = new PluginLogFileFactory(_scheduler);
     _filesystem     = new InMemoryFilesystem();
 }
예제 #13
0
 public void SetUp()
 {
     _scheduler      = new ManualTaskScheduler();
     _logFileFactory = new PluginLogFileFactory(_scheduler);
 }
예제 #14
0
파일: App.cs 프로젝트: radtek/Tailviewer
        private static int StartApplication(SingleApplicationHelper.IMutex mutex, string fileToOpen, Stopwatch stopwatch)
        {
            ApplicationSettings settings = ApplicationSettings.Create();

            settings.Restore(out var neededPatching);

            if (neededPatching)
            {
                // TODO: Save settings right again to complete the upgrade
                //       (maybe we should preserve an old version)
            }

            var bookmarks = Bookmarks.Create();

            bookmarks.Restore();

            var services = new ServiceContainer();

            services.RegisterInstance <ILogFileSettings>(settings.LogFile);

            var actionCenter = new ActionCenter();

            using (var taskScheduler = new DefaultTaskScheduler())
                using (var serialTaskScheduler = new SerialTaskScheduler())
                {
                    services.RegisterInstance <ITaskScheduler>(taskScheduler);
                    services.RegisterInstance <ISerialTaskScheduler>(serialTaskScheduler);
                    var navigationService = new NavigationService();
                    services.RegisterInstance <INavigationService>(navigationService);

                    var filesystem = new Filesystem(taskScheduler);
                    services.RegisterInstance <IFilesystem>(filesystem);

                    using (var pluginArchiveLoader = new PluginArchiveLoader(filesystem, Constants.PluginPath, Constants.DownloadedPluginsPath))
                    {
                        var pluginUpdater = new PluginUpdater(pluginArchiveLoader);
                        services.RegisterInstance <IPluginUpdater>(pluginUpdater);

                        var pluginSystem = CreatePluginSystem(pluginArchiveLoader);
                        services.RegisterInstance <IPluginLoader>(pluginSystem);

                        var logFileFormatMatcher = new LogFileFormatMatcher(services);
                        services.RegisterInstance <ILogFileFormatMatcher>(logFileFormatMatcher);

                        var fileFormatPlugins = pluginSystem.LoadAllOfTypeWithDescription <IFileFormatPlugin>();

                        var logFileFactory = new PluginLogFileFactory(services, fileFormatPlugins);
                        using (var dataSources = new DataSources(logFileFactory, taskScheduler, filesystem, settings.DataSources, bookmarks))
                            using (var updater = new AutoUpdater(actionCenter, settings.AutoUpdate))
                            {
                                if (fileToOpen != null)
                                {
                                    if (File.Exists(fileToOpen))
                                    {
                                        // Not only do we want to add this file to the list of data sources,
                                        // but we also want to select it so the user can view it immediately, regardless
                                        // of what was selected previously.
                                        var dataSource = dataSources.AddFile(fileToOpen);
                                        settings.DataSources.SelectedItem = dataSource.Id;
                                    }
                                    else
                                    {
                                        Log.ErrorFormat("File '{0}' does not exist, won't open it!", fileToOpen);
                                    }
                                }

                                if (settings.AutoUpdate.CheckForUpdates)
                                {
                                    // Our initial check for updates is not due to a user action
                                    // and therefore we don't need to show a notification when the
                                    // application is up-to-date.
                                    updater.CheckForUpdates(addNotificationWhenUpToDate: false);
                                }

                                var quickFilters = new QuickFilters(settings.QuickFilters);
                                var highlighters = new HighlighterCollection();
                                services.RegisterInstance <IHighlighters>(highlighters);

                                actionCenter.Add(Build.Current);
                                actionCenter.Add(Change.Merge(Changelog.MostRecentPatches));
                                var application  = new App();
                                var dispatcher   = Dispatcher.CurrentDispatcher;
                                var uiDispatcher = new UiDispatcher(dispatcher);
                                services.RegisterInstance <IDispatcher>(uiDispatcher);

                                dispatcher.UnhandledException         += actionCenter.ReportUnhandledException;
                                TaskScheduler.UnobservedTaskException += actionCenter.ReportUnhandledException;

                                var windowViewModel = new MainWindowViewModel(services,
                                                                              settings,
                                                                              dataSources,
                                                                              quickFilters,
                                                                              actionCenter,
                                                                              updater);
                                navigationService.MainWindow = windowViewModel;

                                var window = new MainWindow(settings)
                                {
                                    DataContext = windowViewModel
                                };

                                settings.MainWindow.RestoreTo(window);

                                stopwatch.Stop();
                                Log.InfoFormat("Tailviewer started (took {0}ms), showing window...", stopwatch.ElapsedMilliseconds);

                                window.Show();
                                mutex.SetListener(window);

                                return(application.Run());
                            }
                    }
                }
        }
예제 #15
0
        private static int StartInternal(SingleApplicationHelper.IMutex mutex, string[] args)
        {
            InstallExceptionHandlers();
            Log.InfoFormat("Starting tailviewer...");
            Log.InfoFormat("Commandline arguments: {0}", string.Join(" ", args));
            LogEnvironment();

            ApplicationSettings settings = ApplicationSettings.Create();

            settings.Restore(out var neededPatching);

            if (neededPatching)
            {
                // TODO: Save settings right again to complete the upgrade
                //       (maybe we should preserve an old version)
            }

            var actionCenter = new ActionCenter();

            using (var taskScheduler = new DefaultTaskScheduler())
                using (var serialTaskScheduler = new SerialTaskScheduler())
                {
                    var filesystem = new Filesystem(serialTaskScheduler);
                    using (var pluginArchiveLoader = new PluginArchiveLoader(filesystem, Constants.PluginPath))
                    {
                        var pluginSystem = CreatePluginSystem(pluginArchiveLoader);

                        var fileFormatPlugins = pluginSystem.LoadAllOfType <IFileFormatPlugin>();

                        var logFileFactory = new PluginLogFileFactory(taskScheduler, fileFormatPlugins);
                        using (var dataSources = new DataSources(logFileFactory, taskScheduler, settings.DataSources))
                            using (var updater = new AutoUpdater(actionCenter, settings.AutoUpdate))
                                using (var logAnalyserEngine = new LogAnalyserEngine(taskScheduler, pluginSystem))
                                    using (var dataSourceAnalyserEngine = new DataSourceAnalyserEngine(taskScheduler, logAnalyserEngine, pluginSystem))
                                        using (var analysisStorage = new AnalysisStorage(taskScheduler, filesystem, dataSourceAnalyserEngine, CreateTypeFactory(pluginSystem)))
                                        {
                                            var arguments = ArgumentParser.TryParse(args);
                                            if (arguments.FileToOpen != null)
                                            {
                                                if (File.Exists(arguments.FileToOpen))
                                                {
                                                    // Not only do we want to add this file to the list of data sources,
                                                    // but we also want to select it so the user can view it immediately, regardless
                                                    // of what was selected previously.
                                                    var dataSource = dataSources.AddDataSource(arguments.FileToOpen);
                                                    settings.DataSources.SelectedItem = dataSource.Id;
                                                }
                                                else
                                                {
                                                    Log.ErrorFormat("File '{0}' does not exist, won't open it!", arguments.FileToOpen);
                                                }
                                            }

                                            if (settings.AutoUpdate.CheckForUpdates)
                                            {
                                                // Our initial check for updates is not due to a user action
                                                // and therefore we don't need to show a notification when the
                                                // application is up-to-date.
                                                updater.CheckForUpdates(addNotificationWhenUpToDate: false);
                                            }

                                            var quickFilters = new QuickFilters(settings.QuickFilters);
                                            actionCenter.Add(Build.Current);
                                            actionCenter.Add(Change.Merge(Changelog.MostRecentPatches));
                                            var application  = new App();
                                            var dispatcher   = Dispatcher.CurrentDispatcher;
                                            var uiDispatcher = new UiDispatcher(dispatcher);
                                            dispatcher.UnhandledException         += actionCenter.ReportUnhandledException;
                                            TaskScheduler.UnobservedTaskException += actionCenter.ReportUnhandledException;

                                            var window = new MainWindow(settings)
                                            {
                                                DataContext = new MainWindowViewModel(settings,
                                                                                      dataSources,
                                                                                      quickFilters,
                                                                                      actionCenter,
                                                                                      updater,
                                                                                      taskScheduler,
                                                                                      analysisStorage,
                                                                                      uiDispatcher,
                                                                                      pluginSystem)
                                            };

                                            settings.MainWindow.RestoreTo(window);

                                            window.Show();
                                            mutex.SetListener(window);

                                            return(application.Run());
                                        }
                    }
                }
        }