Exemple #1
0
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            var guid        = _settings.NarodMonGuid.Replace("-", "");
            var args        = $"?lat=55.754500&lon=37.626132&radius=100&types=1&uuid={guid}&api_key={_settings.NarodApiKey}&lang=ru";
            var fullRequest = Url.Combine(basicAddresss, nearBySensorsRequest, args);

            while (!cancellationToken.IsCancellationRequested)
            {
                Console.WriteLine($"{nameof(NarodMonPolling)}.{nameof(StartAsync)}() fullRequest: {fullRequest}");

                using (var clt = _httpClientFactory.CreateClient(nameof(NarodMonPolling)))
                {
                    try
                    {
                        var res = await clt.GetAsync(fullRequest, cancellationToken);

                        if (res.IsSuccessStatusCode)
                        {
                            Console.WriteLine($"{nameof(NarodMonPolling)}.{nameof(StartAsync)}() status code: OK!");
                            var body = await res.Content.ReadAsStringAsync();

                            var response = JsonConvert.DeserializeObject <SensorsNearbyResponse>(body);

                            var values = response.Devices.SelectMany(d => d.Sensors,
                                                                     (d, s) =>
                            {
                                if (s == null)
                                {
                                    return(new DeviceValues());
                                }
                                return(new DeviceValues
                                {
                                    DateTimeTicks = d.Time,
                                    DeviceId = d.Id.ToString(),
                                    Id = Guid.NewGuid(),
                                    DateTimeUtc = DataChunk.GetDateTimeFromUnix(d.Time).ToUniversalTime(),
                                    Lat = d.Lat,
                                    Lon = d.Lon,
                                    Unit = s.Unit,
                                    Value = s.Value
                                });
                            });

                            var existing = values.Where(x => !_getDevicesGrainPool.Any(z => x.DeviceId == z.DeviceId));

                            await _addStatisticsGrainPool.Put(values.ToArray());
                        }
                        else
                        {
                            Console.WriteLine($"{nameof(NarodMonPolling)}.{nameof(StartAsync)}() status code: {res.StatusCode}!");
                        }
                    } catch (Exception ex)
                    {
                        Console.WriteLine($"{nameof(NarodMonPolling)}.{nameof(StartAsync)}() ERROR: {ex.Message}!");
                    }
                }

                Thread.Sleep(70000);
            }
        }