private void ScanForNewImports() { try { importFolders.CheckFolderStructure(); bool foundImport = false; bool firstRun = true; while (!cancel) { DateTime dtNow = DateTime.Now; if (firstRun || dtNow.Minute == 30 || dtNow.Minute == 0 || foundImport) { firstRun = false; // Time for Check-Run. Loggers.TechLogger.Debug("Starting Import Check"); NextImport nextImport = importFolders.GetNextImport(); if (nextImport == null) { foundImport = false; if (singleShot) { return; // used with synchronous mode } try { System.Threading.Thread.Sleep(sleepMs); } catch (ThreadInterruptedException) { } continue; } foundImport = true; if (!StartImport(nextImport)) { Loggers.TechLogger.Error("Errors: Scanner has been stopped!"); break; // exit loop! } } else { System.Threading.Thread.Sleep(sleepMs); } } } catch (Exception ex) { Loggers.TechLogger.Error("Import Scanner stopped due to fatal error:"); Loggers.TechLogger.Error(ex.ToString() + "\r\n" + ex.StackTrace); cancel = true; } }
private bool StartImport(NextImport nextImport) { if (logFileWriter != null) { throw new Exception("logFileWriter != null: are you already running an import?"); } Console.WriteLine("logging to: " + nextImport.FullLogFilename); using (logFileWriter = new StreamWriter(nextImport.FullLogFilename)) { try { WriteLog("Starting Axis-Import: " + nextImport.FullFilename); TransactionScopeFactory transactionScopeFactory = new TransactionScopeFactory(new MsSQLNHibernateConfigurationProvider(new ServerConfigurationProvider())); { AxisImport.AxisImport axisImport = this.GetImportInstance(transactionScopeFactory); axisImport.RunImport(nextImport.FullFilename, nextImport.SenderTimestamp); logFileWriter.WriteLine("Finished: " + axisImport.Statistics); } System.IO.File.Move(nextImport.FullFilename, nextImport.FullSaveFilename); WriteLog("Moved File to Save-Folder"); } catch (AxisImportCancelledException) { WriteLog("Import cancelled"); return(false); } catch (Exception ex) { WriteLog("Import failed"); WriteLog(ex + "\n" + ex.StackTrace); return(false); } finally { logFileWriter.Close(); logFileWriter = null; } } return(true); // success -> continue }
/// <summary> /// check if there are files to be processed in the In-Folder /// </summary> /// <returns>null, if there are none</returns> public NextImport GetNextImport() { CheckFolderStructure(); List <string> files = System.IO.Directory.GetFiles(GetInFolder(), "*.xtf").ToList(); string filename = GetOldestFile(files); if (filename == null) { return(null); } NextImport nextImport = new NextImport(); //nextImport.FullFilename = System.IO.Path.Combine(this.importBaseDir, filename); nextImport.FullFilename = filename; nextImport.FullLogFilename = System.IO.Path.Combine(GetOutFolder(), "" + System.IO.Path.GetFileNameWithoutExtension(filename) + ".log"); nextImport.FullSaveFilename = System.IO.Path.Combine(GetSaveFolder(), "" + System.IO.Path.GetFileName(filename)); // once again, but cheaper than moving it around. nextImport.SenderTimestamp = ParseSenderDate(filename).Value; return(nextImport); }