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