예제 #1
0
        private static void OnTimedEvent(string identity, Entities entities)
        {
            var originalTextRepository = new OriginalTextRepository(entities);

            try
            {
                PoccessTexts(identity, originalTextRepository, entities);

                entities = new Entities();
                var count = entities.OriginalTexts.Count(t => t.ProcessedText == null);

                if (count != 0)
                {
                    OnTimedEvent(identity, entities);
                }
            }
            catch (DbUpdateConcurrencyException e)
            {
                Console.WriteLine("DbUpdateConcurrencyException {0}", identity);

                entities = new Entities();
                var count = entities.OriginalTexts.Count(t => t.ProcessedText == null);

                if (count != 0)
                {
                    Console.WriteLine(identity);

                    OnTimedEvent(identity, new Entities());
                }
            }
            catch (DataException)
            {
                Console.WriteLine("DataException. Что-то пошло не так. Свяжитесь с системный администратором.");
            }
        }
예제 #2
0
        private static void PoccessTexts(string identity, OriginalTextRepository originalTextRepository, Entities entities)
        {
            var testsToGenerate = originalTextRepository.GetAll(t => t.ProcessedText == null).Take(10).ToList();
            testsToGenerate
                .ForEach(
                    t =>
                    {
                        t.ProcessedText = "test - " + identity;
                        t.ProcessedDate = DateTime.Now;
                    }
                );

            entities.SaveChanges();
        }
예제 #3
0
        private void PoccessTextsPart(OriginalTextRepository originalTextRepository, Entities entities)
        {
            var testsToGenerate = originalTextRepository
                .GetAll(t => t.ProcessedText == null)
                .Take(Config.PollingPartSize)
                .ToList();

            testsToGenerate
                .ForEach(
                    t =>
                    {
                        t.ProcessedText = GenerateMarkovChain(t.Text);
                        t.ProcessedDate = DateTime.Now;
                    }
                );

            entities.SaveChanges();
        }
예제 #4
0
        /// <summary>
        /// Рекурсивная обработка не обработанных текстов
        /// </summary>
        /// <param name="entities">Экземпляр контекста</param>
        /// <param name="start">Время первого запуска метода</param>
        private void ProccessTexts(Entities entities, DateTime start)
        {
            //На основе контекста инициализируем репозиторий
            var originalTextRepository = new OriginalTextRepository(entities);
            //кол-во необработанных текстов
            var count = 1;

            while (count != 0)
            {
                //Пытаемся обработать порцию текстов
                try
                {
                    PoccessTextsPart(originalTextRepository, entities);
                }
                //если кто-то уже обработал текста повторяем попытку, если в базе еще остались необработанные текста
                catch (DbUpdateConcurrencyException dbocex)
                {
                    Logger.Error(dbocex);
                }
                catch (DataException dex)
                {
                    Logger.Error(dex);
                    break;
                }

                if (DateTime.Now.Subtract(start).Minutes >= Config.MaximumPoolingRuntimeInMinutes)
                {
                    break;
                }

                entities = new Entities();
                originalTextRepository = new OriginalTextRepository(entities);
                count = entities.OriginalTexts.Count(t => t.ProcessedText == null);
            }
        }