using System.Diagnostics; using InnovEnergy.App.Backend.Database; using InnovEnergy.App.Backend.DataTypes; using InnovEnergy.Lib.Utils; namespace InnovEnergy.App.Backend.DeleteOldData; public class DeleteOldDataFromS3 { public static void DeleteFrom(Installation installation, int timestamps_to_delete) { string configPath = "/home/ubuntu/.s3cfg"; string bucketPath = installation.Product ==(int)ProductType.Salidomo ? $"s3://{installation.S3BucketId}-c0436b6a-d276-4cd8-9c44-1eae86cf5d0e/{timestamps_to_delete}*" : $"s3://{installation.S3BucketId}-3e5b3069-214a-43ee-8d85-57d72000c19d/{timestamps_to_delete}*" ; //Console.WriteLine($"Deleting old data from {bucketPath}"); Console.WriteLine("Deleting data for timestamp prefix: " + timestamps_to_delete); try { ProcessStartInfo startInfo = new ProcessStartInfo { FileName = "s3cmd", Arguments = $"--config {configPath} rm {bucketPath}", RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true }; using Process process = new Process { StartInfo = startInfo }; process.OutputDataReceived += (sender, e) => { if (!string.IsNullOrEmpty(e.Data)) Console.WriteLine("[s3cmd] " + e.Data); }; process.ErrorDataReceived += (sender, e) => { if (!string.IsNullOrEmpty(e.Data)) Console.WriteLine("[s3cmd-ERR] " + e.Data); }; process.Start(); process.BeginOutputReadLine(); process.BeginErrorReadLine(); process.WaitForExit(); } catch (Exception ex) { Console.WriteLine("Exception occurred during deletion: " + ex.Message); } } public static async Task DeleteOldData() { while (true){ var installations = Db.Installations.ToList(); foreach (var installation in installations){ Console.WriteLine("DELETE S3 DATA FOR INSTALLATION "+installation.Name); long oneYearAgoTimestamp = DateTimeOffset.UtcNow.AddYears(-1).ToUnixTimeSeconds(); Console.WriteLine("delete data before "+oneYearAgoTimestamp); for (int lastDigit=4;lastDigit>=0; lastDigit--) { int timestamps_to_delete = int.Parse(oneYearAgoTimestamp.ToString().Substring(0, lastDigit+1)); timestamps_to_delete--; Console.WriteLine(timestamps_to_delete); while (true) { if (timestamps_to_delete % 10 == 0) { Console.WriteLine("delete " + timestamps_to_delete + "*"); DeleteFrom(installation,timestamps_to_delete); break; } Console.WriteLine("delete " + timestamps_to_delete + "*"); DeleteFrom(installation,timestamps_to_delete); timestamps_to_delete--; } } } Console.WriteLine("FINISHED DELETING S3 DATA FOR ALL INSTALLATIONS\n"); await Task.Delay(TimeSpan.FromDays(1)); } } }