private void CreateFoldersInRepositories() { //Create Repositories from Configuration File Settings foreach (string key in repositories.Keys) { if (repositories[key].GetType() == typeof(FolderDirectoryRepositoryArguments)) { FolderDirectoryRepositoryArguments repository = (FolderDirectoryRepositoryArguments)repositories[key]; if (!Directory.Exists(repository.Path)) { Directory.CreateDirectory(repository.Path, FilePermissions.CreateDirectoryPermissions()); } } } }
/// <summary> /// Manages, Tracks, and Logs all Operations /// </summary> /// <param name="settings">The Configuration File to be used</param> /// <param name="basedirectory">The Full Path to the base directory the Service is going to use</param> public QueueManager(ConfigurationSettings settings, string basedirectory) { queuedOperations = new HeapPriorityQueue <OperationContext>(); repositories = settings.Repositories.ToDictionary(x => x.Name); OperationContextFactory.SetRepositories(repositories); RunningOperations = new ObservableCollection <OperationContext>(); CanceledOperations = new ObservableCollection <OperationContext>(); FailedOperations = new ObservableCollection <OperationContext>(); SuccessfulOperations = new ObservableCollection <OperationContext>(); RetriedOperations = new ObservableCollection <OperationContext>(); RunningOperations.CollectionChanged += (sender, args) => { OnCollectionChanged(new PropertyChangedEventArgs(nameof(RunningOperations)), args); }; CanceledOperations.CollectionChanged += (sender, args) => { OnCollectionChanged(new PropertyChangedEventArgs(nameof(CanceledOperations)), args); }; FailedOperations.CollectionChanged += (sender, args) => { OnCollectionChanged(new PropertyChangedEventArgs(nameof(FailedOperations)), args); }; SuccessfulOperations.CollectionChanged += (sender, args) => { OnCollectionChanged(new PropertyChangedEventArgs(nameof(SuccessfulOperations)), args); }; RetriedOperations.CollectionChanged += (sender, args) => { OnCollectionChanged(new PropertyChangedEventArgs(nameof(RetriedOperations)), args); }; cancellationTokens = new Dictionary <string, CancellationTokenSource>(); TotalOperationsRun = 0; requestsPostponedForADay = 0; requestsDelayedForConcurrency = 0; datedOperations = new Dictionary <string, Dictionary <int, int> >(); baseDirectory = basedirectory; Settings = settings; if (!Directory.Exists(baseDirectory + @"Logs\")) { Directory.CreateDirectory(baseDirectory + @"Logs\", FilePermissions.CreateDirectoryPermissions()); } WriteCurrentStatus(); UpdateConfigurationFile(settings); string harvesterStartFileName = $@"{basedirectory}Logs\Harvester Start - {DateTime.Now:yyyy-MM-dd}.txt"; File.WriteAllText(harvesterStartFileName, "Total Operations: " + queuedOperations.Count()); File.SetAccessControl(harvesterStartFileName, FilePermissions.CreateFilePermissions()); }
/// <inheritdoc /> protected override void OnStart(string[] args) { try { WriteEventLog("Started: " + ServiceName, EventLogEntryType.Information); baseDrive = Path.GetPathRoot(Environment.CurrentDirectory); if (string.IsNullOrWhiteSpace(Configuration)) { baseDirectory = baseDrive + @"Harvester\"; } else { baseDirectory = baseDrive + $@"Harvester ({Configuration})\"; } WriteEventLog("Base Directory is: " + baseDirectory, EventLogEntryType.Information); fullPathToExampleConfig = baseDirectory + ConfigurationFileNameExample; fullPathToConfig = baseDirectory + ConfigurationFileName; if (!Directory.Exists(baseDirectory)) { Directory.CreateDirectory(baseDirectory, FilePermissions.CreateDirectoryPermissions()); } if (!IsExampleConfigurationFilePresent()) { using (StreamWriter stream = new StreamWriter(fullPathToExampleConfig)) { ConfigurationSettings configFile = CreateExampleConfigurationFile(); XmlSerializer serializer = new XmlSerializer(typeof(ConfigurationSettings)); serializer.Serialize(stream, configFile); } } File.SetAccessControl(fullPathToExampleConfig, FilePermissions.CreateFilePermissions()); File.Delete(baseDirectory + "BaseLog.txt"); File.Delete(baseDirectory + "QueueManager.txt"); } catch (Exception ex) { Crash(ex); } var queueManagerState = IsConfigurationFilePresent() ? QueueManagerState.FirstTimeOperations : QueueManagerState.NoConfigurationFile; mainBackgroundThread = new Thread(() => RunQueueManager(queueManagerState)) { Name = $"HarvesterService{Configuration} (Thread)", IsBackground = true }; #if Debug Debugger.Launch(); #endif serviceHost?.Close(); // Create a ServiceHost for the HarvesterService type and provide the base address. serviceHost = new ServiceHost(this); mainBackgroundThread.Start(); }