Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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());
 }
Esempio n. 3
0
        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);
                }
            }
        }
Esempio n. 4
0
 public async Task <ActionResult <bool> > RecalculatePositionSignalData(
     [FromServices] IPositionSignalDataService positionSignalDataService,
     [FromRoute] PositionSignalDataQuery positionSignalDataQuery)
 {
     return(await positionSignalDataService.RecalculatePositionSignalData(positionSignalDataQuery));
 }
Esempio n. 5
0
 public async Task <ActionResult <List <PositionSignalData> > > GetPositionSignalDatas(
     [FromServices] IPositionSignalDataService positionSignalDataService,
     [FromQuery] PositionSignalDataQuery query)
 {
     return(await positionSignalDataService.GetPositionSignalDatas(query));
 }
Esempio n. 6
0
 public Task <bool> RecalculatePositionSignalData(PositionSignalDataQuery query)
 {
     return(client.Put <bool>(positionSignalDatasController, "recalculate", null, query));
 }
Esempio n. 7
0
 public Task <List <PositionSignalData> > GetPositionSignalDatas(PositionSignalDataQuery query)
 {
     return(client.Get <List <PositionSignalData> >(positionSignalDatasController, query));
 }