public void PollForFailedArchiveUpload()
        {
            try
            {
                _logger.Info("polling Result archive in progress...");

                var resultInProgress = _resultArchiveUploadRepository.GetResultArchiveUploadingAfterHours(_markFailedAfterHours);

                if (resultInProgress != null && resultInProgress.Any())
                {
                    _logger.Info("Number of result in progress " + resultInProgress.Count());

                    foreach (var resultArchive in resultInProgress)
                    {
                        resultArchive.Status = ResultArchiveUploadStatus.UploadFailed;
                        if (!resultArchive.UploadEndTime.HasValue)
                        {
                            resultArchive.UploadEndTime = DateTime.Now;
                        }

                        _resultArchiveUploadRepository.Save(resultArchive);
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error("exception occurred: " + ex.Message);
                _logger.Error("Stack trace: " + ex.StackTrace);
            }

            _logger.Info("result marking is done");
        }
예제 #2
0
        public void SaveNew_withoutFileId_Test()
        {
            var resultArchive = new ResultArchive()
            {
                EventId = 1445,
                UploadedByOrgRoleUserId = 1,
                UploadStartTime         = DateTime.Now,
                Status = ResultArchiveUploadStatus.Uploading
            };

            resultArchive = _resultArchiveUploadRepository.Save(resultArchive);

            Assert.IsNotNull(resultArchive);
            _validResultArchiveId = resultArchive.Id;

            Assert.Greater(resultArchive.Id, 0);
        }
예제 #3
0
        public void PollforUploadCompleteResultArchives()
        {
            var tempLogger     = _logManager.GetLogger("jobs");
            var resultArchives = _resultArchiveUploadRepository.Get(ResultArchiveUploadStatus.Uploaded);

            resultArchives = resultArchives.Where(r => r.FileId.HasValue).OrderBy(r => r.UploadEndTime);
            if (resultArchives.Count() > 0)
            {
                tempLogger.Info("Got the uploaded files list.");
            }

            foreach (var resultArchive in resultArchives)
            {
                var     logFileName = "File_" + resultArchive.Id;
                ILogger logger      = new NLogLogManager().GetLogger(logFileName);

                var theEvent = new LogEventInfo(LogLevel.Off, "", logFileName);
                theEvent.Properties["LogFileName"] = logFileName;

                string extractedFilePath = "";
                string zipFilePath       = "";
                logger.Info(
                    "\n\n****************************************************************************************************************** ");
                try
                {
                    // ReSharper disable PossibleInvalidOperationException
                    var file = _fileRepository.GetById(resultArchive.FileId.Value);
                    // ReSharper restore PossibleInvalidOperationException

                    if (file == null)
                    {
                        logger.Info(String.Format("\nFile Information not found for Result Archive Id: {0}, uploaded on {1}, for the Event Id: {2} ", resultArchive.Id, resultArchive.UploadEndTime.Value, resultArchive.EventId));
                        resultArchive.Status = ResultArchiveUploadStatus.FileNotFound;
                        _resultArchiveUploadRepository.Save(resultArchive);
                        continue;
                    }

                    var mediaLocation = _mediaRepository.GetResultArchiveMediaFileLocation(resultArchive.EventId);
                    if (!System.IO.File.Exists(mediaLocation.PhysicalPath + file.Path))
                    {
                        logger.Info(String.Format("\nInvalid File Path for Result Archive Id: {0}, uploaded on {1}, for the Event Id: {2} ", resultArchive.Id, resultArchive.UploadEndTime.Value, resultArchive.EventId));
                        resultArchive.Status = ResultArchiveUploadStatus.FileNotFound;
                        _resultArchiveUploadRepository.Save(resultArchive);
                        continue;
                    }

                    zipFilePath = mediaLocation.PhysicalPath + file.Path;
                }
                catch (Exception ex)
                {
                    logger.Info(String.Format("\nSystem Failure, while fetching File Info for Result Archive Id: {0}, uploaded on {1}, for the Event Id: {2}. \nMessage:{3} \n\t {4}", resultArchive.Id, resultArchive.UploadEndTime.Value, resultArchive.EventId, ex.Message, ex.StackTrace));
                    resultArchive.Status = ResultArchiveUploadStatus.FileNotFound;
                    _resultArchiveUploadRepository.Save(resultArchive);
                    continue;
                }

                try
                {
                    resultArchive.ParseStartTime = DateTime.Now;
                    resultArchive.Status         = ResultArchiveUploadStatus.Parsing;
                    _resultArchiveUploadRepository.Save(resultArchive);
                }
                catch (Exception ex)
                {
                    logger.Info("\nSystem Failure, while saving 'Parsing Start Time'! Message: " + ex.Message + "\n\t" + ex.StackTrace);
                    continue;
                }

                try
                {
                    extractedFilePath = _zipHelper.ExtractZipFiles(zipFilePath);
                }
                catch (Exception ex)
                {
                    logger.Info(String.Format("\nSystem Failure, Invalid File Format for Result Archive Id: {0}, uploaded on {1}, for the Event Id: {2}. \nMessage:{3} \n\t {4}", resultArchive.Id, resultArchive.UploadEndTime.Value, resultArchive.EventId, ex.Message, ex.StackTrace));
                    resultArchive.Status = ResultArchiveUploadStatus.InvalidFileFormat;
                    _resultArchiveUploadRepository.Save(resultArchive);
                    continue;
                }

                try
                {
                    logger.Info(String.Format("\nParsing Started for Result Archive Id: {0}, uploaded on {1}, for the Event Id: {2} ", resultArchive.Id, resultArchive.UploadEndTime.Value, resultArchive.EventId));

                    _resultParser = new ResultParser(resultArchive.Id, extractedFilePath, _corporateAccountRepository, _mediaRepository, _resultArchiveUploadRepository, _resultArchiveUploadLogRepository, logger, _settings, _customerRepository, _zipHelper,
                                                     _basicBiometricRepository, _eventCustomerRepository, _lipidParserHelper, _endofDayService, _customerService, _eventRepository);
                    _resultParser.Parse();
                    logger.Info("\nParsing completed without any system Failure.");
                    resultArchive.ParseEndTime = DateTime.Now;
                    //Directory.Delete(extractedFilePath, true);
                }
                catch (IOException ex)
                {
                    logger.Info("\nParsing Failed! Message: " + ex.Message + "\n\t" + ex.StackTrace);

                    resultArchive.ParseEndTime = DateTime.Now;
                    resultArchive.Status       = ResultArchiveUploadStatus.ParseFailed;
                    _resultArchiveUploadRepository.Save(resultArchive);
                }
                catch (Exception ex)
                {
                    logger.Info("\nParsing Failed! Message: " + ex.Message + "\n\t" + ex.StackTrace);

                    resultArchive.ParseEndTime = DateTime.Now;
                    resultArchive.Status       = ResultArchiveUploadStatus.ParseFailed;
                    _resultArchiveUploadRepository.Save(resultArchive);
                    Directory.Delete(extractedFilePath, true);
                }
                finally
                {
                    var ecs = _eventCustomerResultRepository.GetByEventId(resultArchive.EventId);

                    if (ecs != null && ecs.Count() > 0)
                    {
                        foreach (var eventCustomerResult in ecs)
                        {
                            _eventCustomerResultRepository.SetEventCustomerResultState(eventCustomerResult.EventId, eventCustomerResult.CustomerId);
                        }
                    }

                    // GC.Collect();
                    //logger.Info("Calling gc collect");
                    Thread.Sleep(2000);
                }

                try
                {
                    var resultArchiveLogs = _resultArchiveUploadLogRepository.GetbyResultArchiveId(resultArchive.Id);
                    var succesFulRecords  = resultArchiveLogs != null?resultArchiveLogs.Where(rl => rl.IsSuccessful).Count() : 0;

                    if (succesFulRecords > 0)
                    {
                        resultArchive.Status = ResultArchiveUploadStatus.Parsed;
                    }
                    else
                    {
                        resultArchive.Status = ResultArchiveUploadStatus.ParseFailed;
                    }

                    var customerCount = resultArchiveLogs != null?resultArchiveLogs.Select(rl => rl.CustomerId).Distinct().Count() : 0;

                    resultArchive.CustomerRecordsFound = customerCount;
                    _resultArchiveUploadRepository.Save(resultArchive);
                }
                catch (Exception ex)
                {
                    logger.Info("/Saving Parse End Data Failed! Message: " + ex.Message + "\n\t" + ex.StackTrace);
                }
            }
        }
예제 #4
0
        public JsonResult CreateResultArchive(long eventId, string fileName, long fileSize)
        {
            if (eventId < 1)
            {
                throw new Exception("EventId should not be empty!");
            }
            try
            {
                var theEvent = _eventRepository.GetById(eventId);
                if (theEvent == null || theEvent.EventDate.Date > DateTime.Now.Date || theEvent.Status != EventStatus.Active || theEvent.PodIds.IsNullOrEmpty())
                {
                    throw new Exception("Provide a valid EventId!");
                }
            }
            catch
            {
                var model = new ResultArchiveUploadEditModel
                {
                    EventId = -1,
                    File    = null,
                    Id      = 0
                };

                return(Json(model, JsonRequestBehavior.AllowGet));
            }

            var file = new File
            {
                Path       = fileName,
                Type       = FileType.Compressed,
                FileSize   = fileSize,
                UploadedBy = new OrganizationRoleUser(_session.UserSession.CurrentOrganizationRole.OrganizationRoleUserId),
                UploadedOn = DateTime.Now
            };

            file = _fileRepository.Save(file);

            var resultArchive = new ResultArchive
            {
                FileId                  = file.Id,
                EventId                 = eventId,
                UploadStartTime         = DateTime.Now,
                Status                  = ResultArchiveUploadStatus.Uploading,
                UploadedByOrgRoleUserId =
                    _session.UserSession.CurrentOrganizationRole.OrganizationRoleUserId
            };

            resultArchive = _resultArchiveUploadRepository.Save(resultArchive);

            //update the file name
            file.Path = _fileHelper.AddPostFixToFileName(file.Path, resultArchive.Id.ToString());
            _fileRepository.Save(file);


            //return ResultArchiveUploadEditModel;
            var editModel = new ResultArchiveUploadEditModel
            {
                EventId = eventId,
                File    = file,
                Id      = resultArchive.Id
            };

            return(Json(editModel, JsonRequestBehavior.AllowGet));
        }