using NLog; using System; using System.IO; using System.Net; using System.Threading; namespace GenDocCli { internal class Program { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); static int Main(string[] args) { try { if (args.Length != 8) { Console.WriteLine( "GenDocCli.exe "); return 1; } string directory = args[0]; string logFile = args[1]; string okLogFile = args[2]; string errorLogFile = args[3]; string logLevel = args[4]; int tranchengroesse = int.Parse(args[5]); int batchSize = int.Parse(args[6]); int pauseSeconds = int.Parse(args[7]); NLogConfigurator.Configure(logFile, logLevel); Logger.Info("Programmstart"); if (!Directory.Exists(directory)) { Logger.Error("Verzeichnis existiert nicht: {0}", directory); return 2; } ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; var apiClient = new ApiClient(); string[] files = Directory.GetFiles(directory, "*.json"); Logger.Info("{0} JSON-Dateien gefunden", files.Length); int totalProcessed = 0; int batchCounter = 0; foreach (string file in files) { ProcessFile( file, apiClient, okLogFile, errorLogFile); totalProcessed++; batchCounter++; if (batchCounter >= batchSize) { Logger.Info( "{0} Dateien verarbeitet. Batchgröße {1} erreicht. Pause {2}s.", totalProcessed, batchSize, pauseSeconds); Thread.Sleep(TimeSpan.FromSeconds(pauseSeconds)); batchCounter = 0; } if (totalProcessed > tranchengroesse -1) { break; } } Logger.Info("Total verarbeitet: {0} Dateien", totalProcessed); Logger.Info("Programmende"); LogManager.Shutdown(); return 0; } catch (Exception ex) { Logger.Fatal(ex, "Unerwarteter Fehler"); Logger.Error(ex, "Unerwarteter Fehler"); return 99; } } private static void ProcessFile( string file, ApiClient apiClient, string okLogFile, string errorLogFile) { try { Logger.Info("Verarbeite Datei {0}", file); string json = File.ReadAllText(file); bool success = apiClient.CallGenDoc(json).GetAwaiter().GetResult(); if (success) { File.AppendAllText( okLogFile, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss};{Path.GetFileName(file)}{Environment.NewLine}"); RenameFile(file, ".OK"); Logger.Info( "Datei erfolgreich verarbeitet: {0}", Path.GetFileName(file)); } else { File.AppendAllText( errorLogFile, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss};{Path.GetFileName(file)}{Environment.NewLine}"); RenameFile(file, ".err"); Logger.Warn( "API meldet Fehler für Datei: {0}", Path.GetFileName(file)); } } catch (Exception ex) { File.AppendAllText( errorLogFile, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss};{Path.GetFileName(file)};{ex.Message}{Environment.NewLine}"); RenameFile(file, ".err"); Logger.Error(ex, "Fehler bei Verarbeitung von {0}", Path.GetFileName(file)); } } private static void RenameFile(string fileName, string suffix) { string targetFile = fileName + suffix; if (File.Exists(targetFile)) { File.Delete(targetFile); } File.Move(fileName, targetFile); } } }