public async Task DeleteLogsSuccessful_ReturnResult() { var job = new DeleteLogObjectsJob { LogReferences = LogUids .Select(logUid => new LogReference { WellUid = WellUid, WellboreUid = WellboreUid, LogUid = logUid }) .AsEnumerable <LogReference>() }; var result = await worker.Execute(job); Assert.True(result.workerResult.IsSuccess && result.refreshAction.WellboreUid == WellboreUid); }
public async Task DeleteLogs() { var logs = new LogReference[] { new LogReference { WellUid = "<well_uid>", WellboreUid = "<wellbore_uid>", LogUid = "<log_uid_1>" }, new LogReference { WellUid = "<well_uid>", WellboreUid = "<wellbore_uid>", LogUid = "<log_uid_2>" } }; var job = new DeleteLogObjectsJob() { LogReferences = logs }; await worker.Execute(job); }
public async Task <(WorkerResult workerResult, RefreshWellbore refreshAction)> Execute(DeleteLogObjectsJob job) { (WorkerResult workerResult, RefreshWellbore refreshAction)results; if (!job.LogReferences.Any()) { throw new ArgumentException($"A minimum of one job is required"); } if (job.LogReferences.Select(l => l.WellboreUid).Distinct().Count() != 1) { throw new ArgumentException($"All logs should belong to the same Wellbore"); } var wellUid = job.LogReferences.FirstOrDefault().WellUid; var wellboreUid = job.LogReferences.FirstOrDefault().WellboreUid; var logsExpanded = $"[ {string.Join(", ",job.LogReferences.Select(l=>l.LogUid))} ]"; var jobDescription = $"Delete {job.LogReferences.Count()} Logs under wellUid: {wellUid}, wellboreUid: {wellboreUid}. Logs: {logsExpanded}"; var queries = job.LogReferences.Select(l => CreateRequest(l)); var tasks = queries.Select(q => witsmlClient.DeleteFromStoreAsync(q)); await Task.WhenAll(tasks); if (tasks.Any(t => t.IsFaulted)) { var numFailed = tasks.Count(t => !t.Result.IsSuccessful); var reasons = string.Join(",", tasks.Where(t => !t.Result.IsSuccessful).Select(t => t.Result.Reason).ToArray()); Log.Error($"FAILURE deleting {numFailed} of {tasks.Count()} Logs due to {reasons}"); results = ( new WorkerResult(witsmlClient.GetServerHostname(), false, $"Job failed deleting {numFailed} log objects. Reasons: {reasons}"), null ); } else { Log.Information($"SUCCESS - {jobDescription}"); results = ( new WorkerResult(witsmlClient.GetServerHostname(), true, $"{tasks.Count()} log objects deleted for wellbore {wellboreUid}"), new RefreshWellbore(witsmlClient.GetServerHostname(), wellUid, wellboreUid, RefreshType.Update) ); } return(results); }