package com.griddynamics.jagger.dbapi.util; import com.griddynamics.jagger.dbapi.dto.TaskDataDto; import com.griddynamics.jagger.dbapi.parameter.DefaultMonitoringParameters; import com.griddynamics.jagger.dbapi.parameter.GroupKey; import com.griddynamics.jagger.util.MonitoringIdUtils; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import static org.apache.commons.collections.CollectionUtils.isNotEmpty; /** * Created by kgribov on 3/17/14. */ public class CommonUtils { /** Filter metrics to find standard monitoring metrics and dismiss not used monitoring metrics * * @param origin - a list of such arrays: [(String)metricId, ... , ...] * @param monitoringPlotGroups - monitoringPlotGroups from reporting.conf.xml * @return metrics without unused monitoring metrics */ public static List<Object[]> filterMonitoring(List<Object[]> origin, Map<GroupKey, DefaultMonitoringParameters[]> monitoringPlotGroups) { List<Object[]> result = new ArrayList<>(origin.size()); // monitoring ids in reporting Set<String> reportingMonitoring = new HashSet<>(); for (DefaultMonitoringParameters[] value : monitoringPlotGroups.values()) { for (DefaultMonitoringParameters parameter : value) { reportingMonitoring.add(parameter.getId()); } } // all monitoring ids Set<String> allMonitoring = new HashSet<>(); for (DefaultMonitoringParameters parameter : DefaultMonitoringParameters.values()) { allMonitoring.add(parameter.getId()); } for (Object[] row : origin) { String metricId = getMonitoringId((String) row[0]); if (allMonitoring.contains(metricId) && !reportingMonitoring.contains(metricId)) { // ignore this metrics continue; } result.add(row); } return result; } private static String getMonitoringId(String origin) { MonitoringIdUtils.MonitoringId monitoringId = MonitoringIdUtils.splitMonitoringMetricId(origin); if (monitoringId != null) { return monitoringId.getMonitoringName(); } return origin; } /** * @param tests - a list of TaskDataDtos * @return a set of TaskDataDto's ids */ public static Set<Long> getTestsIds(List<TaskDataDto> tests) { Set<Long> taskIds = new HashSet<>(); for (TaskDataDto tdd : tests) { taskIds.addAll(tdd.getIds()); } return taskIds; } /** Return true if origin collection contains at least one element from another collection * @param origin - origin collection * @param elements - another collection */ public static boolean containsAtLeastOne(Collection origin, Collection elements) { boolean result = false; for (Object element : elements) { if (origin.contains(element)) { result = true; break; } } return result; } /** * Checks both destination and source collections for null and performs {@link Collection#addAll(Collection)} on them. * * @param destination Collection in which items from <b>source</b> must be added * @param source Collection from which items must be added to <b>destination</b> * @param <E> type of both collections */ public static <E> void addAllNullSafe(Collection<E> destination, Collection<E> source) { if (destination != null && isNotEmpty(source)) { destination.addAll(source); } } /** * generate unique id from given parameters * @param params list of parameters * @return unique id */ public static int generateUniqueId(List<String> params) { int result = 0; for (String param : params) { result = 31 * result + param.hashCode(); } return result; } }