private async Task <WitsmlLog> GetLog(LogReference logReference)
        {
            var logQuery = LogQueries.QueryById(logReference.WellUid, logReference.WellboreUid, logReference.LogUid);
            var logs     = await client.GetFromStoreAsync(logQuery, OptionsIn.All);

            return(!logs.Logs.Any() ? null : logs.Logs.First());
        }
Ejemplo n.º 2
0
        private async Task <WitsmlLog> GetLogHeader(string wellUid, string wellboreUid, string logUid)
        {
            var query  = LogQueries.QueryById(wellUid, wellboreUid, logUid);
            var result = await WitsmlClient.GetFromStoreAsync(query, OptionsIn.HeaderOnly);

            return(result.Logs.FirstOrDefault());
        }
        private async Task <Index> GetEndIndex(LogReference logReference)
        {
            var logQuery = LogQueries.QueryById(logReference.WellUid, logReference.WellboreUid, logReference.LogUid);
            var logs     = await client.GetFromStoreAsync(logQuery, OptionsIn.HeaderOnly);

            return(Index.End(logs.Logs.First()));
        }
Ejemplo n.º 4
0
        private static async Task <WitsmlLog> GetLog(IWitsmlClient client, LogReference logReference)
        {
            var logQuery = LogQueries.QueryById(logReference.WellUid, logReference.WellboreUid, logReference.LogUid);
            var result   = await client.GetFromStoreAsync(logQuery, OptionsIn.All);

            return(!result.Logs.Any() ? null : result.Logs.First());
        }
Ejemplo n.º 5
0
        public async Task CreateLogObject_BasedOnExisting()
        {
            var wellUid       = "W-5232880";
            var wellboreUid   = "B-5232880";
            var logUid        = "GM_Measured_Depth_GMDepth";
            var queryExisting = LogQueries.QueryById(wellUid, wellboreUid, logUid);
            var existingLogs  = await client.GetFromStoreAsync(queryExisting, OptionsIn.All);

            var existing = existingLogs.Logs.First();

            var createLogQuery = CreateLogQuery(
                existing.UidWell,
                existing.NameWell,
                existing.UidWellbore,
                existing.NameWellbore,
                existing.Name + " (interval)",
                existing.IndexType,
                existing.IndexCurve,
                existing.LogCurveInfo.Single(logCurveInfo => logCurveInfo.Mnemonic == existing.IndexCurve.Value));

            var result = await client.AddToStoreAsync(createLogQuery);

            Assert.True(result.IsSuccessful);
            output.WriteLine("Created log object with uid: " + createLogQuery.Logs.First().Uid);
        }
        public async Task <(WorkerResult, RefreshAction)> Execute(ModifyLogObjectJob job)
        {
            Verify(job.LogObject);

            var wellUid     = job.LogObject.WellUid;
            var wellboreUid = job.LogObject.WellboreUid;
            var logUid      = job.LogObject.Uid;

            var query = CreateRequest(wellUid, wellboreUid, logUid,
                                      new WitsmlLog
            {
                Uid         = logUid,
                UidWell     = wellUid,
                UidWellbore = wellboreUid,
                Name        = job.LogObject.Name
            });
            var result = await witsmlClient.UpdateInStoreAsync(query);

            if (result.IsSuccessful)
            {
                Log.Information("{JobType} - Job successful", GetType().Name);
                var refreshAction = new RefreshWellbore(witsmlClient.GetServerHostname(), wellUid, wellboreUid, RefreshType.Update);
                return(new WorkerResult(witsmlClient.GetServerHostname(), true, $"Log updated ({job.LogObject.Name} [{logUid}])"), refreshAction);
            }

            Log.Error($"Job failed. An error occurred when modifying logobject: {job.LogObject.PrintProperties()}");
            var logQuery = LogQueries.QueryById(wellUid, wellboreUid, logUid);
            var logs     = await witsmlClient.GetFromStoreAsync(logQuery, OptionsIn.IdOnly);

            var log = logs.Logs.FirstOrDefault();
            EntityDescription description = null;

            if (log != null)
            {
                description = new EntityDescription
                {
                    WellName     = log.NameWell,
                    WellboreName = log.NameWellbore,
                    ObjectName   = log.Name
                };
            }

            return(new WorkerResult(witsmlClient.GetServerHostname(), false, "Failed to update log", result.Reason, description), null);
        }
Ejemplo n.º 7
0
        public async Task <(WorkerResult workerResult, RefreshLogObject refreshAction)> Execute(DeleteMnemonicsJob job)
        {
            var wellUid         = job.LogObject.WellUid;
            var wellboreUid     = job.LogObject.WellboreUid;
            var logUid          = job.LogObject.LogUid;
            var mnemonics       = job.Mnemonics;
            var mnemonicsString = string.Join(", ", mnemonics);

            var query  = LogQueries.DeleteMnemonicsQuery(wellUid, wellboreUid, logUid, mnemonics);
            var result = await witsmlClient.DeleteFromStoreAsync(query);

            if (result.IsSuccessful)
            {
                Log.Information("{JobType} - Job successful.", GetType().Name);
                var refreshAction = new RefreshLogObject(witsmlClient.GetServerHostname(), wellUid, wellboreUid, logUid, RefreshType.Update);
                var workerResult  = new WorkerResult(witsmlClient.GetServerHostname(), true, $"Deleted mnemonics: {mnemonicsString} for log: {logUid}");
                return(workerResult, refreshAction);
            }

            Log.Error("Failed to delete mnemonics for log object. WellUid: {WellUid}, WellboreUid: {WellboreUid}, Uid: {LogUid}, Mnemonics: {MnemonicsString}",
                      wellUid,
                      wellboreUid,
                      logUid,
                      mnemonics);

            query = LogQueries.QueryById(wellUid, wellboreUid, logUid);
            var queryResult = await witsmlClient.GetFromStoreAsync(query, OptionsIn.IdOnly);

            var log = queryResult.Logs.First();
            EntityDescription description = null;

            if (log != null)
            {
                description = new EntityDescription
                {
                    WellName     = log.NameWell,
                    WellboreName = log.NameWellbore,
                    ObjectName   = log.Name
                };
            }

            return(new WorkerResult(witsmlClient.GetServerHostname(), false, "Failed to delete mnemonics", result.Reason, description), null);
        }
Ejemplo n.º 8
0
        public async Task <LogObject> GetLog(string wellUid, string wellboreUid, string logUid, OptionsIn queryOptions)
        {
            var query  = LogQueries.QueryById(wellUid, wellboreUid, logUid);
            var result = await WitsmlClient.GetFromStoreAsync(query, queryOptions);

            var witsmlLog = result.Logs.FirstOrDefault();

            if (witsmlLog == null)
            {
                return(null);
            }

            var logObject = new LogObject
            {
                Uid            = witsmlLog.Uid,
                Name           = witsmlLog.Name,
                IndexType      = witsmlLog.IndexType,
                WellUid        = witsmlLog.UidWell,
                WellName       = witsmlLog.NameWell,
                WellboreUid    = witsmlLog.UidWellbore,
                WellboreName   = witsmlLog.NameWellbore,
                IndexCurve     = witsmlLog.IndexCurve.Value,
                ObjectGrowing  = StringHelpers.ToBooleanSafe(witsmlLog.ObjectGrowing),
                ServiceCompany = witsmlLog.ServiceCompany,
                RunNumber      = witsmlLog.RunNumber
            };

            if (string.IsNullOrEmpty(witsmlLog.IndexType))
            {
                return(logObject);
            }

            logObject.StartIndex = GetIndexAsString(witsmlLog.IndexType, witsmlLog.StartIndex, witsmlLog.StartDateTimeIndex);
            logObject.EndIndex   = GetIndexAsString(witsmlLog.IndexType, witsmlLog.EndIndex, witsmlLog.EndDateTimeIndex);

            return(logObject);
        }
        public async Task <(WorkerResult, RefreshAction)> Execute(TrimLogDataJob job)
        {
            var witsmlLogQuery = LogQueries.QueryById(job.LogObject.WellUid, job.LogObject.WellboreUid, job.LogObject.LogUid);
            var witsmlLogs     = await witsmlClient.GetFromStoreAsync(witsmlLogQuery, OptionsIn.HeaderOnly);

            var witsmlLog = witsmlLogs.Logs.First();

            var currentStartIndex = Index.Start(witsmlLog);
            var newStartIndex     = Index.Start(witsmlLog, job.StartIndex);
            var currentEndIndex   = Index.End(witsmlLog);
            var newEndIndex       = Index.End(witsmlLog, job.EndIndex);

            bool trimmedStartOfLog = false;

            if (currentStartIndex < newStartIndex && newStartIndex < currentEndIndex)
            {
                var trimLogObjectStartQuery = CreateRequest(
                    job.LogObject.WellUid,
                    job.LogObject.WellboreUid,
                    job.LogObject.LogUid,
                    witsmlLog.IndexType,
                    deleteTo: newStartIndex);

                var result = await witsmlClient.DeleteFromStoreAsync(trimLogObjectStartQuery);

                if (result.IsSuccessful)
                {
                    trimmedStartOfLog = true;
                }
                else
                {
                    Log.Error($"Job failed. An error occurred when trimming logobject start: {job.PrintProperties()}");
                    return(new WorkerResult(witsmlClient.GetServerHostname(), false, "Failed to update start of log", result.Reason, GetDescription(witsmlLog)), null);
                }
            }

            bool trimmedEndOfLog = false;

            if (currentEndIndex > newEndIndex && newEndIndex > currentStartIndex)
            {
                var trimLogObjectEndQuery = CreateRequest(
                    job.LogObject.WellUid,
                    job.LogObject.WellboreUid,
                    job.LogObject.LogUid,
                    witsmlLog.IndexType,
                    deleteFrom: newEndIndex);

                var result = await witsmlClient.DeleteFromStoreAsync(trimLogObjectEndQuery);

                if (result.IsSuccessful)
                {
                    trimmedEndOfLog = true;
                }
                else
                {
                    Log.Error($"Job failed. An error occurred when trimming logobject end: {job.PrintProperties()}");
                    return(new WorkerResult(witsmlClient.GetServerHostname(), false, "Failed to update end of log", result.Reason, GetDescription(witsmlLog)), null);
                }
            }

            var refreshAction = new RefreshLogObject(witsmlClient.GetServerHostname(), job.LogObject.WellUid, job.LogObject.WellboreUid, job.LogObject.LogUid, RefreshType.Update);

            if (trimmedStartOfLog && trimmedEndOfLog)
            {
                return(new WorkerResult(witsmlClient.GetServerHostname(), true, $"Updated start/end of log [{job.LogObject.LogUid}]"), refreshAction);
            }
            if (trimmedStartOfLog)
            {
                return(new WorkerResult(witsmlClient.GetServerHostname(), true, $"Updated start of log [{job.LogObject.LogUid}]"), refreshAction);
            }
            if (trimmedEndOfLog)
            {
                return(new WorkerResult(witsmlClient.GetServerHostname(), true, $"Updated end of log [{job.LogObject.LogUid}]"), refreshAction);
            }

            return(new WorkerResult(witsmlClient.GetServerHostname(), false, $"Failed to update start/end of log [{job.LogObject.LogUid}]", "Invalid index range"), null);
        }