예제 #1
0
        public IActionResult GetDevicesSummaryAggregations(string groupBy)
        {
            try
            {
                logger.LogInformation("Get DeviceTwin summary called");
                DeviceTwinSummaryAggregationsModel summary = _deviceServiceDB.GetDevicesSummaryAggregationsAsync(groupBy);

                return(Ok(summary));
            }
            catch (Exception e)
            {
                logger.LogError(e, "Get DeviceTwin Properties- Exception {message}", e.Message);
                throw;
            }
        }
        public DeviceTwinSummaryAggregationsModel GetDevicesSummaryAggregationsAsync(string topActivatedGroupBy)
        {
            try
            {
                DevicesDBCache deviceDB = _Cache.DevicesDB;
                if (!deviceDB.IsDevicesDBCacheInitialized)
                {
                    return(new DeviceTwinSummaryAggregationsModel());
                }

                IEnumerable <DeviceTwinFlatModel>  devices          = deviceDB.Devices.Values;
                DeviceTwinSummaryAggregationsModel deviceSummaryAgg = new DeviceTwinSummaryAggregationsModel();

                //Device Summary
                deviceSummaryAgg.TotalDevicesCount        = deviceDB.Count;
                deviceSummaryAgg.ConnectedDevicesCount    = devices.Count(p => p.ConnectionStatus == DeviceConnectionStatus.Connected);
                deviceSummaryAgg.DisconnectedDevicesCount = devices.Count(p => p.ConnectionStatus == DeviceConnectionStatus.Disconnected);
                deviceSummaryAgg.ActivatedDevicesCount    = deviceSummaryAgg.ConnectedDevicesCount + deviceSummaryAgg.DisconnectedDevicesCount;
                deviceSummaryAgg.NotActivatedDevicesCount = deviceSummaryAgg.TotalDevicesCount - deviceSummaryAgg.ActivatedDevicesCount;

                //Alert
                deviceSummaryAgg.AlertCounts = devices.Where(p => p.StatusCode != 0).GroupBy(p => p.StatusCode).OrderByDescending(p => p.Count()).Select(p => new AlertCount()
                {
                    AlertCode = p.Key, Count = p.Count()
                }).ToList();

                IEnumerable <IGrouping <string, DeviceTwinFlatModel> > topActivatedDevices = InMemoryLinqDeviceQueryHelper.GetGroupByString(devices, topActivatedGroupBy);
                deviceSummaryAgg.DevicePerGroupActivated = topActivatedDevices
                                                           .Select(p => new DevicePerGroupActivated()
                {
                    GroupName = p.Key, PercentageActivated = 100 - (p.Where(x => x.ConnectionStatus == DeviceConnectionStatus.NotActivated).Count() * 100 / p.Count())
                })
                                                           .OrderByDescending(p => p.PercentageActivated)
                                                           .Take(10)
                                                           .ToList();

                return(deviceSummaryAgg);
            }
            catch (Exception e)
            {
                Log.Error("Get IoTHub Devices Twin error {@error}", e.Message);
                return(new DeviceTwinSummaryAggregationsModel());
            }
        }