
* Include a last run duration field for background tasks * Improved background task progress feedback
74 lines
3.0 KiB
C#
74 lines
3.0 KiB
C#
using System;
|
|
using System.Data;
|
|
using gaseous_server.Models;
|
|
using Microsoft.VisualStudio.Web.CodeGeneration;
|
|
|
|
namespace gaseous_server.Classes
|
|
{
|
|
public class Maintenance : QueueItemStatus
|
|
{
|
|
const int MaxFileAge = 30;
|
|
|
|
public void RunMaintenance()
|
|
{
|
|
// delete files and directories older than 7 days in PathsToClean
|
|
List<string> PathsToClean = new List<string>();
|
|
PathsToClean.Add(Config.LibraryConfiguration.LibraryUploadDirectory);
|
|
PathsToClean.Add(Config.LibraryConfiguration.LibraryTempDirectory);
|
|
|
|
foreach (string PathToClean in PathsToClean)
|
|
{
|
|
Logging.Log(Logging.LogType.Information, "Maintenance", "Removing files older than " + MaxFileAge + " days from " + PathToClean);
|
|
|
|
// get content
|
|
// files first
|
|
foreach (string filePath in Directory.GetFiles(PathToClean))
|
|
{
|
|
FileInfo fileInfo = new FileInfo(filePath);
|
|
if (fileInfo.LastWriteTimeUtc.AddDays(MaxFileAge) < DateTime.UtcNow)
|
|
{
|
|
Logging.Log(Logging.LogType.Warning, "Maintenance", "Deleting file " + filePath);
|
|
File.Delete(filePath);
|
|
}
|
|
}
|
|
|
|
// now directories
|
|
foreach (string dirPath in Directory.GetDirectories(PathToClean))
|
|
{
|
|
DirectoryInfo directoryInfo = new DirectoryInfo(dirPath);
|
|
if (directoryInfo.LastWriteTimeUtc.AddDays(MaxFileAge) < DateTime.UtcNow)
|
|
{
|
|
Logging.Log(Logging.LogType.Warning, "Maintenance", "Deleting directory " + directoryInfo);
|
|
Directory.Delete(dirPath, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
Logging.Log(Logging.LogType.Information, "Maintenance", "Optimising database tables");
|
|
Database db = new Database(Database.databaseType.MySql, Config.DatabaseConfiguration.ConnectionString);
|
|
string sql = "SHOW TABLES;";
|
|
DataTable tables = db.ExecuteCMD(sql);
|
|
|
|
int StatusCounter = 1;
|
|
foreach (DataRow row in tables.Rows)
|
|
{
|
|
SetStatus(StatusCounter, tables.Rows.Count, "Optimising table " + row[0].ToString());
|
|
|
|
sql = "OPTIMIZE TABLE " + row[0].ToString();
|
|
DataTable response = db.ExecuteCMD(sql);
|
|
foreach (DataRow responseRow in response.Rows)
|
|
{
|
|
string retVal = "";
|
|
for (int i = 0; i < responseRow.ItemArray.Length; i++)
|
|
{
|
|
retVal += responseRow.ItemArray[i] + "; ";
|
|
}
|
|
Logging.Log(Logging.LogType.Information, "Maintenance", "(" + StatusCounter + "/" + tables.Rows.Count + "): Optimise table " + row[0].ToString() + ": " + retVal);
|
|
}
|
|
|
|
StatusCounter += 1;
|
|
}
|
|
ClearStatus();
|
|
}
|
|
}
|
|
} |