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); }
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); } }
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); }
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); }