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