Files
admodelling.org/INTERFACE/WebLCP/dataLayer.cs
T

162 lines
5.3 KiB
C#

using SteamWare;
using System;
namespace WebLCP
{
public class dataLayer
{
#region area public
public DS_AppTableAdapters.JobsListTableAdapter taJL;
/// <summary>
/// Effettua verifica jobs
/// </summary>
public void checkJobs()
{
string jobName = "";
string resultsDir = "";
// verifica se ci siano JOB in corso --> completati
DS_App.JobsListDataTable tabJobsAperti = taJL.getIncomp();
if (tabJobsAperti.Count > 0)
{
// dir di riferimento
string completedDir = $"{memLayer.ML.CRS("clusterBaseDir")}\\OUT\\";
// cerco SE siano finiti su filesystem...
fileMover.obj.setDirectory(completedDir);
foreach (var currJob in tabJobsAperti)
{
// calcolo nome folder...
jobName = "J" + currJob.JobId.ToString("D9");
// cerco se ci sia...
System.IO.DirectoryInfo[] elencoDir = fileMover.obj.elencoSubdir_DI(jobName);
if (elencoDir.Length > 0)
{
foreach (var currDir in elencoDir)
{
bool copyDone = false;
bool delDone = false;
bool dbDone = false;
try
{
// calcolo dir locale...
resultsDir = System.Web.HttpContext.Current.Server.MapPath($"{memLayer.ML.CRS("resultsDir")}\\{jobName}");
// sposto folder in dir locale..
fileMover.DirectoryCopy(currDir.FullName, resultsDir, true);
copyDone = true;
}
catch (Exception exc)
{
logger.lg.scriviLog($"Eccezione in copia folder a fine job:{Environment.NewLine}{exc}", tipoLog.EXCEPTION);
}
if (copyDone)
{
try
{
// registro su DB
man.taJL.updateProcessed(currJob.JobId, DateTime.Now, 0, $"{memLayer.ML.CRS("resultsDir")}{jobName}");
dbDone = true;
}
catch (Exception exc)
{
logger.lg.scriviLog($"Eccezione in salvataggio su DB a fine job:{Environment.NewLine}{exc}", tipoLog.EXCEPTION);
}
if (dbDone)
{
try
{
//elimino
fileMover.obj.setDirectory(currDir.FullName);
fileMover.obj.eliminaDir();
fileMover.obj.setDirectory(resultsDir);
delDone = true;
}
catch (Exception exc)
{
logger.lg.scriviLog($"Eccezione in eliminazione folder OUT a fine job:{Environment.NewLine}{exc}", tipoLog.EXCEPTION);
}
if (delDone)
{
try
{
string siteUrl = memLayer.ML.CRS("baseUrl");
// invio email ad utenti al completamento
string oggetto = $"Job <b>{currJob.JobDescr}</b> execution has just been completed.<br/>" +
$"Job was submitted at {currJob.dtSubmiss} and ended at {DateTime.Now}.<br/>" +
$"Please access to <a href=\"{siteUrl}\">{siteUrl}</a> in order to download results";
gestEmail.geAuth.mandaEmail(memLayer.ML.CRS("_fromEmail"), currJob.USER_NAME, $"JOB {currJob.JobDescr} completed", oggetto);
}
catch (Exception exc)
{
logger.lg.scriviLog($"Eccezione in invio email a fine job:{Environment.NewLine}{exc}", tipoLog.EXCEPTION);
}
}
}
}
}
}
}
}
}
/// <summary>
/// pulisce folder upload da files in IN lasciati da oltre 30 minuti (conf)
/// </summary>
public void cleanupTempDir()
{
int ageMaxTempFile = memLayer.ML.CRI("ageMaxTempFile");
string sourceDir = $"{memLayer.ML.CRS("tempUploadDir")}\\";
fileMover.obj.setDirectoryMapPath(sourceDir);
fileMover.obj.checkDir();
// eliminazione files!
var elencoFiles = fileMover.obj.elencoFiles_FI();
foreach (var fi in elencoFiles)
{
if (fi.CreationTime < DateTime.Now.AddMinutes(-ageMaxTempFile) && fi.Name != "PlaceHolder.file")
{
fi.Delete();
}
}
// eliminazione directory!
var elencoDir = fileMover.obj.elencoSubdir_DI();
foreach (var di in elencoDir)
{
if (di.CreationTime < DateTime.Now.AddMinutes(-ageMaxTempFile))
{
di.Delete(true);
}
}
}
/// <summary>
/// pulisce folder OUT/download
/// - invio email dopo 3 settimane (conf)
/// - elimino folder oltre 4 settimane (conf)
/// </summary>
public void cleanupJobsDir()
{
//fileMover.obj.deleteOldest();
}
#endregion
public dataLayer()
{
initAdapters();
setupConnection();
}
public static dataLayer man = new dataLayer();
private void setupConnection()
{
string connString = memLayer.ML.CRS("AdmodellingConnectionString");
taJL.Connection.ConnectionString = connString;
}
private void initAdapters()
{
taJL = new DS_AppTableAdapters.JobsListTableAdapter();
}
}
}