Skip to content

Commit

Permalink
Merge pull request equinor#464 from steinsiv/11-messageobject-api
Browse files Browse the repository at this point in the history
MessageObject support in `WitsmlExplorer.Api`
  • Loading branch information
steinsiv authored Jun 16, 2021
2 parents 86743fa + 8ea3694 commit 8b75338
Show file tree
Hide file tree
Showing 10 changed files with 295 additions and 24 deletions.
8 changes: 4 additions & 4 deletions Src/Witsml/Data/WitsmlObjectReference.cs
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
using System.Collections.Generic;
using System.Xml.Serialization;

namespace Witsml.Data
{
public class WitsmlObjectReference
{
[XmlAttribute("object")]
public string Object { get; set; } = "";
public string Object { get; set; }

[XmlAttribute("uidRef")]
public string UidRef { get; set; } = "";
public string UidRef { get; set; }

[XmlText]
public string Value { get; set; } = "";
public string Value { get; set; }

public WitsmlObjectReference() { }

public WitsmlObjectReference(string obj, string uidRef)
{
Object = obj;
UidRef = uidRef;
}

public override string ToString()
Expand Down
9 changes: 9 additions & 0 deletions Src/WitsmlExplorer.Api/Jobs/Common/MessageObjectReference.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace WitsmlExplorer.Api.Jobs.Common
{
public class MessageObjectReference
{
public string Uid { get; set; }
public string WellUid { get; set; }
public string WellboreUid { get; set; }
}
}
9 changes: 9 additions & 0 deletions Src/WitsmlExplorer.Api/Jobs/CreateMessageObjectJob.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using WitsmlExplorer.Api.Models;

namespace WitsmlExplorer.Api.Jobs
{
public class CreateMessageObjectJob
{
public MessageObject MessageObject { get; set; }
}
}
1 change: 1 addition & 0 deletions Src/WitsmlExplorer.Api/Models/JobType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ public enum JobType
CopyTrajectory,
TrimLogObject,
ModifyLogObject,
CreateMessageObject,
DeleteCurveValues,
DeleteLogObjects,
DeleteMnemonics,
Expand Down
18 changes: 18 additions & 0 deletions Src/WitsmlExplorer.Api/Models/MessageObject.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;

namespace WitsmlExplorer.Api.Models
{
public class MessageObject
{
public string Uid { get; set; }
public string Name { get; set; }
public string WellUid { get; set; }
public string WellName { get; set; }
public string WellboreName { get; set; }
public string WellboreUid { get; set; }
public string MessageText { get; set; }

public DateTime? DateTimeCreation { get; set; }
public DateTime? DateTimeLastChange { get; set; }
}
}
33 changes: 27 additions & 6 deletions Src/WitsmlExplorer.Api/Routes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,21 @@ namespace WitsmlExplorer.Api
public class Routes : CarterModule
{
private readonly ICredentialsService credentialsService;
private readonly IWellService wellService;
private readonly IWellboreService wellboreService;
private readonly IJobService jobService;
private readonly ILogObjectService logObjectService;
private readonly IMessageObjectService messageObjectService;
private readonly IRigService rigService;
private readonly ITrajectoryService trajectoryService;
private readonly IJobService jobService;
private readonly IWellboreService wellboreService;
private readonly IWellService wellService;
private readonly IDocumentRepository<Server, Guid> witsmlServerRepository;

public Routes(
ICredentialsService credentialsService,
IWellService wellService,
IWellboreService wellboreService,
ILogObjectService logObjectService,
IMessageObjectService messageObjectService,
IRigService rigService,
ITrajectoryService trajectoryService,
IJobService jobService,
Expand All @@ -39,6 +41,7 @@ public Routes(
this.wellService = wellService;
this.wellboreService = wellboreService;
this.logObjectService = logObjectService;
this.messageObjectService = messageObjectService;
this.rigService = rigService;
this.trajectoryService = trajectoryService;
this.jobService = jobService;
Expand All @@ -52,7 +55,8 @@ public Routes(
Get("/api/wells", GetAllWells);
Get("/api/wells/{wellUid}", GetWell);
Get("/api/wells/{wellUid}/wellbores/{wellboreUid}", GetWellbore);
Get("/api/wells/{wellUid}/wellbores/{wellboreUid}/logs", GetLogsForWellbore);
Get("/api/wells/{wellUid}/wellbores/{wellboreUid}/messages", GetMessagesForWellbore);
Get("/api/wells/{wellUid}/wellbores/{wellboreUid}/messages/{messageUid}", GetMessage);
Get("/api/wells/{wellUid}/wellbores/{wellboreUid}/logs/{logUid}", GetLog);
Get("/api/wells/{wellUid}/wellbores/{wellboreUid}/logs/{logUid}/logcurveinfo", GetLogCurveInfo);
Get("/api/wells/{wellUid}/wellbores/{wellboreUid}/logs/{logUid}/logdata", GetLogData);
Expand Down Expand Up @@ -136,6 +140,23 @@ private async Task GetLog(HttpRequest httpRequest, HttpResponse httpResponse)
await httpResponse.AsJson(log);
}

private async Task GetMessagesForWellbore(HttpRequest httpRequest, HttpResponse httpResponse)
{
var wellUid = httpRequest.RouteValues.As<string>("wellUid");
var wellboreUid = httpRequest.RouteValues.As<string>("wellboreUid");
var messages = await messageObjectService.GetMessageObjects(wellUid, wellboreUid);
await httpResponse.AsJson(messages);
}

private async Task GetMessage(HttpRequest httpRequest, HttpResponse httpResponse)
{
var wellUid = httpRequest.RouteValues.As<string>("wellUid");
var wellboreUid = httpRequest.RouteValues.As<string>("wellboreUid");
var messageUid = httpRequest.RouteValues.As<string>("messageUid");
var message = await messageObjectService.GetMessageObject(wellUid, wellboreUid, messageUid);
await httpResponse.AsJson(message);
}

private async Task GetLogCurveInfo(HttpRequest httpRequest, HttpResponse httpResponse)
{
var wellUid = httpRequest.RouteValues.As<string>("wellUid");
Expand All @@ -154,7 +175,7 @@ private async Task GetLogData(HttpRequest httpRequest, HttpResponse httpResponse
{
string startIndex = null;
string endIndex = null;
bool startIndexIsInclusive = true;
var startIndexIsInclusive = true;
if (httpRequest.Query.TryGetValue("startIndex", out var startIndexValues)) startIndex = startIndexValues.ToString();
if (httpRequest.Query.TryGetValue("endIndex", out var endIndexValues)) endIndex = endIndexValues.ToString();
if (httpRequest.Query.TryGetValue("startIndexIsInclusive", out var startIndexIsInclusiveStringValues))
Expand All @@ -180,7 +201,7 @@ private async Task GetLargeLogData(HttpRequest httpRequest, HttpResponse httpRes
{
string startIndex = null;
string endIndex = null;
bool startIndexIsInclusive = true;
var startIndexIsInclusive = true;
if (httpRequest.Query.TryGetValue("startIndex", out var startIndexValues)) startIndex = startIndexValues.ToString();
if (httpRequest.Query.TryGetValue("endIndex", out var endIndexValues)) endIndex = endIndexValues.ToString();
if (httpRequest.Query.TryGetValue("startIndexIsInclusive", out var startIndexIsInclusiveStringValues))
Expand Down
35 changes: 21 additions & 14 deletions Src/WitsmlExplorer.Api/Services/JobService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,26 @@ public interface IJobService

public class JobService : IJobService
{
private readonly IHubContext<NotificationsHub> hubContext;
private readonly ICopyLogWorker copyLogWorker;
private readonly IBatchModifyWellWorker batchModifyWellWorker;
private readonly ICopyLogDataWorker copyLogDataWorker;
private readonly ICopyLogWorker copyLogWorker;
private readonly ICopyTrajectoryWorker copyTrajectoryWorker;
private readonly ITrimLogObjectWorker trimLogObjectWorker;
private readonly IModifyLogObjectWorker modifyLogObjectWorker;
private readonly ICreateLogWorker createLogWorker;
private readonly ICreateMessageObjectWorker createMessageObjectWorker;
private readonly ICreateWellboreWorker createWellboreWorker;
private readonly ICreateWellWorker createWellWorker;
private readonly IDeleteCurveValuesWorker deleteCurveValuesWorker;
private readonly IDeleteLogObjectsWorker deleteLogObjectsWorker;
private readonly IDeleteMnemonicsWorker deleteMnemonicsWorker;
private readonly IDeleteWellWorker deleteWellWorker;
private readonly IDeleteWellboreWorker deleteWellboreWorker;
private readonly IDeleteTrajectoryWorker deleteTrajectoryWorker;
private readonly IRenameMnemonicWorker renameMnemonicWorker;
private readonly IModifyWellWorker modifyWellWorker;
private readonly IDeleteWellboreWorker deleteWellboreWorker;
private readonly IDeleteWellWorker deleteWellWorker;
private readonly IHubContext<NotificationsHub> hubContext;
private readonly IModifyLogObjectWorker modifyLogObjectWorker;
private readonly IModifyWellboreWorker modifyWellboreWorker;
private readonly ICreateLogWorker createLogWorker;
private readonly ICreateWellWorker createWellWorker;
private readonly ICreateWellboreWorker createWellboreWorker;
private readonly IBatchModifyWellWorker batchModifyWellWorker;
private readonly IModifyWellWorker modifyWellWorker;
private readonly IRenameMnemonicWorker renameMnemonicWorker;
private readonly ITrimLogObjectWorker trimLogObjectWorker;

public JobService(
IHubContext<NotificationsHub> hubContext,
Expand All @@ -54,6 +55,7 @@ public JobService(
IModifyWellWorker modifyWellWorker,
IModifyWellboreWorker modifyWellboreWorker,
ICreateLogWorker createLogWorker,
ICreateMessageObjectWorker createMessageObjectWorker,
ICreateWellWorker createWellWorker,
ICreateWellboreWorker createWellboreWorker,
IBatchModifyWellWorker batchModifyWellWorker)
Expand All @@ -74,6 +76,7 @@ public JobService(
this.modifyWellWorker = modifyWellWorker;
this.modifyWellboreWorker = modifyWellboreWorker;
this.createLogWorker = createLogWorker;
this.createMessageObjectWorker = createMessageObjectWorker;
this.createWellWorker = createWellWorker;
this.createWellboreWorker = createWellboreWorker;
this.batchModifyWellWorker = batchModifyWellWorker;
Expand Down Expand Up @@ -145,6 +148,10 @@ public async Task CreateJob(JobType jobType, Stream jobStream)
var createLogObject = await jobStream.Deserialize<CreateLogJob>();
(result, refreshAction) = await createLogWorker.Execute(createLogObject);
break;
case JobType.CreateMessageObject:
var createMessageObjectJob = await jobStream.Deserialize<CreateMessageObjectJob>();
(result, refreshAction) = await createMessageObjectWorker.Execute(createMessageObjectJob);
break;
case JobType.CreateWell:
var createWellJob = await jobStream.Deserialize<CreateWellJob>();
(result, refreshAction) = await createWellWorker.Execute(createWellJob);
Expand All @@ -163,10 +170,10 @@ public async Task CreateJob(JobType jobType, Stream jobStream)

if (hubContext != null)
{
await hubContext.Clients.All.SendCoreAsync("jobFinished", new object[] {result});
await hubContext.Clients.All.SendCoreAsync("jobFinished", new object[] { result });

if (refreshAction != null)
await hubContext.Clients.All.SendCoreAsync("refresh", new object[] {refreshAction});
await hubContext.Clients.All.SendCoreAsync("refresh", new object[] { refreshAction });
}
}
}
Expand Down
100 changes: 100 additions & 0 deletions Src/WitsmlExplorer.Api/Services/MessageObjectService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Serilog;
using Witsml.Data;
using Witsml.Extensions;
using Witsml.ServiceReference;
using WitsmlExplorer.Api.Models;

namespace WitsmlExplorer.Api.Services
{
public interface IMessageObjectService
{
Task<MessageObject> GetMessageObject(string wellUid, string wellboreUid, string msgUid);
Task<IEnumerable<MessageObject>> GetMessageObjects(string wellUid, string wellboreUid);
}

public class MessageObjectService : WitsmlService, IMessageObjectService
{
public MessageObjectService(IWitsmlClientProvider witsmlClientProvider) : base(witsmlClientProvider)
{
}

public async Task<MessageObject> GetMessageObject(string wellUid, string wellboreUid, string msgUid)
{
var query = CreateMessageQuery(wellUid, wellboreUid, msgUid);
var result = await WitsmlClient.GetFromStoreAsync(query, OptionsIn.All);
var messageObject = result.Messages.FirstOrDefault();
if (messageObject == null) return null;

return new MessageObject
{
WellboreUid = messageObject.UidWellbore,
WellboreName = messageObject.NameWellbore,
WellUid = messageObject.UidWell,
WellName = messageObject.NameWell,
Uid = messageObject.Uid,
Name = messageObject.Name,
MessageText = messageObject.MessageText,
DateTimeCreation = StringHelpers.ToDateTime(messageObject.CommonData.DTimCreation),
DateTimeLastChange = StringHelpers.ToDateTime(messageObject.CommonData.DTimLastChange)
};
}

public async Task<IEnumerable<MessageObject>> GetMessageObjects(string wellUid, string wellboreUid)
{
var start = DateTime.Now;
var query = CreateMessageQuery(wellUid, wellboreUid);
var result = await WitsmlClient.GetFromStoreAsync(query, OptionsIn.All);
var messageObject = result.Messages.FirstOrDefault();
if (messageObject == null) return null;

var messageObjects = result.Messages
.Select(messageObject =>
new MessageObject
{
Uid = messageObject.Uid,
Name = messageObject.Name,
WellboreUid = messageObject.UidWellbore,
WellboreName = messageObject.NameWellbore,
WellUid = messageObject.UidWell,
WellName = messageObject.NameWell,
MessageText = messageObject.MessageText,
DateTimeLastChange = StringHelpers.ToDateTime(messageObject.CommonData.DTimLastChange)
})
.OrderBy(messageObject => messageObject.WellboreName).ToList();
var elapsed = DateTime.Now.Subtract(start).Milliseconds / 1000.0;
Log.Debug($"Fetched {messageObjects.Count} messageobjects in {elapsed} seconds");
return messageObjects;
}

private static WitsmlMessages CreateMessageQuery(string wellUid, string wellboreUid, string messageUid)
{
return new()
{
Messages = new WitsmlMessage
{
UidWellbore = wellboreUid,
UidWell = wellUid,
Uid = messageUid,
CommonData = new WitsmlCommonData()
}.AsSingletonList()
};
}

private static WitsmlMessages CreateMessageQuery(string wellUid, string wellboreUid)
{
return new()
{
Messages = new WitsmlMessage
{
UidWellbore = wellboreUid,
UidWell = wellUid,
CommonData = new WitsmlCommonData()
}.AsSingletonList()
};
}
}
}
Loading

0 comments on commit 8b75338

Please sign in to comment.