From 907fa27180e95e128f71c0d5beb66432ce6d04a7 Mon Sep 17 00:00:00 2001 From: atef Date: Fri, 21 Jun 2024 10:50:00 +0200 Subject: [PATCH] Commented S3 code and assemble in diffenrent function for better reading --- csharp/App/SaliMax/src/Program.cs | 80 ++++++++++++++++++++---------- csharp/App/SaliMax/src/S3Config.cs | 2 +- 2 files changed, 55 insertions(+), 27 deletions(-) diff --git a/csharp/App/SaliMax/src/Program.cs b/csharp/App/SaliMax/src/Program.cs index f27d39637..3c658646c 100644 --- a/csharp/App/SaliMax/src/Program.cs +++ b/csharp/App/SaliMax/src/Program.cs @@ -683,24 +683,30 @@ internal static class Program private static async Task UploadCsv(StatusRecord status, DateTime timeStamp) { + var csv = status.ToCsv().LogInfo(); + + await RestApiSavingfile(csv); + var s3Config = status.Config.S3; - var csv = status.ToCsv().LogInfo(); - - // This is temporary for Wittman, but now it's for all Installation - //await File.WriteAllTextAsync("/var/www/html/status.csv", csv.SplitLines().Where(l => !l.Contains("Secret")).JoinLines()); if (s3Config is null) return false; - //this for concatenating in one file + //Concatenating 15 files in one file + return await ConcatinatingAndCompressingFiles(timeStamp, s3Config); + } + private static async Task ConcatinatingAndCompressingFiles(DateTime timeStamp, S3Config s3Config) + { if (_counterOfFile >= NbrOfFileToConcatenate) { _counterOfFile = 0; var logFileConcatenator = new LogFileConcatenator(); var csvToSend = logFileConcatenator.ConcatenateFiles(NbrOfFileToConcatenate); - + + File.WriteAllText("test.csv",csvToSend); + var s3Path = timeStamp.ToUnixTime() + ".csv"; var request = s3Config.CreatePutRequest(s3Path); @@ -708,25 +714,8 @@ internal static class Program //Use this for no compression //var response = await request.PutAsync(new StringContent(csv)); - - //Compress CSV data to a byte array - byte[] compressedBytes; - using (var memoryStream = new MemoryStream()) - { - //Create a zip directory and put the compressed file inside - using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) - { - var entry = archive.CreateEntry("data.csv", CompressionLevel.SmallestSize); // Add CSV data to the ZIP archive - using (var entryStream = entry.Open()) - using (var writer = new StreamWriter(entryStream)) - { - writer.Write(csvToSend); - } - } - - compressedBytes = memoryStream.ToArray(); - } - + var compressedBytes = CompresseBytes(csvToSend); + // Encode the compressed byte array as a Base64 string string base64String = Convert.ToBase64String(compressedBytes); @@ -746,7 +735,46 @@ internal static class Program } _counterOfFile++; - return true; + return true; + } + + private static Byte[] CompresseBytes(String csvToSend) + { + //Compress CSV data to a byte array + byte[] compressedBytes; + using (var memoryStream = new MemoryStream()) + { + //Create a zip directory and put the compressed file inside + using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) + { + var entry = archive.CreateEntry("data.csv", CompressionLevel.SmallestSize); // Add CSV data to the ZIP archive + using (var entryStream = entry.Open()) + using (var writer = new StreamWriter(entryStream)) + { + writer.Write(csvToSend); + } + } + + compressedBytes = memoryStream.ToArray(); + } + + return compressedBytes; + } + + private static async Task RestApiSavingfile(String csv) + { + // This is for the Rest API + // Check if the directory exists, and create it if it doesn't + const String directoryPath = "/var/www/html"; + + if (!Directory.Exists(directoryPath)) + { + Directory.CreateDirectory(directoryPath); + } + + string filePath = Path.Combine(directoryPath, "status.csv"); + + await File.WriteAllTextAsync(filePath, csv.SplitLines().Where(l => !l.Contains("Secret")).JoinLines()); } private static Boolean IsPowerOfTwo(Int32 n) diff --git a/csharp/App/SaliMax/src/S3Config.cs b/csharp/App/SaliMax/src/S3Config.cs index 48ff5c218..0555e3fbf 100644 --- a/csharp/App/SaliMax/src/S3Config.cs +++ b/csharp/App/SaliMax/src/S3Config.cs @@ -64,7 +64,7 @@ public record S3Config { contentType = "application/base64; charset=utf-8"; - //contentType = "text/plain; charset=utf-8"; + //contentType = "text/plain; charset=utf-8"; //this to use when sending plain csv to S3 var payload = $"{method}\n{md5Hash}\n{contentType}\n{date}\n/{bucket.Trim('/')}/{s3Path.Trim('/')}"; using var hmacSha1 = new HMACSHA1(UTF8.GetBytes(s3Secret));