Esempio n. 1
0
        /// <summary>
        /// Invoke executable file, insert GUID and EXE information into Transaction table.
        /// </summary>
        /// <param name="exePath">Executable file path</param>
        /// <param name="systemGuid">System GUIID</param>
        /// <param name="triggerFilePath">Trigger file path</param>
        public void InvokeExeAndDatabaseInsertion(string exePath, string systemGuid, string triggerFilePath)
        {
            TriggerFileReader objTriggerFileReader = new TriggerFileReader();

            objTriggerFileReader.TriggerFileLocaton = triggerFilePath;
            var triggerFileDetail = objTriggerFileReader.GetTriggerFileDetail();

            #region Make an entry in table that EXE is running now
            Transaction newTransaction = new Transaction(systemGuid);
            newTransaction.ExeName     = Path.GetFileName(exePath);
            newTransaction.Application = triggerFileDetail.ApplicationName != null ? triggerFileDetail.ApplicationName : "NA";
            newTransaction.StartedAt   = DateTime.Now;
            newTransaction.Enabled     = true;
            var IsNewCreated = newTransaction.Save(true);
            #endregion

            #region Call EXE using trigger file
            SingletonLogger.Instance.Debug("Service start executing the " + exePath);
            TriggerBasedInvoke         triggerInvoker = new TriggerBasedInvoke(exePath, triggerFilePath, systemGuid);
            System.Diagnostics.Process proc           = triggerInvoker.Invoke();
            SingletonLogger.Instance.Debug("Service successfully executed the " + exePath);
            if (IsNewCreated)
            {
                newTransaction.ProcessId = proc.Id;
                newTransaction.Save();
                Licence.UpdateLastRunStartTime(exePath, proc.StartTime);
                SingletonLogger.Instance.Debug("Service successfully inserted information in Transaction table.");
            }
            #endregion
        }
Esempio n. 2
0
        public string ReadExcutableFileLocationFromTriigerFile()
        {
            TriggerFileReader triggerFileReaderObj = new TriggerFileReader();

            triggerFileReaderObj.TriggerFileLocaton = TriggerFilePath;

            var triggerFileInfo = triggerFileReaderObj.GetTriggerFileDetail();

            if (String.IsNullOrEmpty(triggerFileInfo.ComponentExe))
            {
                throw new Exception("Executable file location not found in trigger file. Trigger file name is " + Path.GetFileName(TriggerFilePath));
            }

            return(triggerFileInfo.ComponentExe);
        }
Esempio n. 3
0
        public TriggerFileReader ProcessTriggerFile()
        {
            #region Move trigger file to Component trigger location
            //Here we are moving file from invoke location to component trigger location
            //so that invoker doesn't pick it again & again
            if (Directory.Exists(ConfigurationManager.AppSettings["TriggerFileDirectory"]))
            {
                Directory.CreateDirectory(ConfigurationManager.AppSettings["TriggerFileDirectory"]);
            }

            if (invokerTriggerFile == null)
            {
                throw new ArgumentNullException("Invoker trigger file is null or empty.");
            }

            if (!File.Exists(invokerTriggerFile))
            {
                SingletonLogger.Instance.Debug("Trigger file not found at " + invokerTriggerFile + " ");
                return(null);
            }

            //component trigger file location
            triggerFile = Path.Combine(ConfigurationManager.AppSettings["TriggerFileDirectory"], Path.GetFileName(invokerTriggerFile));
#if DEBUG
            File.Delete(triggerFile);
            File.Copy(invokerTriggerFile, triggerFile);
#else
            File.Move(invokerTriggerFile, triggerFile);
#endif
            SingletonLogger.Instance.Debug(string.Format("Trigger file successfully copied at  {0} location.", triggerFile));

            #endregion

            #region Read Trigger file
            objXmlHelper = new XmlHelper();
            SingletonLogger.Instance.Debug("Process start reading Trigger XML file " + triggerFile);
            var objTriggerFileReader = new TriggerFileReader {
                TriggerFileLocaton = triggerFile
            };
            triggerFileDetail = objTriggerFileReader.GetTriggerFileDetail();
            if (triggerFileDetail == null)
            {
                throw new ArgumentNullException("No trigger File Detail");
            }
            #endregion
            return(triggerFileDetail);
        }
Esempio n. 4
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
            }
        }
Esempio n. 5
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);
            }
        }