Esempio n. 1
0
        static async Task Main(string[] args)
        {
            var loggerFactory = LoggerFactory.Create(builder => builder.SetMinimumLevel(LogLevel.Debug).AddConsole());
            var services      = ServiceCollectionFactory.CreateDefaultServiceCollection(loggerFactory);
            var provider      = services.BuildServiceProvider();

            var options = new WatcherOptions()
            {
                DirectoryToWatch             = "D:\\ParserTest",
                FileSearchPattern            = "hello*.cs",
                WorkingDirectoryPath         = "D:\\WorkingDir",
                BackupDirectoryPath          = "D:\\BackupDir",
                ParserName                   = "Parser_One",
                PollingInterval              = 5000,
                DeleteSourceFileAfterParsing = false
            };

            var worker = provider.GetRequiredService <ParserWorker>();

            var parserId = worker.RegisterWriteTimeParser <Logic>(options);

            worker.StartParser(parserId);

            await Task.Delay(60000);

            worker.StopParser(parserId);
        }
        private static IFbWatcher <TModel> CreateWatcher <TModel>()
            where TModel : IModel, new()
        {
            var tableName = typeof(TModel).GetCustomAttribute <DbTransferInfo>()?.MainTableName;

            if (string.IsNullOrWhiteSpace(tableName))
            {
                throw new Exception($"Can't extract table name from: {typeof(TModel)}");
            }

            var triggersFileName = $"{tableName}_TRIGGERS.json";
            var triggersFilePath = Path.Combine(AppSettings.DataDirectoryPath, triggersFileName);

            var options = new WatcherOptions(GetMainDbConnectionString(),
                                             GetTempDbConnectionString());

            var factory = CreateWatcherFactory <TModel>();
            var watcher = factory.CreateWatcher(options);

            var schemeFactory = new SchemeFactory <TModel>(AppConfig.Main.ExternalDbSource,
                                                           AppConfig.Main.ExternalUser, AppConfig.Main.ExternalPassword);

            watcher.AddTriggers(schemeFactory.CreateSchemes(TriggerType.Insert,
                                                            TriggerType.Delete, TriggerType.Update));

            return(watcher);
        }
Esempio n. 3
0
 private void SaveToOptions( WatcherOptions options )
 {
     options.RestartEnabled = cbRestartProcess.Checked;
     options.CopyEnabled = cbCopyFile.Checked;
     options.RestartParameters = tbRestartParameters.Text;
     options.CopyPath = tbCopyPath.Text;
     options.PlaySoundEnabled = cbPlaySound.Checked;
 }
Esempio n. 4
0
 private void LoadFromOptions( WatcherOptions options )
 {
     cbRestartProcess.Checked = options.RestartEnabled;
     cbCopyFile.Checked = options.CopyEnabled;
     tbRestartParameters.Text = options.RestartParameters;
     tbCopyPath.Text = options.CopyPath;
     cbPlaySound.Checked = options.PlaySoundEnabled;
 }
Esempio n. 5
0
 public EtlOptions(ArchiveOptions archiveOptions, EncryptionOptions encryptionOptions, LoggingOptions loggingOptions, MoveOptions moveOptions, MoveDbOptions moveDbOptions, WatcherOptions watcherOptions)
 {
     ArchiveOptions    = archiveOptions;
     EncryptionOptions = encryptionOptions;
     LoggingOptions    = loggingOptions;
     MoveOptions       = moveOptions;
     MoveDbOptions     = moveDbOptions;
     WatcherOptions    = watcherOptions;
 }
Esempio n. 6
0
        /// <summary>
        /// Set the options for the watcher
        /// </summary>
        /// <param name="options">The options which should be used by the watcher</param>
        public void SetOptions(WatcherOptions options)
        {
            if (IsRunning)
            {
                throw new WatcherIsAlreadyRunningException(Options);
            }

            Options = options;
        }
Esempio n. 7
0
        public IFbWatcher <TModel> CreateWatcher <TModel>()
            where TModel : IModel, new()
        {
            var factory        = new WatcherFactory <TModel>();
            var watcherOptions = new WatcherOptions(TestsContext.MainDbConnectionString,
                                                    TestsContext.TempDbConnectionString);

            return(factory.CreateWatcher(watcherOptions));
        }
 public EtlXmlOptions(ArchiveOptions archiveOptions, CryptingOptions cryptingOptions, LoggerOptions loggerOptions, WatcherOptions watcherOptions, Options defaultOptions)
 {
     ArchiveOptions  = archiveOptions;
     CryptingOptions = cryptingOptions;
     LoggerOptions   = loggerOptions;
     WatcherOptions  = watcherOptions;
     DefaultOptions  = defaultOptions;
     SourceDirectory = DefaultOptions.SourceDirectory;
     TargetDirectory = DefaultOptions.TargetDirectory;
     IsLoggerEnable  = DefaultOptions.IsLoggerEnable;
 }
Esempio n. 9
0
        public Guid RegisterWriteTimeParser <T>(WatcherOptions watcherOptions) where T : IParser, new()
        {
            CheckOptions(watcherOptions);

            var guid        = Guid.NewGuid();
            var watcherTask = _serviceProvider.GetRequiredService <WriteTimeWatcherTask <T> >();

            watcherTask.SetOptions(watcherOptions);

            _registrations.Add(guid, watcherTask);

            return(guid);
        }
Esempio n. 10
0
        public void EnqueueNewFilesForProcessing <T>(WatcherOptions options, IList <IFileInfo> newFiles) where T : IParser, new()
        {
            foreach (var file in newFiles)
            {
                var workingPath = $"{options.WorkingDirectoryPath}\\{Guid.NewGuid()}";
                var workingFile = $"{workingPath}\\{file.Name}";
                var backupPath  = $"{options.BackupDirectoryPath}\\{DateTime.Today:yyyy}\\{DateTime.Today:MMMM}";

                var copyJobId    = BackgroundJob.Enqueue(() => CopyTask.CopyFileToDirectoryAsync(file.FullName, workingPath));
                var parserJobId  = BackgroundJob.ContinueJobWith(copyJobId, () => new T().ParseFile(workingFile));
                var backupJobId  = BackgroundJob.ContinueJobWith(parserJobId, () => CopyTask.CopyFileToDirectoryAsync(workingFile, backupPath));
                var cleanupJobId = BackgroundJob.ContinueJobWith(backupJobId, () => CleanupTask.DeleteFolder(workingPath));

                if (options.DeleteSourceFileAfterParsing)
                {
                    BackgroundJob.ContinueJobWith(cleanupJobId, () => CleanupTask.DeleteFile(file.FullName));
                }
            }

            _logger.LogInformation("{ParserName}: Enqueued {NewFilesCount} files for parsing...", options.ParserName, newFiles.Count);
        }
Esempio n. 11
0
        private void CheckOptions(WatcherOptions watcherOptions)
        {
            if (IsWorkerRunning)
            {
                throw new WorkerAlreadyStartedException();
            }

            if (watcherOptions == null)
            {
                throw new ArgumentNullException(nameof(watcherOptions));
            }

            if (!watcherOptions.AreOptionsValid())
            {
                throw new ArgumentException(watcherOptions.ErrorMessages.FirstOrDefault());
            }

            if (!watcherOptions.IsParserUnique(_registrations.Values.Select(v => v.Options)))
            {
                throw new ParserNotUniqueException();
            }
        }
Esempio n. 12
0
        public Watcher(WatcherOptions options, ApplicationOptions applicationOptions, ITerminal terminal, ILogger log)
        {
            if (string.IsNullOrWhiteSpace(options.FolderPath))
            {
                throw new ArgumentNullException(nameof(options.FolderPath));
            }

            this._log                = log;
            this._options            = options;
            this._applicationOptions = applicationOptions;
            this._terminal           = terminal;
            this.Name                = options.GetName();

            this._log.LogTrace("Watcher {Watcher}: checking commands", this.Name);
            this._commands = options.Commands?.Where(c => !string.IsNullOrWhiteSpace(c)) ?? Enumerable.Empty <string>();
            if (!this._commands.Any())
            {
                this._log.LogWarning("Watcher {Watcher}: no commands specified", this.Name);
            }

            this._log.LogTrace("Watcher {Watcher}: building exclusion filters", this.Name);
            this._exclusions = options.Exclusions?.Select(f => ExclusionFilter.Build(f)) ?? Enumerable.Empty <ExclusionFilter>();

            this._log.LogTrace("Watcher {Watcher}: determining working directory", this.Name);
            this._workingDirectory = string.IsNullOrWhiteSpace(this._options.WorkingDirectory) ? this._options.FolderPath : this._options.WorkingDirectory;

            this._log.LogTrace("Watcher {Watcher}: creating {Type}", this.Name, typeof(FileSystemWatcher).Name);
            this._watch = new FileSystemWatcher(options.FolderPath);
            this._watch.NotifyFilter = options.NotifyFilters;
            foreach (string filter in options.FileFilters)
            {
                this._watch.Filters.Add(filter);
            }
            this._watch.IncludeSubdirectories = options.Recursive;
            this._watch.Changed += OnFileChanged;
            this._watch.Created += OnFileChanged;
            this._watch.Renamed += OnFileChanged;
        }
Esempio n. 13
0
        private static IFbWatcher <TModel> CreateWatcher <TModel>()
            where TModel : IModel, new()
        {
            var tableName = typeof(TModel).GetCustomAttribute <DbTransferInfo>()?.MainTableName;

            if (string.IsNullOrWhiteSpace(tableName))
            {
                throw new Exception($"Can't extract table name from: {typeof(TModel)}");
            }

            var options = new WatcherOptions(TestsContext.MainDbConnectionString,
                                             TestsContext.TempDbConnectionString);

            var factory = CreateWatcherFactory <TModel>();
            var watcher = factory.CreateWatcher(options);

            var schemeFactory = new SchemeFactory <TModel>(TestsContext.ExternalDbSource,
                                                           TestsContext.ExternalUser, TestsContext.ExternalPassword);

            watcher.AddTriggers(schemeFactory.CreateSchemes(TriggerType.Insert,
                                                            TriggerType.Delete, TriggerType.Update));

            return(watcher);
        }
 public WatcherIsAlreadyRunningException(WatcherOptions options) : base($"The parser \"{options?.ParserName}\" is already started.")
 {
 }
Esempio n. 15
0
        public IFbWatcher <TModel> CreateWatcher(WatcherOptions options)
        {
            var logger = _loggerFactory.CreateLogger <FbSqlWatcher <TModel> >();

            return(new FbSqlWatcher <TModel>(options, _sqlBuilder, logger));
        }
Esempio n. 16
0
 public WatcherIsNotRunningException(WatcherOptions options) : base($"The watcher for parser \"{options?.ParserName}\" is not started and can therefore not be stopped.")
 {
 }
Esempio n. 17
0
 public FbSqlWatcher(WatcherOptions options, ISqlBuilder sqlBuilder, ILogger logger)
 {
     InitializeInternal(options);
     SqlBuilder = sqlBuilder;
     Logger     = logger;
 }
Esempio n. 18
0
 private void InitializeInternal(WatcherOptions options)
 {
     _options      = options;
     _tempDbReader = new FbSqlReader(options.TempDbConnectionString);
     Logger        = new LoggerFactory().CreateLogger <FbSqlWatcher <ProcessEventsActionModel> >();
 }