Ejemplo n.º 1
0
 public PatternMatchingMapper GetMapper()
 {
     if (mapper == null)
     {
         #region Set mapper
         mapper = new PatternMatchingMapper();
         mapper.SetClientAndAppDetails(triggerFileDetail.RunNumber);
         #endregion
     }
     return(mapper);
 }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            LogInitializer.InitializeLogger("ZipExtractor");
            SingletonLogger.Instance.Debug("Extractor component has been started.");
            var systemGuid  = string.Empty;
            var triggerFile = string.Empty;

            #region Validate Command Arguments

            // Start Processing
            if (args.Length != 2)
            {
                SingletonLogger.Instance.Debug("Number of passed arguments are Invalid.");
                return;
            }
            else
            {
                triggerFile = args[0];
                systemGuid  = args[1];
            }

            if (!File.Exists(triggerFile))
            {
                SingletonLogger.Instance.Error("Trigger file does not exist at = " + triggerFile);
                return;
            }
            else
            {
                SingletonLogger.Instance.Debug("Trigger file = " + triggerFile);
            }


            if (String.IsNullOrEmpty(systemGuid))
            {
                SingletonLogger.Instance.Error("Trigger file does not exist at = " + triggerFile);
                return;
            }
            else
            {
                SingletonLogger.Instance.Debug("System generated GUID = " + systemGuid);
            }

            #endregion

            #region Move trigger file from Invoker trigger location to Component trigger location

            // We are moving trigger file from invoker location to avoid reprocessing of same file
            TriggerFileLocation = AppConfig.GetValueByKey("TriggerFileDirectory");
            if (!Directory.Exists(TriggerFileLocation))
            {
                Directory.CreateDirectory(TriggerFileLocation);
            }
            TriggerFileLocation = Path.Combine(TriggerFileLocation, Path.GetFileName(triggerFile));
            //Move to intermediate directory
            File.Move(triggerFile, TriggerFileLocation);
            SingletonLogger.Instance.Debug("Trigger has been moved at " + TriggerFileLocation);

            #endregion

            XmlHelper objXmlHelper       = new XmlHelper();
            var       componentStartDate = DateTime.Now.ToString();

            SingletonLogger.Instance.Debug("Process start reading Trigger XML file " + TriggerFileLocation);
            TriggerFileReader objTriggerFileReader = new TriggerFileReader();
            objTriggerFileReader.TriggerFileLocaton = TriggerFileLocation;
            var triggerFileDetail = objTriggerFileReader.GetTriggerFileDetail();
            SingletonLogger.Instance.Debug("Process successfully read trigger XML file.");
            try
            {
                mapper = new PatternMatchingMapper();
                mapper.SetCurrentDateFormat();
                mapper.SetClientAndAppDetails(triggerFileDetail.RunNumber);


                var inputLocation  = triggerFileDetail.InputDetails.FirstOrDefault();
                var outputLocation = triggerFileDetail.OutputDetails.FirstOrDefault();
                if (inputLocation == null)
                {
                    throw new Exception("");
                }

                string inputLoc  = mapper.EvaluateString(inputLocation.DirectoryLocation);
                string outputLoc = mapper.EvaluateString(outputLocation.DirectoryLocation);
                if (String.IsNullOrEmpty(inputLoc))
                {
                    throw new Exception("Input loction is never be null or empty");
                }
                if (!Directory.Exists(inputLoc))
                {
                    throw new Exception("Input loction not exists" + inputLoc);
                }
                var availableFiles = Directory.GetFiles(inputLoc, inputLocation.FileMask);

                if (String.IsNullOrEmpty(outputLoc))
                {
                    throw new Exception("Output loction is never be null or empty");
                }
                if (!Directory.Exists(outputLoc))
                {
                    Directory.CreateDirectory(outputLoc);
                }


                foreach (var zipfile in availableFiles)
                {
                    // Start Extracting
                    SingletonLogger.Instance.Debug("Start processing " + Path.GetFileName(TriggerFileLocation) + " file.");
                    ExtractOperations.ExtractFile(zipfile, outputLoc);


                    if (AppConfig.FileOperation)
                    {
                        File.Delete(zipfile);
                    }
                }

                objXmlHelper.WriteComponentStatusInTriggerFile(TriggerFileLocation, componentStartDate, DateTime.Now.ToString());
                File.Move(TriggerFileLocation, triggerFileDetail.ComponentStatusDirectory + "\\status_" + Path.GetFileName(TriggerFileLocation));
            }
            catch (Exception ex)
            {
                objXmlHelper.WriteComponentStatusInTriggerFile(TriggerFileLocation, componentStartDate, DateTime.Now.ToString(), "Error", ex.GetBaseException().ToString());
                File.Move(TriggerFileLocation, triggerFileDetail.ComponentStatusDirectory + "\\status_" + Path.GetFileName(TriggerFileLocation));
                SingletonLogger.Instance.Error("Error in ZipExtractor. Error message : " + ex.Message + ". Error Detail : " + ex.StackTrace);
            }
            finally
            {
                #region Deleting Entry from Transaction Table
                try
                {
                    // SQLITE Database Initialization
                    Transaction trans = Transaction.Get(systemGuid);
                    if (Transaction.Delete(systemGuid))
                    {
                        if (trans != null)
                        {
                            Licence.UpdateLastRunEndTime(trans.ExeName, DateTime.Now);
                        }
                        SingletonLogger.Instance.Debug("Successfully removed column. GUID = " + systemGuid);
                    }
                    else
                    {
                        SingletonLogger.Instance.Debug("Error while removing column. GUID = " + systemGuid);
                    }
                }
                catch (Exception ex2)
                {
                    SingletonLogger.Instance.Debug("Error while removing column. GUID = " + ex2.ToString());
                }
                #endregion
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Job Init processing
        /// </summary>
        /// <param name="sessionKey">Service generated GUID</param>
        /// <param name="appId">Application ID</param>
        /// <returns></returns>
        public List <RunNumberAndOutput> Processing(string sessionKey, int appId)
        {
            List <RunNumberAndOutput> objRunNumberAndOutputList = new List <RunNumberAndOutput>();

            emailList = new List <string>();
            try
            {
                String desLoc = String.Empty;
                SingletonLogger.Instance.Debug("Get application info");
                //Get application by id
                var appInfo = objApplicationRepository.Find(appId);
                if (appInfo == null)
                {
                    throw new NullReferenceException("Application details not found in database for Application Id : " + appId);
                }
                //Get applications Client information
                var clientInfo = objClientRepository.Find(appInfo.ClientId);
                if (clientInfo == null)
                {
                    throw new NullReferenceException("Client details not found in database for Client Id : " + appInfo.ClientId);
                }

                SingletonLogger.Instance.Debug("Client Id = " + clientInfo.ClientId + "\t Application Id : " + appId);
                SingletonLogger.Instance.Debug("Client Name = " + clientInfo.Name + "\t Application name : " + appInfo.Name);

                SingletonLogger.Instance.Debug("Adding Mapper...");
                mapper = new PatternMatchingMapper();
                mapper.SetCurrentDateFormat();
                mapper.SetClientAndAppDetails(clientInfo.Name, appInfo.Name);
                SingletonLogger.Instance.Debug("Mapper Added.");

                SingletonLogger.Instance.Debug("Get file transfer settings for application for File by Setting Id " + appInfo.FileTransferSettingId);
                var fileTransferSetting = objFileTransferSettingsRepository.Find(appInfo.FileTransferSettingId);
                if (fileTransferSetting == null)
                {
                    throw new Exception("No file transfer setting details found for File transfersettingId " + appInfo.FileTransferSettingId);
                }

                SingletonLogger.Instance.Debug("Get queue type for file transfer setting id " + fileTransferSetting.QueueTypeId);

                // Converting queue type from string, if not able to convert throw exception
                SingletonLogger.Instance.Debug("Checking for queue type.");
                QuequeType type = (QuequeType)Enum.ToObject(typeof(QuequeType), fileTransferSetting.QueueTypeId);
                SingletonLogger.Instance.Debug("Queue type is : " + type.ToString());

                var applicationFiles = objApplicationFileRepository.GetApplicationFileListByAppID(appInfo.ApplicationId);
                if (applicationFiles == null)
                {
                    throw new NullReferenceException("No app files (Input configuration) found in db for appId : " + appInfo.ApplicationId + "appName : " + appInfo.Name);
                }

                if (applicationFiles.Count() == 0)
                {
                    throw new InvalidDataException("No app files (Input configuration) found in db for appId : " + appInfo.ApplicationId + "appName : " + appInfo.Name);
                }

                SingletonLogger.Instance.Debug(string.Format("{0} files found for current application. ", applicationFiles.Count()));

                SingletonLogger.Instance.Debug("Processing files...");
                var validationType = ValidationType.Default;
                if (appInfo.IsBatch)
                {
                    validationType = ValidationType.Batch;
                }

                var adaptorSettings = SetLocationAdptorSettings(fileTransferSetting, appInfo, type);

                if (adaptorSettings == null)
                {
                    throw new NullReferenceException("Null validation adapter setting found when getting valid adapter.");
                }

                // Initializing transfer manager
                IFileTransferAdapter transferAdaptor = FileTransferAdapter.GetFileTransferAdapter(adaptorSettings);

                if (transferAdaptor == null)
                {
                    throw new NullReferenceException("Null transfer adapter found.");
                }

                FileTransferManager transferManager = new FileTransferManager(transferAdaptor);

                if (transferManager == null)
                {
                    throw new NullReferenceException("Null transfer manager found.");
                }

                SingletonLogger.Instance.Debug("validationType : " + validationType + "applicationFiles :" + applicationFiles.FirstOrDefault() + " transferManager :" + transferManager);

                IValidationPlugin validationAdaptor = GetValidationAdptor(validationType, applicationFiles.ToArray(), transferManager);

                if (validationAdaptor == null)
                {
                    throw new NullReferenceException("Null validation adapter found when getting valid adapter.");
                }

                // Validate
                if (validationAdaptor.Validate())
                {
                    SingletonLogger.Instance.Debug("file is  Validated by " + validationAdaptor + " now Ready to download");
                    int count = 1;
                    // If There are some valid files then insert run number information to DB.
                    if (validationAdaptor.ValidFiles.Count > 0 && validationAdaptor.Ready)
                    {
                        foreach (var file in validationAdaptor.ValidFiles)
                        {
                            RunNumberAndOutput objRunNumberAndOutput = new RunNumberAndOutput();

                            #region Create Job
                            switch (validationType)
                            {
                            case ValidationType.Default:
                                //Create run number and add entry in database
                                runNumber = GetRunNumber(clientInfo.Code, appInfo.Code, appId);
                                SingletonLogger.Instance.Debug("file is  Run in Single processing. RunNumber = " + runNumber);
                                runId = InsertRunDetails(appInfo.ApplicationId, runNumber);
                                SingletonLogger.Instance.Debug("Run details is saved in db successfully.");
                                break;

                            case ValidationType.Batch:
                                //Create run number and add entry in database
                                if (count == 1)
                                {
                                    runNumber = GetRunNumber(clientInfo.Code, appInfo.Code, appId);
                                    runId     = InsertRunDetails(appInfo.ApplicationId, runNumber);
                                }
                                SingletonLogger.Instance.Debug("Insert runDetails in db for RunNumber " + runNumber + " Client " + clientInfo.Name + " and Application " + appInfo.Name);
                                break;

                            case ValidationType.Custom:
                                throw new NotSupportedException("Functionality for custom validation not supported.");

                            default:
                                throw new InvalidOperationException("Invalid Validation type found.");
                            }
                            #endregion

                            #region Countinue Common Processing
                            mapper.SetClientAndAppDetails(runNumber);
                            if (String.IsNullOrEmpty(appInfo.HotFolder))
                            {
                                throw new Exception("Destination location is null or empty for " + appInfo.Name);
                            }

                            desLoc = mapper.EvaluateString(appInfo.HotFolder);
                            SingletonLogger.Instance.Debug("file is  downloading at " + desLoc);
                            transferAdaptor.Settings.DestinationLocation = desLoc;

                            // Add Run number and destination location
                            objRunNumberAndOutput.Output = desLoc;

                            #endregion

                            #region Download files
                            // download valid files
                            if (transferManager.DownloadFile(file))
                            {
                                SingletonLogger.Instance.Debug(file + " file is  downloaded successfully.");
                                //Inserting details to db
                                if (InsertRawFileDetails(runId, file, desLoc))
                                {
                                    SingletonLogger.Instance.Debug("file detail is saved in db in raw files");
                                    if (appInfo.IsArchive)
                                    {
                                        var arcvInpuFile = desLoc + "\\" + Path.GetFileName(file);
                                        mapper.SetFileFormat(arcvInpuFile);
                                        var outFile = mapper.EvaluateString(appInfo.ArchivePath + "\\" + appInfo.ArchiveFileName);
                                        Archieve(arcvInpuFile, outFile);
                                    }

                                    if (appInfo.IsFileMove)
                                    {
                                        try
                                        {
                                            SingletonLogger.Instance.Debug("Process start to delete file from " + file);
                                            transferManager.DeleteFile(file);
                                            SingletonLogger.Instance.Debug(file + " file is deleted from source location.");
                                        }
                                        catch (Exception ex)
                                        {
                                            throw ex;
                                        }
                                    }
                                }
                            }
                            #endregion

                            #region Create Run number and output List
                            switch (validationType)
                            {
                            case ValidationType.Default:        // Run each file as a single file
                                objRunNumberAndOutput.RunNumber = runNumber;
                                objRunNumberAndOutputList.Add(objRunNumberAndOutput);
                                break;

                            case ValidationType.Batch:
                                if (count == 1)       // If file downloading type is 'Batch' then no need to add directory in array, run file as a batch
                                {
                                    objRunNumberAndOutput.RunNumber = runNumber;
                                    objRunNumberAndOutputList.Add(objRunNumberAndOutput);
                                }
                                break;

                            case ValidationType.Custom:
                                throw new NotSupportedException("Functionality for custom validation not supported.");

                            default:
                                throw new InvalidOperationException("Invalid Validation type found.");
                            }
                            #endregion

                            #region Email

                            emailList.Add(Path.GetFileName(file));

                            #endregion

                            count++;
                        }
                    }
                    else
                    {
                        SingletonLogger.Instance.Debug("No valid files found or Files are not ready to download.");
                        objProcSessionsRepository.UpdateBySessionKey(sessionKey, Convert.ToByte(JobStatusType.Complete));
                    }
                    objProcSessionsRepository.UpdateBySessionKey(sessionKey, Convert.ToByte(JobStatusType.Complete));
                    SingletonLogger.Instance.Debug("Update values in ProcSession corresponding key" + sessionKey + " Value" + Convert.ToByte(JobStatusType.Complete));
                }

                SingletonLogger.Instance.Debug("No valid files found or Files are not ready to download.");
                objProcSessionsRepository.UpdateBySessionKey(sessionKey, Convert.ToByte(JobStatusType.Complete));

                //Prepare for email
                SendInputEmail inputEmail = new SendInputEmail();
                if (emailList != null)
                {
                    if (emailList.Count > 0)
                    {
                        inputEmail.SendInputFileEmail(appInfo, runId, emailList);
                    }
                }
                SingletonLogger.Instance.Debug("Email has been sent");
                return(objRunNumberAndOutputList);
            }
            catch (Exception ex)
            {
                objProcSessionsRepository.UpdateBySessionKey(sessionKey, Convert.ToByte(JobStatusType.Error));
                throw new Exception("Error in Job-init " + ex);
            }
        }
Ejemplo n.º 4
0
        public void Run()
        {
            try
            {
                #region Trigger file details

                SingletonLogger.Instance.Debug("Process start reading Trigger XML file from " + TriggerPath);
                TriggerFileReader objTriggerFileReader = new TriggerFileReader();
                objTriggerFileReader.TriggerFileLocaton = TriggerPath;
                var triggerFileDetail = objTriggerFileReader.GetTriggerFileDetail();
                StatusDirectory = triggerFileDetail.ComponentStatusDirectory + "\\status_" + Path.GetFileName(TriggerPath);
                SingletonLogger.Instance.Debug("Process successfully read trigger XML file.");

                #endregion

                #region Mapper Setting

                mapper = new PatternMatchingMapper();
                mapper.SetCurrentDateFormat();
                mapper.SetClientAndAppDetails(triggerFileDetail.RunNumber);
                mapper.SetClientAndAppDetails(triggerFileDetail.ClientName, triggerFileDetail.ApplicationName);

                #endregion

                #region Run Process
                var application             = test.Find(1);
                var runItem                 = _runComponentStatusRepository.Find(triggerFileDetail.RunComponentStatusId).RunNumberId;
                var allCompeletedComponents = _runComponentStatusRepository.FindAll().Where(x => x.RunNumberId == runItem && x.ComponentStatusId == (byte)ComponentStatusType.Completed).Select(x => x.ComponentId).ToList();
                var applicationId           = _runDetailRepository.GetApplicationIdByRunNumber(triggerFileDetail.RunNumber);
                SingletonLogger.Instance.Debug(allCompeletedComponents.Count() + " component has been completed.");
                foreach (var item in allCompeletedComponents)
                {
                    var recordList = _uploadFileRepository.FindAllByAppNComponentId(applicationId, item);
                    foreach (var recordItem in recordList)
                    {
                        List <string> fileList  = new List <string>();
                        var           inputPath = mapper.EvaluateString(recordItem.FileInputPath);
                        foreach (var mask in recordItem.InputFileMask.Split('|').ToList())
                        {
                            Regex reg = new Regex(mask.Trim());
                            fileList.AddRange(Directory.GetFiles(inputPath).Where(path => reg.IsMatch(path)).ToList());
                        }
                        if (fileList.Count > 0)
                        {
                            SingletonLogger.Instance.Debug(fileList.Count + " files found for move from " + inputPath);
                            if (recordItem.IsArchiveOutputRequired)
                            {
                                var archiveName         = mapper.EvaluateString(recordItem.ArchiveFileExpression);
                                var fileTransferSetting = _fileTransferSettingRepository.Find(recordItem.ArchiveFileTransferSettingId);
                                var outputPath          = mapper.EvaluateString(recordItem.ArchiveOutputPath);
                                Manager = new TransferManager(SetAdaptorSetting(fileTransferSetting, outputPath));
                                Manager.Processing(fileList);
                                SingletonLogger.Instance.Debug(fileList.Count + " files has been archived successfully.");
                            }
                            if (recordItem.IsMoveFileRequired)
                            {
                                var moveName            = mapper.EvaluateString(recordItem.MoveFileExpression);
                                var fileTransferSetting = _fileTransferSettingRepository.Find(recordItem.MoveFileTransferSettingId);
                                var outputPath          = mapper.EvaluateString(recordItem.MoveFilePath);
                                Manager = new TransferManager(SetAdaptorSetting(fileTransferSetting, outputPath));
                                Manager.Processing(fileList);
                                SingletonLogger.Instance.Debug(fileList.Count + " files has been moved successfully.");
                            }
                        }
                    }
                }

                SingletonLogger.Instance.Debug("Files has been uploaded successfully.");

                #endregion

                #region Move trigger file with status

                objXmlHelper.WriteComponentStatusInTriggerFile(TriggerPath, componentStartDate, DateTime.Now.ToString());
                File.Move(TriggerPath, StatusDirectory);

                #endregion
            }
            catch (Exception ex)
            {
                TriggerStatus(ex);
            }
        }