@Override public String prettyPrint() { StringBuffer sb = new StringBuffer(); for (OutlierSet<?> answer : _answers) { sb.append(" Hypothesis: every node in role "); sb.append(answer.getRole().orElse("<unknown role>")); sb.append(" should have the following definition for property "); sb.append(answer.getName() + ": " + answer.getDefinition() + "\n"); sb.append(" Outliers: "); sb.append(answer.getOutliers() + "\n"); sb.append(" Conformers: "); sb.append(answer.getConformers() + "\n\n"); } return sb.toString(); }
private SortedSet<OutlierSet<NavigableSet<String>>> serverOutliers(OutliersQuestion question) { SortedSet<String> serverSets = new TreeSet<>(question.getServerSets()); SortedMap<String, Function<Configuration, NavigableSet<String>>> serverSetAccessors = new TreeMap<>(); serverSetAccessors.put("DnsServers", Configuration::getDnsServers); serverSetAccessors.put("LoggingServers", Configuration::getLoggingServers); serverSetAccessors.put("NtpServers", Configuration::getNtpServers); serverSetAccessors.put("SnmpTrapServers", Configuration::getSnmpTrapServers); serverSetAccessors.put("TacacsServers", Configuration::getTacacsServers); if (serverSets.isEmpty()) { serverSets.addAll(serverSetAccessors.keySet()); } SortedSet<OutlierSet<NavigableSet<String>>> rankedOutliers = new TreeSet<>(); for (String serverSet : serverSets) { Function<Configuration, NavigableSet<String>> accessorF = serverSetAccessors.get(serverSet); if (accessorF != null) { addPropertyOutliers(serverSet, accessorF, rankedOutliers); } } if (!_verbose) { // remove outlier sets where the hypothesis is that a particular server set // should be empty. such hypotheses do not seem to be useful in general. rankedOutliers.removeIf(oset -> oset.getDefinition().isEmpty()); } return rankedOutliers; }
private List<AbstractRoleConsistencyQuestion> serverConsistencyPolicies() { OutliersHypothesis hypothesis = OutliersHypothesis.SAME_SERVERS; SortedMap<String, AnswerElement> roleAnswers = perRoleOutlierInfo(hypothesis); Multimap<String, OutlierSet<NavigableSet<String>>> outliersPerPropertyName = outliersByProperty( roleAnswers.values(), OutliersAnswerElement::getServerOutliers, OutlierSet::getName); // remove outlier sets where no nodes declare any servers List<String> undeclared = new LinkedList<>(); for (String name : outliersPerPropertyName.keySet()) { Collection<OutlierSet<NavigableSet<String>>> outlierSets = outliersPerPropertyName.get(name); if (outlierSets.stream() .allMatch(oset -> oset.getDefinition().isEmpty() && oset.getOutliers().isEmpty())) { undeclared.add(name); } } for (String name : undeclared) { outliersPerPropertyName.removeAll(name); } return policiesAboveThreshold(outliersPerPropertyName, hypothesis); }
sb.append(":\n"); sb.append(" every node should have the following set of "); sb.append(outlier.getName() + ": " + outlier.getDefinition() + "\n"); sb.append(" Outliers: "); sb.append(outlier.getOutliers() + "\n");
sb.append(outlier.getName() + ": " + outlier.getDefinition() + "\n"); sb.append(" Outliers: "); sb.append(outlier.getOutliers() + "\n");