protected PlotSingleDto assemble( MetricNameDto metricNameDto, Collection<MetricRawData> rawDatas) { List<PointDto> points = new ArrayList<>(rawDatas.size()); String sessionId = null; for (MetricRawData metricRawData : rawDatas) { if (sessionId == null) sessionId = metricRawData.getSessionId(); points.add(new PointDto(metricRawData.getTime() / 1000D, metricRawData.getValue())); } return new PlotSingleDto( points, legendProvider.generatePlotLegend(sessionId, metricNameDto.getMetricDisplayName(), true), getHexColorCode(metricNameDto.getMetricName(), sessionId), generatePointShape(metricNameDto.getMetricName(), sessionId)); }
protected Set<Pair<MetricNameDto, List<PlotSingleDto>>> getResult( Collection<MetricRawData> allRawData, List<MetricNameDto> metricNames) { Map<Long, Multimap<String, MetricRawData>> taskIdMetricIdRawMap = createMappedPlotDatasets(metricNames); for (MetricRawData rawData : allRawData) { String metricId = rawData.getMetricId(); Long taskId = rawData.getWorkloadTaskDataId(); taskIdMetricIdRawMap.get(taskId).put(metricId, rawData); } Multimap<MetricNameDto, PlotSingleDto> metricNamePlotMap = ArrayListMultimap.create(); for (MetricNameDto metricName : metricNames) { for (Long taskId : metricName.getTaskIds()) { Collection<MetricRawData> rawDatas; Multimap<String, MetricRawData> multimap = taskIdMetricIdRawMap.get(taskId); if (multimap == null) { // we did not find metric for given task Id // it could happen if we got 2 sessions with different sets of custom metrics continue; } rawDatas = multimap.get(metricName.getMetricName()); if (rawDatas == null || rawDatas.isEmpty()) { // no data was saved for given taskId and metric Id continue; } metricNamePlotMap.put(metricName, assemble(metricName, rawDatas)); } } Set<Pair<MetricNameDto, List<PlotSingleDto>>> resultSet = new HashSet<>(metricNames.size()); for (MetricNameDto metricName : metricNamePlotMap.keySet()) { List<PlotSingleDto> plotDatasetDtoList = new ArrayList<>(metricNamePlotMap.get(metricName)); resultSet.add(Pair.of(metricName, plotDatasetDtoList)); } return resultSet; }