public void ProcessStatusUpdate(IParkingSpotStatusUpdate parkingSpotStatusUpdate) { logger.LogInformation("BEGIN ProcessStatusUpdate"); this.carparkProvider.ProcessStatusUpdate(parkingSpotStatusUpdate); Carpark carpark = this.carparkProvider.GetCarparkByName(parkingSpotStatusUpdate.Location); if (carpark == null) { logger.LogError($"No carpark found for {parkingSpotStatusUpdate.Location}"); return; } ISpotUpdate spotUpdate = new SpotUpdateImpl() { CarparkId = carpark.Id, SpotId = parkingSpotStatusUpdate.SpotId, Status = parkingSpotStatusUpdate.Available ? SpotStatus.Available : SpotStatus.Unavailable, UpdatedOn = parkingSpotStatusUpdate.Timestamp, Source = MessageSource.MessageBus }; ProcessUpdate(spotUpdate); logger.LogInformation("END ProcessStatusUpdate"); }
public void ProcessUnresponsive() { DateTime now = DateTime.Now; IEnumerable <Carpark> carparks = this.carparkProvider.GetCarparks(); foreach (var carpark in carparks) { List <int> unresponsiveSpots = carpark.SpotData.Where(x => (now - x.Value.LastUpdated).Seconds >= 20).Select(x => x.Key).ToList(); foreach (var spot in unresponsiveSpots) { ISpotUpdate update = new SpotUpdateImpl() { CarparkId = carpark.Id, SpotId = spot, Status = SpotStatus.Unknown, UpdatedOn = now, Source = MessageSource.System }; ProcessUpdate(update); } } }