This commit is contained in:
@@ -19,23 +19,6 @@ namespace AyaNova.Biz
|
||||
|
||||
#region JOB OPS
|
||||
|
||||
/// <summary>
|
||||
/// Get a non tracked list of jobs for an object
|
||||
/// </summary>
|
||||
/// <param name="ayObj"></param>
|
||||
///
|
||||
/// <returns></returns>
|
||||
internal static async Task<List<OpsJob>> GetJobsForObjectAsync(AyaTypeId ayObj)
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
return await ct.OpsJob
|
||||
.AsNoTracking()
|
||||
.Where(z => z.ObjectId == ayObj.ObjectId && z.ObjectType == ayObj.ObjectType)
|
||||
.OrderBy(z => z.Created)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get a non tracked list of jobs that are ready to process and exclusive only
|
||||
@@ -63,122 +46,39 @@ namespace AyaNova.Biz
|
||||
/// <returns></returns>
|
||||
private static async Task<List<OpsJob>> GetReadyJobsAsync(bool exclusiveOnly)
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
var ret = await ct.OpsJob
|
||||
.AsNoTracking()
|
||||
.Where(z => z.StartAfter < System.DateTime.UtcNow && z.Exclusive == exclusiveOnly && z.JobStatus == JobStatus.Sleeping)
|
||||
.OrderBy(z => z.Created)
|
||||
.ToListAsync();
|
||||
|
||||
return ret;
|
||||
using (AyContext ct = ServiceProviderProvider.DBContext)
|
||||
{
|
||||
var ret = await ct.OpsJob
|
||||
.AsNoTracking()
|
||||
.Where(z => z.StartAfter < System.DateTime.UtcNow && z.Exclusive == exclusiveOnly && z.JobStatus == JobStatus.Sleeping)
|
||||
.OrderBy(z => z.Created)
|
||||
.ToListAsync();
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get a non tracked list of all jobs that are not completed
|
||||
/// could be running or sleeping
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
internal static async Task<List<OpsJob>> GetAllSleepingOrRunningJobsAsync()
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
var ret = await ct.OpsJob
|
||||
.AsNoTracking()
|
||||
.Where(z => z.JobStatus == JobStatus.Sleeping || z.JobStatus == JobStatus.Running)
|
||||
.OrderBy(z => z.Created)
|
||||
.ToListAsync();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get a non tracked list of all jobs for a JobType
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
internal static async Task<List<OpsJob>> GetAllJobsForJobTypeAsync(JobType jobType)
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
var ret = await ct.OpsJob
|
||||
.AsNoTracking()
|
||||
.Where(z => z.JobType == jobType)
|
||||
.OrderBy(z => z.Created)
|
||||
.ToListAsync();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get a non tracked list of all jobs that are status running but have no last activity for XX HOURS
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
internal static async Task<List<OpsJob>> GetPotentiallyDeadRunningJobsAsync()
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
var ret = await ct.OpsJob
|
||||
.AsNoTracking()
|
||||
.Where(z => z.JobStatus == JobStatus.Sleeping || z.JobStatus == JobStatus.Running)
|
||||
.OrderBy(z => z.Created)
|
||||
.ToListAsync();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Get a count of all jobs for a JobStatus
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
internal static async Task<long> GetCountForJobStatusAsync(JobStatus jobStatus)
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
var ret = await ct.OpsJob
|
||||
.Where(z => z.JobStatus == jobStatus)
|
||||
.LongCountAsync();
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Add a new job to the database
|
||||
/// </summary>
|
||||
/// <param name="newJob"></param>
|
||||
|
||||
/// <returns></returns>
|
||||
internal static async Task<OpsJob> AddJobAsync(OpsJob newJob)
|
||||
internal static async Task AddJobAsync(OpsJob newJob)
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
await ct.OpsJob.AddAsync(newJob);
|
||||
await ct.SaveChangesAsync();
|
||||
return newJob;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove any jobs or logs for the object in question
|
||||
/// </summary>
|
||||
/// <param name="ayObj"></param>
|
||||
internal static async Task DeleteJobsForObjectAsync(AyaTypeId ayObj)
|
||||
{
|
||||
//Get a list of all jobid's for the object passed in
|
||||
List<OpsJob> jobsForObject = await GetJobsForObjectAsync(ayObj);
|
||||
if (jobsForObject.Count == 0)
|
||||
return;
|
||||
foreach (OpsJob jobToBeDeleted in jobsForObject)
|
||||
using (AyContext ct = ServiceProviderProvider.DBContext)
|
||||
{
|
||||
await RemoveJobAndLogsAsync(jobToBeDeleted.GId);
|
||||
await ct.OpsJob.AddAsync(newJob);
|
||||
await ct.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// REmove the job and it's logs
|
||||
/// Remove the job and it's logs
|
||||
/// </summary>
|
||||
/// <param name="jobIdToBeDeleted"></param>
|
||||
internal static async Task RemoveJobAndLogsAsync(Guid jobIdToBeDeleted)
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
using (AyContext ct = ServiceProviderProvider.DBContext)
|
||||
using (var transaction = await ct.Database.BeginTransactionAsync())
|
||||
{
|
||||
try
|
||||
@@ -205,18 +105,18 @@ namespace AyaNova.Biz
|
||||
/// </summary>
|
||||
/// <param name="jobId">(NOTE: Guid.empty indicates internal job)</param>
|
||||
/// <param name="statusText"></param>
|
||||
///
|
||||
internal static async Task<OpsJobLog> LogJobAsync(Guid jobId, string statusText)
|
||||
internal static async Task LogJobAsync(Guid jobId, string statusText)
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
if (string.IsNullOrWhiteSpace(statusText))
|
||||
statusText = "No status provided";
|
||||
OpsJobLog newObj = new OpsJobLog();
|
||||
newObj.JobId = jobId;
|
||||
newObj.StatusText = statusText;
|
||||
await ct.OpsJobLog.AddAsync(newObj);
|
||||
await ct.SaveChangesAsync();
|
||||
return newObj;
|
||||
using (AyContext ct = ServiceProviderProvider.DBContext)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(statusText))
|
||||
statusText = "No status provided";
|
||||
OpsJobLog newObj = new OpsJobLog();
|
||||
newObj.JobId = jobId;
|
||||
newObj.StatusText = statusText;
|
||||
await ct.OpsJobLog.AddAsync(newObj);
|
||||
await ct.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -225,14 +125,15 @@ namespace AyaNova.Biz
|
||||
/// </summary>
|
||||
/// <param name="jobId"></param>
|
||||
/// <param name="newStatus"></param>
|
||||
internal static async Task<OpsJob> UpdateJobStatusAsync(Guid jobId, JobStatus newStatus)
|
||||
internal static async Task UpdateJobStatusAsync(Guid jobId, JobStatus newStatus)
|
||||
{
|
||||
var ct = ServiceProviderProvider.DBContext;
|
||||
var oFromDb = await ct.OpsJob.SingleOrDefaultAsync(z => z.GId == jobId);
|
||||
if (oFromDb == null) return null;
|
||||
oFromDb.JobStatus = newStatus;
|
||||
await ct.SaveChangesAsync();
|
||||
return oFromDb;
|
||||
using (AyContext ct = ServiceProviderProvider.DBContext)
|
||||
{
|
||||
var oFromDb = await ct.OpsJob.SingleOrDefaultAsync(z => z.GId == jobId);
|
||||
if (oFromDb == null) return;
|
||||
oFromDb.JobStatus = newStatus;
|
||||
await ct.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
#endregion Job ops
|
||||
|
||||
@@ -295,8 +196,8 @@ namespace AyaNova.Biz
|
||||
//backup
|
||||
//System.Diagnostics.Debug.WriteLine($"JobsBiz processing backup");
|
||||
await CoreJobBackup.DoWorkAsync();//sb exclusive
|
||||
//System.Diagnostics.Debug.WriteLine($"JobsBiz processing metrics snapshotter");
|
||||
|
||||
//System.Diagnostics.Debug.WriteLine($"JobsBiz processing metrics snapshotter");
|
||||
|
||||
//Capture metrics
|
||||
CoreJobMetricsSnapshot.DoJob();
|
||||
|
||||
@@ -312,7 +213,7 @@ namespace AyaNova.Biz
|
||||
try
|
||||
{
|
||||
//System.Diagnostics.Debug.WriteLine($"JobsBiz processing NON-exclusive biz job {j.Name}");
|
||||
TaskUtil.Forget(Task.Run(() => ProcessJobAsync(j)));
|
||||
TaskUtil.Forget(Task.Run(() => ProcessJobAsync(j)));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -323,14 +224,14 @@ namespace AyaNova.Biz
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Capture metrics
|
||||
CoreJobMetricsSnapshot.DoJob();
|
||||
|
||||
|
||||
//TODO: NOTIFICATIONS
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.LogError(ex, "JobsBiz::ProcessJobsAsync unexpected error during processing");
|
||||
|
||||
Reference in New Issue
Block a user