public void Run(IService service) { var categories = new List <TrendsCategoryAbstract>(); var parameters = new List <RemapTrendsParameter>(); foreach (TrendsCategoryAbstract category in _categories) { RemapTrendsParameter parameter = category.CreateRemapParameter(); if (parameter == null) { continue; } parameters.Add(parameter); categories.Add(category); } if (parameters.Any()) { var result = service.RemapTrends(parameters.ToArray()); for (var i = 0; i < categories.Count; i++) { ApplyResult(categories[i], result[i]); } } }
internal override RemapTrendsParameter CreateRemapParameter() { Tuple <Tuple <DateTime, DateTime?, int>, Tuple <int, Action <Tuple <DateTime, double>[]> >[]>[] currentSamplesQueries; lock (_samplesQueries) { currentSamplesQueries = _samplesQueries .GroupBy(s => s.Item2) .Select(g => new Tuple <Tuple <DateTime, DateTime?, int>, Tuple <int, Action <Tuple <DateTime, double>[]> >[]>( g.Key, g.Select(s => new Tuple <int, Action <Tuple <DateTime, double>[]> >(s.Item1, s.Item3)) .ToArray())) .ToArray(); _samplesQueries.Clear(); } Tuple <Tuple <CriteriaType, DateTime, int>, Tuple <int, Action <Tuple <DateTime, double>[]> >[]>[] pageSamplesQueries; lock (_pageQueries) { pageSamplesQueries = _pageQueries .GroupBy(p => p.Item2) .Select(g => new Tuple <Tuple <CriteriaType, DateTime, int>, Tuple <int, Action <Tuple <DateTime, double>[]> >[]>( g.Key, g.Select(s => new Tuple <int, Action <Tuple <DateTime, double>[]> >(s.Item1, s.Item3)) .ToArray())) .ToArray(); _pageQueries.Clear(); } if (!currentSamplesQueries.Any() && !pageSamplesQueries.Any()) { return(null); } var samplesParameters = currentSamplesQueries .Select(s => new Tuple <int[], DateTime, DateTime?, int>( s.Item2.Select(i => i.Item1).ToArray(), s.Item1.Item1, s.Item1.Item2, s.Item1.Item3)) .ToArray(); _currentSamplesCallabacks = currentSamplesQueries .Select(s => s.Item2.Select(t => t.Item2).ToArray()).ToArray(); var pageParameters = pageSamplesQueries .Select(s => new Tuple <int[], CriteriaType, DateTime, int>( s.Item2.Select(i => i.Item1).ToArray(), s.Item1.Item1, s.Item1.Item2, s.Item1.Item3)) .ToArray(); _pageSamplesCallbacks = pageSamplesQueries.Select(s => s.Item2.Select(t => t.Item2).ToArray()) .ToArray(); var parameter = new RemapTrendsParameter { CategoryId = _id, SamplesParameters = samplesParameters, PageParameters = pageParameters }; return(parameter); }
private static void ReadTrendsPages(RemapTrendsParameter parameter, RemapTrendsResult result, ITrendsRunTarget runTarget) { var r = new Tuple <DateTime, double?[]> [parameter.PageParameters.Length][]; for (var i = 0; i < parameter.PageParameters.Length; i++) { var pageParameter = parameter.PageParameters[i]; r[i] = runTarget.GetPage( pageParameter.Item1, pageParameter.Item2, pageParameter.Item3, pageParameter.Item4); } result.Pages = r; }
public RemapTrendsResult[] RemapTrends(RemapTrendsParameter[] parameters) { if (NotValid()) { return(null); } var result = new RemapTrendsResult[parameters.Length]; for (var i = 0; i < parameters.Length; i++) { RemapTrendsParameter parameter = parameters[i]; ITrendsRunTarget trendsRunTarget = _project.TrendsRunTargets[parameter.CategoryId]; var r = new RemapTrendsResult(); ReadTrendsSamples(parameter, r, trendsRunTarget); ReadTrendsPages(parameter, r, trendsRunTarget); r.Notifications = GetNotifications(trendsRunTarget.Reporter.Notifications); result[i] = r; } return(result); }