94 lines
3.6 KiB
C#
94 lines
3.6 KiB
C#
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));
|
|
}
|
|
}
|
|
|
|
} |