Example #1
0
        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);
        }
Example #2
0
 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);
        }