Beispiel #1
0
 public IActionResult GetDevicesTwinIds([FromBody] DeviceQueryRuleGroup where)
 {
     try
     {
         logger.LogInformation("Get DeviceTwin Ids Properties called");
         IEnumerable <string> response = _deviceServiceDB.GetDevicesTwinIds(where);
         return(Ok(response));
     }
     catch (Exception e)
     {
         logger.LogError(e, "Get DeviceTwin Ids Properties- Exception {message}", e.Message);
         throw;
     }
 }
        public IEnumerable <string> GetDevicesTwinIds(DeviceQueryRuleGroup where)
        {
            DevicesDBCache deviceDB = _Cache.DevicesDB;

            if (!deviceDB.IsDevicesDBCacheInitialized)
            {
                return(new List <string>());
            }

            try
            {
                //Get cached devices
                IEnumerable <DeviceTwinFlatModel> devices = deviceDB.Devices.Values;
                return(InMemoryLinqDeviceQueryHelper.GetFilteredDevicesIds(devices, where));
            }
            catch (Exception e)
            {
                Log.Error("Get IoTHub Devices Twin Ids error {@error}", e.Message);
                return(new List <string>());
            }
        }
Beispiel #3
0
        private static Func <DeviceTwinFlatModel, bool> GetFilteredDevicesOr(IEnumerable <DeviceTwinFlatModel> devices, DeviceQueryRuleGroup filterGroup)
        {
            var predicate = PredicateBuilder.False <DeviceTwinFlatModel>();

            if (filterGroup != null)
            {
                //First, dealing with groups
                foreach (var subFilterGroup in filterGroup.Groups)
                {
                    if (subFilterGroup == null || (subFilterGroup.Rules.Count == 0 && subFilterGroup.Groups.Count == 0))
                    {
                        continue;
                    }
                    if (subFilterGroup.Operator == LogicalOperators.And)
                    {
                        predicate = predicate.Or(GetFilteredDevicesAnd(devices, subFilterGroup));
                    }
                    else
                    {
                        predicate = predicate.Or(GetFilteredDevicesOr(devices, subFilterGroup));
                    }
                }

                foreach (DeviceQueryRule rule in filterGroup.Rules)
                {
                    if (rule != null)
                    {
                        predicate = predicate.Or(GetFilteredDevices(devices, rule));
                    }
                }
            }

            return(predicate);
        }
Beispiel #4
0
        public static IEnumerable <string> GetFilteredDevicesIds(IEnumerable <DeviceTwinFlatModel> devices, DeviceQueryRuleGroup filterGroup)
        {
            _StringFields  = InMemoryLambdaExpressionsHelper.FieldsStringLambdas;
            _IntegerFields = InMemoryLambdaExpressionsHelper.FieldsIntegerLambdas;
            _DoubleFields  = InMemoryLambdaExpressionsHelper.FieldsDoubleLambdas;
            _DateFields    = InMemoryLambdaExpressionsHelper.FieldsDateLambdas;
            _BoolFields    = InMemoryLambdaExpressionsHelper.FieldsBoolLambdas;

            if (filterGroup.Operator == LogicalOperators.And)
            {
                return(devices.Where(GetFilteredDevicesAnd(devices, filterGroup)).Select(p => p.DeviceId));
            }
            return(devices.Where(GetFilteredDevicesOr(devices, filterGroup)).Select(p => p.DeviceId));
        }