private void ProcessFeed(DataFeed dataFeed) { VkGroup group = this.groupRepository.GetGroupById(dataFeed.VkGroupId); IFeedProcessor processor = this.processorFactory.Create(dataFeed.Type); using (var transaction = this.transactionProvider.CreateTransaction().Begin()) { this.log.InfoFormat("Processing data feed with VkGroupId={0} ({1}) is started", dataFeed.VkGroupId, dataFeed.Type); try { processor.Process(dataFeed, group); transaction.Commit(); this.log.InfoFormat("Processing data feed with VkGroupId={0} ({1}) is finished", dataFeed.VkGroupId, dataFeed.Type); } catch (Exception exc) { transaction.Rollback(); this.log.ErrorFormat("Data feed with VkGroupId={0} ({1}) is failed to be processed. Reason: {2}", dataFeed.VkGroupId, dataFeed.Type, exc.ToString()); throw; } finally { dataFeed.MarkAsCompleted(); this.log.InfoFormat("Data feed with Id={0} ({1}) is deleted", dataFeed.VkGroupId, dataFeed.Type); } } }
private void ProcessTerminator(DataFeed dataFeed) { VkGroupProcessingHistoryItem item = new VkGroupProcessingHistoryItem { FeedType = dataFeed.Type, VkGroupId = dataFeed.VkGroupId, FetchingDate = dataFeed.SendingDate, FetchingServer = dataFeed.FetchingServer, FetchingProcess = dataFeed.FetchingProcess, ProcessingDate = this.dateTimeHelper.GetDateTimeNow(), ProcessingServer = this.webUtilities.GetServerName(), ProcessingProcess = this.webUtilities.GetApplicationPoolName() }; using (var transaction = this.transactionProvider.CreateTransaction().Begin()) { try { int version = this.groupRepository.SaveGroupProcessingHistoryItem(item); transaction.Commit(); IFeedProcessor processor = this.processorFactory.Create(dataFeed.Type); processor.ProcessTerminator(dataFeed.VkGroupId, version); } catch (Exception exc) { transaction.Rollback(); this.log.ErrorFormat("Terminator feed with VkGroupId={0} ({1}) is failed to be processed. Reason: {2}", dataFeed.VkGroupId, dataFeed.Type, exc.ToString()); throw; } finally { dataFeed.MarkAsCompleted(); } } }