forked from ddrilling/AsbCloudServer
Rename DetectedOperation props simmmilar to WellOperation
This commit is contained in:
parent
6738bb3b35
commit
4a91a29f07
@ -4,16 +4,16 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
|
|||||||
{
|
{
|
||||||
public class DetectedOperation
|
public class DetectedOperation
|
||||||
{
|
{
|
||||||
public int IdType { get; set; }
|
public int IdCategory { get; set; }
|
||||||
public int IdUsersAtStart { get; set; }
|
public int IdUsersAtStart { get; set; }
|
||||||
public DateTimeOffset Begin { get; set; }
|
public DateTimeOffset DateStart { get; set; }
|
||||||
public DateTimeOffset End { get; set; }
|
public DateTimeOffset DateEnd { get; set; }
|
||||||
public double DurationMinutes => (End - Begin).TotalMinutes;
|
public double DurationMinutes => (DateEnd - DateStart).TotalMinutes;
|
||||||
public double BeginWellDepth { get; set; }
|
public double DepthStart { get; set; }
|
||||||
public double EndWellDepth { get; set; }
|
public double DepthEnd { get; set; }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
=> $"{IdType}\t{Begin:G}\t{End:G}\t{DurationMinutes:#0.#}\t{BeginWellDepth:#0.#}\t{EndWellDepth:#0.#}";
|
=> $"{IdCategory}\t{DateStart:G}\t{DateEnd:G}\t{DurationMinutes:#0.#}\t{DepthStart:#0.#}\t{DepthEnd:#0.#}";
|
||||||
//=> $"{{\"type\": {IdType},\t\"begin\":\"{Begin:G}\",\t\"end\":\"{End:G}\",\t\"depthBegin\":\"{BeginWellDepth:#0.#}\",\t\"depthEnd\":\"{EndWellDepth:#0.#}\"}}";
|
//=> $"{{\"type\": {IdType},\t\"begin\":\"{Begin:G}\",\t\"end\":\"{End:G}\",\t\"depthBegin\":\"{BeginWellDepth:#0.#}\",\t\"depthEnd\":\"{EndWellDepth:#0.#}\"}}";
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -44,12 +44,12 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
|
|||||||
{
|
{
|
||||||
var result = new DetectedOperation
|
var result = new DetectedOperation
|
||||||
{
|
{
|
||||||
IdType = IdOperationType,
|
IdCategory = IdOperationType,
|
||||||
IdUsersAtStart = telemetry[position].IdUser ?? -1,
|
IdUsersAtStart = telemetry[position].IdUser ?? -1,
|
||||||
Begin = telemetry[position].DateTime,
|
DateStart = telemetry[position].DateTime,
|
||||||
End = telemetry[skip].DateTime,
|
DateEnd = telemetry[skip].DateTime,
|
||||||
BeginWellDepth = telemetry[position].WellDepth ?? -1d,
|
DepthStart = telemetry[position].WellDepth ?? -1d,
|
||||||
EndWellDepth = telemetry[skip].WellDepth ?? -1d,
|
DepthEnd = telemetry[skip].WellDepth ?? -1d,
|
||||||
};
|
};
|
||||||
position = skip + FragmentLength;
|
position = skip + FragmentLength;
|
||||||
return result;
|
return result;
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
using AsbCloudDb.Model;
|
using AsbCloudDb.Model;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.Hosting;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace AsbCloudInfrastructure.Services.DetectOperations
|
namespace AsbCloudInfrastructure.Services.DetectOperations
|
||||||
{
|
{
|
||||||
public class DetectorService
|
public class OperationDetectorBackgroundService : BackgroundService
|
||||||
{
|
{
|
||||||
readonly IEnumerable<DetectorAbstract> detectors = new List<DetectorAbstract>
|
private readonly IEnumerable<DetectorAbstract> detectors = new List<DetectorAbstract>
|
||||||
{
|
{
|
||||||
new Detectors.DetectorSlipsTime(),
|
new Detectors.DetectorSlipsTime(),
|
||||||
// new Detectors.DetectorDrillingRotor(),
|
// new Detectors.DetectorDrillingRotor(),
|
||||||
@ -19,17 +22,74 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
|
|||||||
|
|
||||||
private readonly int minStepLength;
|
private readonly int minStepLength;
|
||||||
private readonly int minFragmentLength;
|
private readonly int minFragmentLength;
|
||||||
|
private readonly string connectionString;
|
||||||
|
private readonly TimeSpan period = TimeSpan.FromHours(1);
|
||||||
|
|
||||||
public DetectorService()
|
public OperationDetectorBackgroundService(IConfiguration configuration)
|
||||||
{
|
{
|
||||||
minStepLength = detectors.Min(d => d.StepLength);
|
minStepLength = detectors.Min(d => d.StepLength);
|
||||||
minStepLength = minStepLength > 0 ? minStepLength : 3;
|
minStepLength = minStepLength > 0 ? minStepLength : 3;
|
||||||
|
|
||||||
minFragmentLength = detectors.Min(d => d.FragmentLength);
|
minFragmentLength = detectors.Min(d => d.FragmentLength);
|
||||||
minFragmentLength = minFragmentLength > 0 ? minFragmentLength : 6;
|
minFragmentLength = minFragmentLength > 0 ? minFragmentLength : 6;
|
||||||
|
|
||||||
|
connectionString = configuration.GetConnectionString("DefaultConnection");
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<DetectedOperation>> DetectOperationsAsync(int idTelemetry, DateTimeOffset begin, IAsbCloudDbContext db, CancellationToken token)
|
protected override async Task ExecuteAsync(CancellationToken token = default)
|
||||||
|
{
|
||||||
|
var timeToStartAnalysis = DateTime.Now;
|
||||||
|
var options = new DbContextOptionsBuilder<AsbCloudDbContext>()
|
||||||
|
.UseNpgsql(connectionString)
|
||||||
|
.Options;
|
||||||
|
|
||||||
|
while (!token.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
if (DateTime.Now > timeToStartAnalysis)
|
||||||
|
{
|
||||||
|
timeToStartAnalysis = DateTime.Now + period;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using var context = new AsbCloudDbContext(options);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Trace.TraceError(ex.Message);
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
}
|
||||||
|
GC.Collect();
|
||||||
|
}
|
||||||
|
|
||||||
|
var ms = (int)(timeToStartAnalysis - DateTime.Now).TotalMilliseconds;
|
||||||
|
ms = ms > 100 ? ms : 100;
|
||||||
|
await Task.Delay(ms, token).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task StopAsync(CancellationToken token)
|
||||||
|
{
|
||||||
|
await base.StopAsync(token).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<DateTime> GetLastAnalysisDateAsync(int idTelemetry, IAsbCloudDbContext db, CancellationToken token)
|
||||||
|
{
|
||||||
|
var lastAnalysisInDb = await (from analysis in db.TelemetryAnalysis
|
||||||
|
where analysis.IdTelemetry == idTelemetry
|
||||||
|
orderby analysis.UnixDate
|
||||||
|
select analysis)
|
||||||
|
.LastOrDefaultAsync(token)
|
||||||
|
.ConfigureAwait(false);
|
||||||
|
|
||||||
|
DateTime lastAnalysisDate = new DateTime(0, DateTimeKind.Utc);
|
||||||
|
|
||||||
|
if (lastAnalysisInDb is not null)
|
||||||
|
lastAnalysisDate = DateTime.UnixEpoch.AddSeconds(lastAnalysisInDb.DurationSec + lastAnalysisInDb.UnixDate);
|
||||||
|
|
||||||
|
return lastAnalysisDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<IEnumerable<DetectedOperation>> DetectOperationsAsync(int idTelemetry, DateTimeOffset begin, IAsbCloudDbContext db, CancellationToken token)
|
||||||
{
|
{
|
||||||
var query = db.TelemetryDataSaub
|
var query = db.TelemetryDataSaub
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
@ -90,7 +150,7 @@ namespace AsbCloudInfrastructure.Services.DetectOperations
|
|||||||
isDetected1 = true;
|
isDetected1 = true;
|
||||||
isDetected = true;
|
isDetected = true;
|
||||||
detectedOperations.Add(detectedOperation);
|
detectedOperations.Add(detectedOperation);
|
||||||
startDate = detectedOperation.End;
|
startDate = detectedOperation.DateEnd;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user