Exemplo n.º 1
0
 public CarbonRequestHandle(CarbonTimeSeriesRequest carbonTimeSeriesRequest,
     IReadOnlyCollection<TimeSeriesCellResponseEvent> responseEvents)
 {
     mCarbonTimeSeriesRequest = carbonTimeSeriesRequest;
     mResponseEvents = responseEvents;
 }
Exemplo n.º 2
0
        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)));
                }
            }
        }