Exemplo n.º 1
0
        private static void ReplaceSensorData(SensorDto sensorDto, VehicleSnapshot vehicleSnapshot)
        {
            var sensor = vehicleSnapshot.Sensors[sensorDto.Name];

            if (sensorDto.Timestamp >= sensor.Timestamp)
            {
                vehicleSnapshot.Sensors[sensorDto.Name] = VehicleSensorData.Create(sensorDto);
            }
        }
Exemplo n.º 2
0
        public async Task ProcessAsync(IEnumerable <EventDataWrapper> messages)
        {
            var policies        = _policyRegistry.CreateAsyncPolicies();
            var repository      = _repositoryFactory.Create();
            var groupedMessages = messages.Where(t => t.Properties.ContainsKey(Constants.VehicleId))
                                  .GroupBy(t => t.Properties[Constants.VehicleId]);

            foreach (var message in groupedMessages)
            {
                var id = message.Key.ToString();
                _logger?.LogDebug($"Process event for vehicle {id}");
                var vehicleSnapshot = repository.Get(id) ?? new VehicleSnapshot {
                    Id = id
                };

                message
                .Select(t => Deserialize(t))
                .Where(t => t != null && t.Quality >= Constants.QualityGate)
                .ToList().ForEach(s =>
                {
                    if (vehicleSnapshot.Sensors.ContainsKey(s.Name))
                    {
                        ReplaceSensorData(s, vehicleSnapshot);
                    }
                    else
                    {
                        vehicleSnapshot.Sensors.Add(s.Name, VehicleSensorData.Create(s));
                    }
                });
                await Polly.Policy.WrapAsync(policies).ExecuteAsync(async() =>
                {
                    await repository.AddAsync(vehicleSnapshot);
                    _logger?.LogInformation($"Save snapshot for vehicle {id}");
                });
            }
            ;
        }