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); } }
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}"); }); } ; }