public async Task <IActionResult> GetMeasurements(string lat, string lng)
        {
            var culture   = CultureInfo.InvariantCulture;
            var longitude = double.Parse(lng, culture);
            var latitude  = double.Parse(lat, culture);
            var response  = await measurementsProvider.GetMeasurementsByLocation(latitude : latitude, longitude : longitude);

            if (response.StatusCode == AirlyInterface.Domain.AirlyStatusCode.Ok)
            {
                return(Ok(response.Values));
            }
            else
            {
                return(NotFound(response.ErrorText));
            }
        }
        private TemperatureTooLowEventArgs GetEventArgsIfShouldRaiseAlert(double longitude, double latitude, float temperatureThreshold, string city, DateTime now)
        {
            var airQualityResponse = measurementsProvider.GetMeasurementsByLocation(longitude: longitude, latitude: latitude).Result;

            if (airQualityResponse.StatusCode == AirlyStatusCode.Ok)
            {
                var temperatureMeasurement = airQualityResponse.Values
                                             .Where(x => x.Name == "Temperature")
                                             .FirstOrDefault();

                if (temperatureMeasurement != null && temperatureMeasurement.Value < temperatureThreshold)
                {
                    return(new TemperatureTooLowEventArgs(city, temperatureThreshold, (float)temperatureMeasurement.Value));
                }
            }
            return(null);
        }
        public async override Task <AirlyResponse> GetMeasurementsByLocation(AirlyRequest request, ServerCallContext context)
        {
            var apiResponse = await measurementsProvider.GetMeasurementsByLocation(request.Latitude, request.Longitude);

            var result = new AirlyResponse
            {
                ErrorText         = apiResponse.ErrorText,
                FromDateTimeTicks = apiResponse.FromDateTime.Ticks,
                StatusCode        = (ResponseStatus)apiResponse.StatusCode
            };

            result.Values.AddRange(context.RequestHeaders.Select(h => new ValueDescriptor {
                Name = h.Key + ": " + h.Value, Value = 1
            }));

            result.Values.AddRange(apiResponse.Values.Select(x => new ValueDescriptor {
                Name = x.Name, Value = x.Value
            }));
            return(result);
        }