public async Task <bool> RecalculatePositionSignalData(PositionSignalDataQuery query) { var positions = await this.databaseContext.Positions .AsQueryable() .Where(query.LocaleId, localeId => position => position.Zone !.LocaleId == localeId) .Where(query.ZoneId, zoneId => position => position.ZoneId == zoneId) .Where(query.PositionId, positionId => position => position.Id == positionId) .Where(query.NeedsUpdate, needsUpdate => position => position.DataNeedsUpdate == needsUpdate) .Include(position => position.Calibrations) .ToListAsync(); positions.ForEach(position => { this.RemoveOldData(position.Id); var positionSignalDatas = position.Calibrations ! .GroupBy(calibration => new { calibration.SignalId, calibration.SignalType }) .Select(calibration => new PositionSignalData() { PositionId = position.Id, SignalId = calibration.Key.SignalId, SignalType = calibration.Key.SignalType, Samples = calibration.Count(), Strength = calibration.Average(calibration => calibration.Strength), X = calibration.Average(calibration => calibration.X), Y = calibration.Average(calibration => calibration.Y), Z = calibration.Average(calibration => calibration.Z), Min = calibration.Min(calibration => calibration.Strength), Max = calibration.Max(calibration => calibration.Strength), MinX = calibration.Min(calibration => calibration.X), MaxX = calibration.Max(calibration => calibration.X), MinY = calibration.Min(calibration => calibration.Y), MaxY = calibration.Max(calibration => calibration.Y), MinZ = calibration.Min(calibration => calibration.Z), MaxZ = calibration.Max(calibration => calibration.Z) }) .ToList(); positionSignalDatas.ForEach(data => { var calibrations = position.Calibrations ! .Where(calibration => calibration.SignalId == data.SignalId && calibration.SignalType == data.SignalType) .ToList(); data.CalculateStandardDeviation(calibrations); data.LastSeen = calibrations.Max(calibration => calibration.DateTime); data.LastUpdate = DateTime.Now; this.databaseContext.Add(data); }); position.DataNeedsUpdate = false; }); await this.databaseContext.SaveChangesAsync(); return(true); }
public Task <List <PositionSignalData> > GetPositionSignalDatas(PositionSignalDataQuery query) { return(this.databaseContext.PositionsSignalsData .AsNoTracking() .AsQueryable() .Where(query.LocaleId, localeId => data => data.Position !.Zone !.LocaleId == localeId) .Where(query.ZoneId, zoneId => data => data.Position !.ZoneId == zoneId) .Where(query.PositionId, positionId => data => data.PositionId == positionId) .Where(query.SignalId, signalId => data => data.SignalId == signalId) .Where(query.SignalType, signalType => data => data.SignalType == signalType) .Include(query.IncludePosition, data => data.Position) .Include(query.IncludeZone, data => data.Position !, position => position.Zone !) .ToListAsync()); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { using (var scope = this.serviceProvider.CreateScope()) { var positionSignalDataService = scope.ServiceProvider.GetRequiredService <IPositionSignalDataService>(); var query = new PositionSignalDataQuery() { NeedsUpdate = true }; await positionSignalDataService.RecalculatePositionSignalData(query); await Task.Delay(300000); } } }
public async Task <ActionResult <bool> > RecalculatePositionSignalData( [FromServices] IPositionSignalDataService positionSignalDataService, [FromRoute] PositionSignalDataQuery positionSignalDataQuery) { return(await positionSignalDataService.RecalculatePositionSignalData(positionSignalDataQuery)); }
public async Task <ActionResult <List <PositionSignalData> > > GetPositionSignalDatas( [FromServices] IPositionSignalDataService positionSignalDataService, [FromQuery] PositionSignalDataQuery query) { return(await positionSignalDataService.GetPositionSignalDatas(query)); }
public Task <bool> RecalculatePositionSignalData(PositionSignalDataQuery query) { return(client.Put <bool>(positionSignalDatasController, "recalculate", null, query)); }
public Task <List <PositionSignalData> > GetPositionSignalDatas(PositionSignalDataQuery query) { return(client.Get <List <PositionSignalData> >(positionSignalDatasController, query)); }