forked from ddrilling/AsbCloudServer
CS2-88: Added refresh of Telemetry analyze start date (to prevent infinite loops)
This commit is contained in:
parent
c2c9bad200
commit
130feacdd5
@ -234,7 +234,7 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
public void SaveAnalytics()
|
public void SaveAnalytics()
|
||||||
{
|
{
|
||||||
var allTelemetryIds = (from telemetry in db.TelemetryDataSaub
|
var allTelemetryIds = (from telemetry in db.TelemetryDataSaub
|
||||||
select telemetry.Id)
|
select telemetry.IdTelemetry)
|
||||||
.Distinct()
|
.Distinct()
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
@ -244,7 +244,9 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
|
|
||||||
while (GetDataSaubsToAnalyze(idTelemetry, analyzeStartDate).Any())
|
while (GetDataSaubsToAnalyze(idTelemetry, analyzeStartDate).Any())
|
||||||
{
|
{
|
||||||
var dataSaubsToAnalyze = GetDataSaubsToAnalyze(idTelemetry, (long)analyzeStartDate);
|
var dataSaubsToAnalyze = GetDataSaubsToAnalyze(idTelemetry, analyzeStartDate);
|
||||||
|
|
||||||
|
analyzeStartDate = dataSaubsToAnalyze.Last().Date;
|
||||||
|
|
||||||
foreach (var dataSaub in dataSaubsToAnalyze)
|
foreach (var dataSaub in dataSaubsToAnalyze)
|
||||||
{
|
{
|
||||||
@ -312,39 +314,36 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private long GetAnalyzeStartDate(int idTelemetry)
|
private DateTime GetAnalyzeStartDate(int idTelemetry)
|
||||||
{
|
{
|
||||||
var lastAnalysisInDb = (from analysis in db.TelemetryAnalysis
|
var lastAnalysisInDb = (from analysis in db.TelemetryAnalysis
|
||||||
where analysis.Id == idTelemetry
|
where analysis.IdTelemetry == idTelemetry
|
||||||
orderby analysis.UnixDate
|
orderby analysis.UnixDate
|
||||||
select analysis)
|
select analysis)
|
||||||
.DefaultIfEmpty()
|
.DefaultIfEmpty()
|
||||||
.Last();
|
.Last();
|
||||||
|
|
||||||
var analyzeStartDate = lastAnalysisInDb?.UnixDate;
|
var lastAnalysisUnixDate = lastAnalysisInDb?.UnixDate ?? 0;
|
||||||
|
|
||||||
if (analyzeStartDate is null)
|
var analyzeStartDate = DateTimeOffset.FromUnixTimeSeconds(lastAnalysisUnixDate);
|
||||||
{
|
|
||||||
var firstDataSaub = (from ds in db.TelemetryDataSaub
|
|
||||||
where ds.IdTelemetry == idTelemetry
|
|
||||||
select ds.Date).FirstOrDefault();
|
|
||||||
|
|
||||||
analyzeStartDate = (long)(firstDataSaub - new DateTime(1970, 1, 1)).TotalSeconds;
|
var firstDataSaub = (from ds in db.TelemetryDataSaub
|
||||||
}
|
where ds.IdTelemetry == idTelemetry &&
|
||||||
|
ds.Date > analyzeStartDate
|
||||||
|
select ds).FirstOrDefault();
|
||||||
|
|
||||||
return (long)analyzeStartDate;
|
var firstSaubUtcTime = firstDataSaub.Date.ToUniversalTime();
|
||||||
|
|
||||||
|
return firstSaubUtcTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<TelemetryDataSaub> GetDataSaubsToAnalyze(int idTelemetry, long analyzeStartDate)
|
private IEnumerable<TelemetryDataSaub> GetDataSaubsToAnalyze(int idTelemetry,
|
||||||
|
DateTime analyzeStartDate)
|
||||||
{
|
{
|
||||||
return (from ds in db.TelemetryDataSaub
|
return (from ds in db.TelemetryDataSaub
|
||||||
let lowerBorder = DateTimeOffset
|
where ds.IdTelemetry == idTelemetry
|
||||||
.FromUnixTimeSeconds(analyzeStartDate)
|
&& ds.Date > analyzeStartDate
|
||||||
let upperBorder = DateTimeOffset
|
&& ds.Date < analyzeStartDate.AddHours(12)
|
||||||
.FromUnixTimeSeconds(analyzeStartDate).AddHours(12)
|
|
||||||
where ds.Id == idTelemetry
|
|
||||||
&& ds.Date > lowerBorder
|
|
||||||
&& ds.Date < upperBorder
|
|
||||||
select ds).ToList();
|
select ds).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user