Esempio n. 1
0
        public async Task <(WorkerResult, RefreshAction)> Execute(CopyLogJob job)
        {
            var(log, targetWellbore) = await FetchData(job);

            var copyLogQuery  = CreateCopyLogQuery(log, targetWellbore);
            var copyLogResult = await witsmlClient.AddToStoreAsync(copyLogQuery);

            if (!copyLogResult.IsSuccessful)
            {
                var errorMessage = "Failed to copy log.";
                LogError(job, errorMessage);
                return(new WorkerResult(witsmlClient.GetServerHostname(), false, errorMessage, copyLogResult.Reason), null);
            }

            var copyLogDataJob    = CreateCopyLogDataJob(job, log);
            var copyLogDataResult = await copyLogDataWorker.Execute(copyLogDataJob);

            if (!copyLogDataResult.Item1.IsSuccess)
            {
                var errorMessage = "Failed to copy log data.";
                LogError(job, errorMessage);
                return(new WorkerResult(witsmlClient.GetServerHostname(), false, errorMessage, copyLogResult.Reason), null);
            }

            Log.Information("{JobType} - Job successful. Log object copied", GetType().Name);
            var refreshAction = new RefreshWellbore(witsmlClient.GetServerHostname(), job.Target.WellUid, job.Target.WellboreUid, RefreshType.Update);
            var workerResult  = new WorkerResult(witsmlClient.GetServerHostname(), true, $"Log object {log.Name} copied to: {targetWellbore.Name}");

            return(workerResult, refreshAction);
        }
Esempio n. 2
0
 private static void LogError(CopyLogJob job, string errorMessage)
 {
     Log.Error("{ErrorMessage} " +
               "Source: UidWell: {SourceWellUid}, UidWellbore: {SourceWellboreUid}, Uid: {SourceLogUid}. " +
               "Target: UidWell: {TargetWellUid}, UidWellbore: {TargetWellboreUid}.",
               errorMessage,
               job.Source.WellUid, job.Source.WellboreUid, job.Source.LogUid,
               job.Target.WellUid, job.Target.WellboreUid);
 }
        public async Task CopyLog_VerifyLogDataIsCopied()
        {
            const string logUid          = "";
            var          sourceReference = new LogReference
            {
                WellUid     = "",
                WellboreUid = "",
                LogUid      = logUid
            };
            var targetReference = new LogReference
            {
                WellUid     = "",
                WellboreUid = "",
                LogUid      = logUid
            };

            await deleteLogsWorker.Execute(new DeleteLogObjectsJob { LogReferences = targetReference.AsSingletonList <LogReference>().ToArray() });

            var job = new CopyLogJob
            {
                Source = sourceReference,
                Target = new WellboreReference
                {
                    WellUid     = targetReference.WellUid,
                    WellboreUid = targetReference.WellboreUid
                }
            };

            await worker.Execute(job);

            var sourceLog = await GetLog(sourceReference);

            var targetLog = await GetLog(targetReference);

            var currentIndex = Index.Start(sourceLog);
            var endIndex     = await GetEndIndex(targetReference);

            while (currentIndex != endIndex)
            {
                var sourceLogData = await logObjectService.ReadLogData(sourceReference.WellUid, sourceReference.WellboreUid, logUid,
                                                                       new List <string>(sourceLog.LogData.MnemonicList.Split(",")), currentIndex.Equals(Index.Start(sourceLog)),
                                                                       currentIndex.GetValueAsString(), endIndex.ToString());

                var targetLogData = await logObjectService.ReadLogData(targetReference.WellUid, targetReference.WellboreUid, logUid,
                                                                       new List <string>(targetLog.LogData.MnemonicList.Split(",")), currentIndex.Equals(Index.Start(targetLog)),
                                                                       currentIndex.GetValueAsString(), endIndex.ToString());

                Assert.Equal(sourceLogData.EndIndex, targetLogData.EndIndex);
                Assert.Equal(sourceLogData.CurveSpecifications.Count(), targetLogData.CurveSpecifications.Count());
                Assert.Equal(sourceLogData.Data.Count(), targetLogData.Data.Count());

                currentIndex = Index.End(sourceLog, sourceLogData.EndIndex);
            }
        }
Esempio n. 4
0
        private async Task <Tuple <WitsmlLog, WitsmlWellbore> > FetchData(CopyLogJob job)
        {
            var logQuery      = GetLog(witsmlSourceClient, job.Source);
            var wellboreQuery = GetWellbore(witsmlClient, job.Target);
            await Task.WhenAll(logQuery, wellboreQuery);

            var log            = await logQuery;
            var targetWellbore = await wellboreQuery;

            return(Tuple.Create(log, targetWellbore));
        }
 public async Task CopyLog()
 {
     var job = new CopyLogJob
     {
         Source = new LogReference
         {
             WellUid     = "",
             WellboreUid = "",
             LogUid      = ""
         },
         Target = new WellboreReference
         {
             WellUid     = "",
             WellboreUid = ""
         }
     };
     await worker.Execute(job);
 }
Esempio n. 6
0
        private static CopyLogDataJob CreateCopyLogDataJob(CopyLogJob job, WitsmlLog log)
        {
            var referenceForNewLog = new LogReference
            {
                WellUid     = job.Target.WellUid,
                WellboreUid = job.Target.WellboreUid,
                LogUid      = job.Source.LogUid
            };
            var copyLogDataJob = new CopyLogDataJob
            {
                LogCurvesReference = new LogCurvesReference
                {
                    LogReference = job.Source,
                    Mnemonics    = log.LogData.MnemonicList.Split(",")
                },
                Target = referenceForNewLog
            };

            return(copyLogDataJob);
        }