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());
        }
Beispiel #3
0
        /// <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();
        }