public async override Task <StatusMessage> AddReading(ReadingPacketMessage request, ServerCallContext context) { var result = new StatusMessage { Success = ReadingStatus.Failure }; if (request.Successful == ReadingStatus.Success) { try { foreach (var reading in request.Readings) { if (reading.ReadingValue < 1000) { _logger.LogDebug("Reading value below acceptable level"); var trailer = new Metadata() { { "ReadingValue", reading.ReadingValue.ToString() }, { "Message", "Reading Value Invalid" } }; throw new RpcException(new Status(StatusCode.OutOfRange, "Value too low"), trailer); } var readingEntity = new MeterReading { CustomerId = reading.CustomerId, Value = reading.ReadingValue, ReadingDate = reading.ReadingTime.ToDateTime() }; _readingRepository.AddEntity(readingEntity); } if (await _readingRepository.SaveAllAsync()) { result.Success = ReadingStatus.Success; _logger.LogInformation($"Added {request.Readings.Count} for {request.Readings.First().CustomerId}"); } } catch (RpcException) { throw; } catch (Exception ex) { _logger.LogError($"An error occurred while saving meter readings: {ex}"); throw new RpcException(Status.DefaultCancelled, "An error occurred while saving meter readings."); } } return(result); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var counter = 0; var customerId = _config.GetValue <int>("Service:CustomerId"); while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); counter++; //if (counter % 10 == 0) //{ // Console.WriteLine("Sending Diagnostics"); // var stream = Client.SendDiagnostics(); // for (var x = 0; x < 5; x++) // { // await stream.RequestStream.WriteAsync(await _factory.Generate(customerId)); // } // await stream.RequestStream.CompleteAsync(); //} var pkt = new ReadingPacketMessage { Successful = ReadingStatus.Success, Notes = "Test Notes" }; for (var i = 0; i < 5; i++) { pkt.Readings.Add(await _factory.Generate(customerId)); } try { if (!NeedsLogin() || await GenerateToken()) { var authHeader = new Metadata(); authHeader.Add("Authorization", $"Bearer {_token}"); var result = await Client.AddReadingAsync(pkt, headers : authHeader); if (result.Success == ReadingStatus.Success) { _logger.LogInformation("Successfully added new readings"); } else { _logger.LogInformation("Error adding new readings"); } } } catch (RpcException ex) { if (ex.StatusCode == StatusCode.OutOfRange) { _logger.LogInformation($"{ex.Trailers}"); } } await Task.Delay(_config.GetValue <int>("Service:DelayInterval"), stoppingToken); } }