forked from ddrilling/AsbCloudServer
CS2-88: Changed telemetry analysis interval (to 12 hours parts)
This commit is contained in:
parent
40b83826a4
commit
6730d64df1
@ -233,45 +233,52 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
|
|
||||||
public void SaveAnalytics()
|
public void SaveAnalytics()
|
||||||
{
|
{
|
||||||
var alltelemetryIds = db.TelemetryDataSaub.Select(t => t.IdTelemetry).Distinct().ToList();
|
var allTelemetryIds = (from telemetry in db.TelemetryDataSaub
|
||||||
|
select telemetry.Id)
|
||||||
|
.Distinct()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
foreach(var idTelemetry in alltelemetryIds)
|
foreach(var idTelemetry in allTelemetryIds)
|
||||||
{
|
{
|
||||||
var telemetries = db.TelemetryDataSaub.Where(t => t.IdTelemetry == idTelemetry &&
|
var analyzeStartDate = GetAnalyzeStartDate(idTelemetry);
|
||||||
t.Date.Hour == (DateTime.UtcNow.Hour - 1)).ToList();
|
|
||||||
|
|
||||||
foreach(var telemetry in telemetries)
|
while (GetDataSaubsToAnalyze(idTelemetry, analyzeStartDate).Any())
|
||||||
{
|
{
|
||||||
var dataSaubDto = telemetry.Adapt<TelemetryDataSaubDto>();
|
var dataSaubsToAnalyze = GetDataSaubsToAnalyze(idTelemetry, (long)analyzeStartDate);
|
||||||
|
|
||||||
saubDataCache.AddData(dataSaubDto);
|
foreach (var dataSaub in dataSaubsToAnalyze)
|
||||||
|
|
||||||
if (saubDataCache.GetOrCreateCache(dataSaubDto.IdTelemetry).Count() > 1)
|
|
||||||
{
|
{
|
||||||
var dataSaubs = saubDataCache.GetOrCreateCache(dataSaubDto.IdTelemetry)
|
var dataSaubDto = dataSaub.Adapt<TelemetryDataSaubDto>();
|
||||||
.OrderBy(d => d.Date);
|
|
||||||
|
|
||||||
var telemetryAnalysisDto = GetDrillingAnalysis(dataSaubs);
|
saubDataCache.AddData(dataSaubDto);
|
||||||
|
|
||||||
if (saubDataCache.CurrentAnalysis is null)
|
if (saubDataCache.GetOrCreateCache(dataSaubDto.IdTelemetry).Count() > 1)
|
||||||
saubDataCache.CurrentAnalysis = telemetryAnalysisDto;
|
|
||||||
|
|
||||||
if (saubDataCache.CurrentAnalysis.IdOperation == telemetryAnalysisDto.IdOperation)
|
|
||||||
{
|
{
|
||||||
saubDataCache.CurrentAnalysis.DurationSec +=
|
var dataSaubs = saubDataCache.GetOrCreateCache(dataSaubDto.IdTelemetry)
|
||||||
telemetryAnalysisDto.DurationSec;
|
.OrderBy(d => d.Date);
|
||||||
saubDataCache.CurrentAnalysis.OperationEndDepth = dataSaubDto.WellDepth;
|
|
||||||
}
|
var telemetryAnalysisDto = GetDrillingAnalysis(dataSaubs);
|
||||||
else
|
|
||||||
{
|
if (saubDataCache.CurrentAnalysis is null)
|
||||||
db.TelemetryAnalysis.Add(saubDataCache.CurrentAnalysis.Adapt<TelemetryAnalysis>());
|
saubDataCache.CurrentAnalysis = telemetryAnalysisDto;
|
||||||
saubDataCache.CurrentAnalysis = telemetryAnalysisDto;
|
|
||||||
saubDataCache.CurrentAnalysis.OperationStartDepth = dataSaubDto.WellDepth;
|
if (saubDataCache.CurrentAnalysis.IdOperation == telemetryAnalysisDto.IdOperation)
|
||||||
|
{
|
||||||
|
saubDataCache.CurrentAnalysis.DurationSec +=
|
||||||
|
telemetryAnalysisDto.DurationSec;
|
||||||
|
saubDataCache.CurrentAnalysis.OperationEndDepth = dataSaubDto.WellDepth;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
db.TelemetryAnalysis.Add(saubDataCache.CurrentAnalysis.Adapt<TelemetryAnalysis>());
|
||||||
|
saubDataCache.CurrentAnalysis = telemetryAnalysisDto;
|
||||||
|
saubDataCache.CurrentAnalysis.OperationStartDepth = dataSaubDto.WellDepth;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
db.SaveChanges();
|
db.SaveChanges();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,6 +312,42 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private long GetAnalyzeStartDate(int idTelemetry)
|
||||||
|
{
|
||||||
|
var lastAnalysisInDb = (from analysis in db.TelemetryAnalysis
|
||||||
|
where analysis.Id == idTelemetry
|
||||||
|
orderby analysis.UnixDate
|
||||||
|
select analysis)
|
||||||
|
.DefaultIfEmpty()
|
||||||
|
.Last();
|
||||||
|
|
||||||
|
var analyzeStartDate = lastAnalysisInDb?.UnixDate;
|
||||||
|
|
||||||
|
if (analyzeStartDate is null)
|
||||||
|
{
|
||||||
|
var firstDataSaub = (from ds in db.TelemetryDataSaub
|
||||||
|
where ds.IdTelemetry == idTelemetry
|
||||||
|
select ds.Date).FirstOrDefault();
|
||||||
|
|
||||||
|
analyzeStartDate = (long)(firstDataSaub - new DateTime(1970, 1, 1)).TotalSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (long)analyzeStartDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IEnumerable<TelemetryDataSaub> GetDataSaubsToAnalyze(int idTelemetry, long analyzeStartDate)
|
||||||
|
{
|
||||||
|
return (from ds in db.TelemetryDataSaub
|
||||||
|
let lowerBorder = DateTimeOffset
|
||||||
|
.FromUnixTimeSeconds(analyzeStartDate)
|
||||||
|
let upperBorder = DateTimeOffset
|
||||||
|
.FromUnixTimeSeconds(analyzeStartDate).AddHours(12)
|
||||||
|
where ds.Id == idTelemetry
|
||||||
|
&& ds.Date > lowerBorder
|
||||||
|
&& ds.Date < upperBorder
|
||||||
|
select ds).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
private static IEnumerable<(long IntervalStart, string OperationName, int OperationDuration)> DivideOperationsByIntervalLength(
|
private static IEnumerable<(long IntervalStart, string OperationName, int OperationDuration)> DivideOperationsByIntervalLength(
|
||||||
IEnumerable<(long IntervalStart, string OperationName, int OperationDuration)> operations, int intervalSeconds)
|
IEnumerable<(long IntervalStart, string OperationName, int OperationDuration)> operations, int intervalSeconds)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user