public CarbonRequestHandle(CarbonTimeSeriesRequest carbonTimeSeriesRequest, IReadOnlyCollection<TimeSeriesCellResponseEvent> responseEvents) { mCarbonTimeSeriesRequest = carbonTimeSeriesRequest; mResponseEvents = responseEvents; }
private void AggregateRequests(IReadOnlyCollection<TimeSeriesCellResponseEvent> requests) { var dictByDate = new Dictionary<string, List<CarbonTimeSeriesCellRequest>>(); var dictById = new Dictionary<string, List<CarbonTimeSeriesCellRequest>>(); var dateKeys = new Dictionary<string, TimeSeriesCellRequestAggregateByDateKey>(); var idKeys = new Dictionary<string, TimeSeriesCellRequestAggregatByIdKey>(); foreach (var request in requests) { List<CarbonTimeSeriesCellRequest> byDateRequests; if (!dictByDate.TryGetValue(request.SeriesCellRequest.ByDateKey.Key, out byDateRequests)) { byDateRequests = new List<CarbonTimeSeriesCellRequest>(); dictByDate[request.SeriesCellRequest.ByDateKey.Key] = byDateRequests; dateKeys[request.SeriesCellRequest.ByDateKey.Key] = request.SeriesCellRequest.ByDateKey; } byDateRequests.Add(request.SeriesCellRequest); List<CarbonTimeSeriesCellRequest> byIdRequests; if (!dictById.TryGetValue(request.SeriesCellRequest.ByIdKey.Key, out byIdRequests)) { byIdRequests = new List<CarbonTimeSeriesCellRequest>(); dictById[request.SeriesCellRequest.ByIdKey.Key] = byIdRequests; idKeys[request.SeriesCellRequest.ByIdKey.Key] = request.SeriesCellRequest.ByIdKey; } byIdRequests.Add(request.SeriesCellRequest); } //SLog.log.InfoFormat("Conflate {0} cell requests to {1} by date requests to Carbon", requests.Count, dictByDate.Count); //SLog.log.InfoFormat("Conflate {0} cell requests to {1} by id requests to Carbon", requests.Count, dictById.Count); if (dictById.Count < dictByDate.Count) { // Request by id foreach (var kvp in dictById) { var max = ToUtc(kvp.Value.Max(r => r.Date)); var min = ToUtc(kvp.Value.Min(r => r.Date)); var option = new TimeSeriesOptions { Filters = idKeys[kvp.Key].Filters, Fields = kvp.Value.Select(v => v.Field).Concat(new[]{"date"}).Distinct().ToList() }; var request = new CarbonTimeSeriesRequest(new[] { idKeys[kvp.Key].Identifier }, idKeys[kvp.Key].RequestType, min, max, option); mRequestToDispatch.Add(new CarbonRequestHandle(request, requests)); //Task.Run(() => RequestDataFromCarbon(new CarbonRequestHandle(request, requests))); } } else { // Request by dates foreach (var kvp in dictByDate) { var option = new TimeSeriesOptions { Filters = dateKeys[kvp.Key].Filters, Fields = kvp.Value.Select(v => v.Field).Concat(new[] { "date" }).Distinct().ToList() }; var date = ToUtc(dateKeys[kvp.Key].Date); var request = new CarbonTimeSeriesRequest(kvp.Value.Select(v => v.Identifier).Distinct().ToList(), dateKeys[kvp.Key].RequestType, date, date, option); mRequestToDispatch.Add(new CarbonRequestHandle(request, requests)); //Task.Run(() => RequestDataFromCarbon(new CarbonRequestHandle(request, requests))); } } }