Esempio n. 1
0
        public bool PrepareInput()
        {
            //int dataSourceId = 0;
            //int.TryParse(e.ApplicationParameters["DataSourceId"].ToString(), out dataSourceId);
            //if (dataSourceId == 0)
            //    return;


            InputFileNameOnly = Path.GetFileNameWithoutExtension(InputFileName);
            //string InputFileExtension = Path.GetExtension(InputFileName);


            Keys = Cache.Instance.Bag[DataSourceId + ".keys"] as List <IdpeKey>;
            if (Keys == null)
            {
                Keys = DataSource.LoadKeys(DataSourceId);
            }


            OutputFolder       = DataSource.GetOutputFolder(DataSourceId, Keys);
            ActualOutputFolder = OutputFolder;
            OutputFileName     = DataSource.GetOutputFileName(DataSourceId, Keys, OutputFolder, InputFileNameOnly);



            string appWatchFilter = Keys.GetKeyValue(IdpeKeyTypes.WatchFilter);

            ZipInterfaceName = Keys.GetKeyValue(IdpeKeyTypes.ZipInterfaceName);

            if ((InputFileExtension.ToLower() == ".zip") || (InputFileExtension.ToLower() == ".rar") || (InputFileExtension.ToLower() == ".tar"))
            {
                OutputFolder = Path.Combine(EyediaCoreConfigurationSection.CurrentConfig.TempDirectory, Constants.IdpeBaseFolderName);
                OutputFolder = Path.Combine(OutputFolder, "RedirectedOutput");
                OutputFolder = Path.Combine(OutputFolder, DateTime.Now.ToDBDateFormat());
                OutputFolder = Path.Combine(OutputFolder, DataSourceId.ToString());
            }

            if ((!string.IsNullOrEmpty(appWatchFilter)) &&
                (appWatchFilter != Pullers.FileExtensionSupportAll))
            {
                List <string> filters = new List <string>();
                if (appWatchFilter.Contains("|"))
                {
                    filters.AddRange(appWatchFilter.ToLower().Split("|".ToCharArray()));
                }
                else
                {
                    filters.Add(appWatchFilter.ToLower());
                }

                var filterOrNot = (from f in filters
                                   where f == InputFileExtension.ToLower()
                                   select f).SingleOrDefault();
                if (filterOrNot == null)
                {
                    if (!InputFileNameOnly.StartsWith(Constants.UnzippedFilePrefix))
                    {
                        IdpeMessage warn       = new IdpeMessage(IdpeMessageCodes.IDPE_FILE_TYPE_NOT_SUPPORTED);
                        DataSource  dataSource = new DataSource(DataSourceId, string.Empty);
                        WithWarning = string.Format(warn.Message, dataSource.Name, appWatchFilter, Path.GetFileName(InputFileName));
                        ExtensionMethods.TraceInformation(WithWarning);
                        new PostMan(dataSource).Send(PostMan.__warningStartTag + WithWarning + PostMan.__warningEndTag, "File Ignored");
                        return(false);
                    }
                }
            }

            if (InputFileNameOnly.StartsWith(Constants.WCFFilePrefix))
            {
                IsRequestFromWCF = true;
                JobId            = InputFileNameOnly.Replace(Constants.WCFFilePrefix, "");
                JobId            = JobId.Replace(InputFileExtension, "");
            }
            else if (InputFileNameOnly.StartsWith(Constants.UnzippedFilePrefix))
            {
                ZipUniuqeId  = ZipFileWatcher.ExtractUniqueId(InputFileNameOnly);
                OutputFolder = Path.Combine(OutputFolder, ZipUniuqeId);
                if (!Directory.Exists(OutputFolder))
                {
                    Directory.CreateDirectory(OutputFolder);
                }

                OutputFileName = Path.Combine(OutputFolder, InputFileNameOnly + Path.GetExtension(OutputFileName));
                OutputFileName = ZipFileWatcher.ExtractActualFileName(OutputFileName);
            }

            return(true);
        }
Esempio n. 2
0
        void JobProcessor_Elapsed(object sender, ElapsedEventArgs e)
        {
            try
            {
                if (DataSourceIsDisabled())
                {
                    return;
                }

                if (DataSourceIsTemporarilyStopped())
                {
                    return;
                }

                if (!this.IsRunning)
                {
                    this.IsRunning = true;
                    DataSource.TraceInformation(" - Starting");
                    Job = JobProcessor.Instantiate(DataSource.Id, DataSource.Name, ProcessingBy);
                    Job.IsTriggeredBySqlPuller = true;
                    this.DataSource.BusinessRules.Execute(Job, null, RuleSetTypes.SqlPullInit);
                    DataTable table = ExecuteQuery();
                    InvokeAfterExecutingSelect(new SqlWatcherEventArgs(table));
                    if (table.Rows.Count == 0)
                    {
                        Job.TraceInformation(" - No records found.");
                        lock (_lock)
                        {
                            if (Registry.Instance.Entries.ContainsKey(Job.JobIdentifier))
                            {
                                Job job = Registry.Instance.Entries[Job.JobIdentifier] as Job;
                                Registry.Instance.Entries.Remove(Job.JobIdentifier);
                                job.Dispose();
                                job = null;
                            }
                        }
                    }
                    else
                    {
                        if (this.ReturnType == "I")
                        {
                            DataSource.TraceInformation("{0} - found {1} records. Processing with interface {2}", DataSource.Name, table.Rows.Count, InterfaceName);
                            string fileName = GenerateFile(table);
                            InvokeFileDownloaded(new FileSystemWatcherEventArgs(DataSourceParameters, fileName));
                            DataSource.TraceInformation("{0} - records processed with interface.", DataSource.Name);
                        }
                        else
                        {
                            DataSource.TraceInformation("{0} - found {1} records. Processing...", DataSource.Name, table.Rows.Count);
                            Job.Feed(table);

                            JobProcessor  jobProcessor = new JobProcessor();
                            StringBuilder result       = jobProcessor.ProcessJob(Job);
                            if (Job.IsErrored)
                            {
                                new SqlWatcherHelper(Job).ExecuteRecoveryScript();
                            }

                            string outputFolder       = DataSource.GetOutputFolder(DataSource.Id, DataSource.Keys);
                            string actualOutputFolder = outputFolder;
                            string outputFileName     = DataSource.GetOutputFileName(DataSource.Id, DataSource.Keys, outputFolder, DataSource.Id.ToString());

                            if (File.Exists(outputFileName))
                            {
                                string buName = Path.Combine(outputFolder, string.Format("{0}{1}_{2}", DataSource.Name, Guid.NewGuid().ToString(), Path.GetFileName(outputFileName)));
                                new FileUtility().FileCopy(outputFileName, buName, true);
                            }

                            if (result.Length > 0)
                            {
                                using (StreamWriter tw = new StreamWriter(outputFileName))
                                {
                                    tw.Write(result);
                                    tw.Close();
                                }

                                DataSource.TraceInformation("{0} - A data set from {1} was successfully processed. Output file was {2}", DataSource.Name, DataSource.Name, outputFileName);
                                Registry.Instance.Pullers.InvokeFileProcessed(DataSource.Id, jobProcessor.JobId, DataSource.Keys, outputFileName, outputFolder, string.Empty);
                            }
                            else
                            {
                                DataSource.TraceInformation("{0} - Failed to process the SQL data set from '{1}', empty data came from output writer! Check log for more details.", DataSource.Name, DataSource.Name);
                            }
                            jobProcessor.Dispose();
                        }
                    }
                    this.IsRunning = false;
                    timer.Enabled  = true;
                }
            }
            catch (Exception exp)
            {
                this.IsRunning = false;
                DataSource.TraceError(exp.ToString());
                timer.Enabled = true;
            }
            Trace.Flush();
        }