163 lines
5.0 KiB
C#
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);
|
|
}
|
|
}
|
|
} |