Пример #1
0
        public async Task DeleteCurveValues()
        {
            var wellUid     = "<WellUid>";
            var wellboreUid = "<WellboreUid";
            var logUid      = "<LogUid>";
            var mnemonics   = new List <string> {
                "BLOCKPOS", "CHOKE_PRESS", "UKNOWN", "DEPTH_HOLE"
            };
            var indexRanges = new List <IndexRange>
            {
                new IndexRange
                {
                    StartIndex = new DateTime(2019, 11, 20).ToString(CultureInfo.InvariantCulture),
                    EndIndex   = new DateTime(2019, 11, 28).ToString(CultureInfo.InvariantCulture)
                }
            };

            var job = new DeleteCurveValuesJob
            {
                LogReference = new LogReference
                {
                    WellUid     = wellUid,
                    WellboreUid = wellboreUid,
                    LogUid      = logUid
                },
                Mnemonics   = mnemonics,
                IndexRanges = indexRanges
            };

            var(result, _) = await worker.Execute(job);

            Assert.True(result.IsSuccess, result.Reason);
        }
        private static IEnumerable <WitsmlLogs> CreateDeleteQueries(DeleteCurveValuesJob job, WitsmlLog witsmlLog, List <WitsmlLogCurveInfo> logCurveInfos)
        {
            var indexRanges = job.IndexRanges.ToList().Select(range => (Index.Start(witsmlLog, range.StartIndex), Index.End(witsmlLog, range.EndIndex)));

            return(indexRanges
                   .Where(range => range.Item1 >= Index.Start(witsmlLog) && range.Item2 <= Index.End(witsmlLog))
                   .Select(range => LogQueries.DeleteLogCurveContent(job.LogReference.WellUid, job.LogReference.WellboreUid, job.LogReference.LogUid, witsmlLog.IndexType,
                                                                     logCurveInfos, range.Item1, range.Item2)));
        }
        public async Task <(WorkerResult workerResult, RefreshLogObject refreshAction)> Execute(DeleteCurveValuesJob job)
        {
            var wellUid     = job.LogReference.WellUid;
            var wellboreUid = job.LogReference.WellboreUid;
            var logUid      = job.LogReference.LogUid;
            var witsmlLog   = await GetLogHeader(wellUid, wellboreUid, logUid);

            if (witsmlLog == null)
            {
                var reason = $"Did not find witsml log for wellUid: {wellUid}, wellboreUid: {wellboreUid}, logUid: {logUid}";
                return(new WorkerResult(witsmlClient.GetServerHostname(), false, "Unable to find log", reason), null);
            }

            var logCurveInfos = witsmlLog.LogCurveInfo.Where(logCurveInfo => job.Mnemonics.Contains(logCurveInfo.Mnemonic)).ToList();
            var deleteQueries = CreateDeleteQueries(job, witsmlLog, logCurveInfos);

            foreach (var query in deleteQueries)
            {
                var result = await witsmlClient.DeleteFromStoreAsync(query);

                if (result.IsSuccessful)
                {
                    Log.Information("{JobType} - Job successful.", GetType().Name);
                }
                else
                {
                    Log.Error("Failed to delete mnemonics for log object. WellUid: {WellUid}, WellboreUid: {WellboreUid}, Uid: {LogUid}, Mnemonics: {MnemonicsString}",
                              wellUid,
                              wellboreUid,
                              logUid,
                              string.Join(", ", job.Mnemonics));

                    return(new WorkerResult(witsmlClient.GetServerHostname(), false, "Failed to delete mnemonics", result.Reason, GetDescription(witsmlLog)), null);
                }
            }

            var refreshAction  = new RefreshLogObject(witsmlClient.GetServerHostname(), wellUid, wellboreUid, logUid, RefreshType.Update);
            var mnemonicsOnLog = string.Join(", ", logCurveInfos.Select(logCurveInfo => logCurveInfo.Mnemonic));
            var workerResult   = new WorkerResult(witsmlClient.GetServerHostname(), true, $"Deleted curve info values for mnemonics: {mnemonicsOnLog}, for log: {logUid}");

            return(workerResult, refreshAction);
        }