Пример #1
0
        private static async Task StartPurge()
        {
            using ILifetimeScope scope = _container.BeginLifetimeScope();
            SettingsFactory settingsFactory = scope.Resolve <SettingsFactory>();
            ITraceService   traceService    = scope.Resolve <ITraceService>();

            await WriteTrace(traceService, settingsFactory, "Start Purge");
            await InitializeWorkers();

            CoreSettings        settings      = settingsFactory.CreateCore(_settings);
            IPurgeWorkerFactory workerFactory = scope.Resolve <IPurgeWorkerFactory>();
            IPurgeWorkerSaver   workerSaver   = scope.Resolve <IPurgeWorkerSaver>();
            Guid?workerId = await workerFactory.Claim(settings);

            while (workerId.HasValue && !workerId.Value.Equals(Guid.Empty))
            {
                await WriteTrace(traceService, settingsFactory, $"Claimed worker {workerId.Value}");

                IPurgeWorker purgeWorker = await workerFactory.Get(settings, workerId.Value);

                try
                {
                    await Purge(purgeWorker);
                }
                catch (System.Exception ex)
                {
                    purgeWorker.Status = PurgeWorkerStatus.Error;
                    try
                    {
                        await scope.Resolve <IExceptionService>().Create(settingsFactory.CreateLog(_settings), _settings.ExceptionLoggingDomainId, ex);
                    }
                    catch { }
                    throw;
                }
                finally
                {
                    await workerSaver.Update(settings, purgeWorker);
                    await WriteTrace(traceService, settingsFactory, $"Updated Worker {workerId.Value} Status {purgeWorker.Status}");
                }
                workerId = await workerFactory.Claim(settings);
            }
            try
            {
                await WriteTrace(traceService, settingsFactory, "Purging meta data");
                await PurgMetaData(settingsFactory, scope.Resolve <IPurgeSaver>());
            }
            catch (System.Exception ex)
            {
                Console.Error.WriteLine(ex.ToString());
                try
                {
                    await scope.Resolve <IExceptionService>().Create(settingsFactory.CreateLog(_settings), _settings.ExceptionLoggingDomainId, ex);
                }
                catch { }
            }
        }
Пример #2
0
 /// <summary>
 /// Calling stored procedure to
 /// 1) delete old completed workers
 /// 2) reset hung workers
 /// 3) add domain workers
 /// </summary>
 private static async Task InitializeWorkers()
 {
     using (ILifetimeScope scope = _container.BeginLifetimeScope())
     {
         SettingsFactory   settingsFactory = scope.Resolve <SettingsFactory>();
         IPurgeWorkerSaver saver           = scope.Resolve <IPurgeWorkerSaver>();
         await saver.InitializePurgeWorker(settingsFactory.CreateCore(_settings));
         await WriteTrace(scope.Resolve <ITraceService>(), settingsFactory, "Workers Initialized");
     }
 }
Пример #3
0
        public async Task <IActionResult> UpdateStatus([FromRoute] Guid?id, [FromBody] Dictionary <string, object> patch)
        {
            IActionResult result = null;

            try
            {
                if (result == null && (!id.HasValue || id.Value.Equals(Guid.Empty)))
                {
                    result = BadRequest("Missing id parameter value");
                }
                if (result == null && patch == null)
                {
                    result = BadRequest("Missing patch data");
                }
                if (result == null)
                {
                    using ILifetimeScope scope = _container.BeginLifetimeScope();
                    SettingsFactory     settingsFactory  = scope.Resolve <SettingsFactory>();
                    CoreSettings        settings         = settingsFactory.CreateCore(_settings.Value);
                    IPurgeWorkerFactory factory          = scope.Resolve <IPurgeWorkerFactory>();
                    IPurgeWorker        innerPurgeWorker = await factory.Get(settings, id.Value);

                    if (innerPurgeWorker == null)
                    {
                        result = NotFound();
                    }
                    else
                    {
                        if (patch.ContainsKey("Status"))
                        {
                            innerPurgeWorker.Status = (PurgeWorkerStatus)Convert.ChangeType(patch["Status"], typeof(short));
                        }
                        IPurgeWorkerSaver saver = scope.Resolve <IPurgeWorkerSaver>();
                        await saver.Update(settings, innerPurgeWorker);

                        IMapper mapper = MapperConfigurationFactory.CreateMapper();
                        result = Ok(mapper.Map <PurgeWorker>(innerPurgeWorker));
                    }
                }
            }
            catch (System.Exception ex)
            {
                using (ILifetimeScope scope = _container.BeginLifetimeScope())
                {
                    await LogException(ex, scope.Resolve <IExceptionService>(), scope.Resolve <SettingsFactory>(), _settings.Value);
                }
                result = StatusCode(StatusCodes.Status500InternalServerError);
            }
            return(result);
        }