예제 #1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            do
            {
                var      products         = _productManager.Products;
                var      productNamesList = products.Select(p => p.Name).ToList();
                var      cachedValues     = _cache.GetValues(productNamesList);
                DateTime utcNow           = DateTime.UtcNow;
                foreach (var cachedValue in cachedValues)
                {
                    var lastUpdateInterval = utcNow - cachedValue.Time;
                    if (lastUpdateInterval < _minimumUpdateInterval)
                    {
                        continue;
                    }

                    SensorInfo info = _sensorsInterface.GetSensorInfo(cachedValue.Product, cachedValue.Path);
                    if (info.ExpectedUpdateInterval == TimeSpan.Zero)
                    {
                        continue;
                    }

                    if (lastUpdateInterval < info.ExpectedUpdateInterval)
                    {
                        continue;
                    }

                    SensorData statusObject = CreateStatusUpdateObject(cachedValue);
                    _updatesReceiver.AddUpdate(statusObject);
                }

                await Task.Delay(_checkInterval, stoppingToken);
            } while (!stoppingToken.IsCancellationRequested);
        }
        public List <SensorData> GetSensorsTree(User user)
        {
            if (!_queueManager.IsUserRegistered(user))
            {
                _queueManager.AddUserSession(user);
            }

            List <SensorData> result = new List <SensorData>();
            var productsList         = _productManager.Products;

            //Show available products only
            if (!UserRoleHelper.IsAllProductsTreeAllowed(user))
            {
                productsList = productsList.Where(p =>
                                                  ProductRoleHelper.IsAvailable(p.Key, user.ProductsRoles)).ToList();
            }

            //foreach (var product in productsList)
            //{
            //result.AddRange();
            //var sensorsList = _productManager.GetProductSensors(product.Name);
            //foreach (var sensor in sensorsList)
            //{
            //    var cachedVal = _valuesCache.GetValue(product.Name, sensor.Path);
            //    if (cachedVal != null)
            //    {
            //        result.Add(cachedVal);
            //        continue;
            //    }
            //    var lastVal = _database.GetLastSensorValue(product.Name, sensor.Path);
            //    if (lastVal != null)
            //    {
            //        result.Add(_converter.Convert(lastVal, product.Name));
            //    }
            //}
            //}
            result.AddRange(_valuesCache.GetValues(productsList.Select(p => p.Name).ToList()));

            return(result);
        }