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