public static void ExecuteMethod_PopulateMonitoringItems(RequestResourceUsageCollection[] resourcesToIncludeInMonitoring, UsageMonitorItem[] newMonitoringItems)
 {
     if (resourcesToIncludeInMonitoring.Length == 0 || newMonitoringItems.Length == 0)
         return;
     int currMonitoringItemIX = 0;
     var resourcesCombined = resourcesToIncludeInMonitoring.SelectMany(coll => coll.CollectionContent).ToArray();
     var currMonitoringItem = newMonitoringItems[currMonitoringItemIX];
     foreach (var resourceItem in resourcesCombined)
     {
         DateTime resourceItemTime = resourceItem.ProcessorUsage.TimeRange.EndTime;
         while (resourceItemTime >= currMonitoringItem.TimeRangeInclusiveStartExclusiveEnd.EndTime)
         {
             currMonitoringItemIX++;
             if (currMonitoringItemIX == newMonitoringItems.Length)
                 return;
             currMonitoringItem = newMonitoringItems[currMonitoringItemIX];
         }
         DateTime currMonitorStartTime = currMonitoringItem.TimeRangeInclusiveStartExclusiveEnd.StartTime;
         bool matchesTimes = currMonitorStartTime <= resourceItemTime &&
                             currMonitoringItem.TimeRangeInclusiveStartExclusiveEnd.EndTime > resourceItemTime;
         if(matchesTimes == false)
             throw new InvalidDataException("Invalid data processing to feed invalid data to populating items");
         var diffFromMonitorBegin = resourceItemTime - currMonitorStartTime;
         var completeMinutes = Math.Floor(diffFromMonitorBegin.TotalMinutes);
         int stepIndex = (int) (completeMinutes/currMonitoringItem.StepSizeInMinutes);
         // Add data to index entries
         addValuesToMonitorItem(resourceItem, currMonitoringItem, stepIndex);
     }
 }