Files
OnDoc/Tool_API_DokumentGenerator_RunCLI/Program.cs
T
2026-07-17 14:43:33 +02:00

163 lines
5.0 KiB
C#

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 <Verzeichnis> <Logfile> <OKLogFile> <ErrorLogFile> <LogLevel> <Tranchengrösse> <Anzahl ohne Pause> <Pause in Sekunden>");
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);
}
}
}