@Override public void publish(ScannerReportWriter writer) { final ScannerReport.ActiveRule.Builder builder = ScannerReport.ActiveRule.newBuilder(); writer.writeActiveRules(activeRules.findAll().stream() .map(DefaultActiveRule.class::cast) .map(input -> { builder.clear(); builder.setRuleRepository(input.ruleKey().repository()); builder.setRuleKey(input.ruleKey().rule()); builder.setSeverity(Constants.Severity.valueOf(input.severity())); builder.setCreatedAt(input.createdAt()); builder.setUpdatedAt(input.updatedAt()); builder.setQProfileKey(input.qpKey()); builder.getMutableParamsByKey().putAll(input.params()); return builder.build(); }).collect(toList())); }
private static ActiveRule convert(ScannerReport.ActiveRule input, Rule rule) { RuleKey key = RuleKey.of(input.getRuleRepository(), input.getRuleKey()); Map<String, String> params = new HashMap<>(input.getParamsByKeyMap()); long updatedAt = input.getUpdatedAt(); return new ActiveRule(key, input.getSeverity().name(), params, updatedAt == 0 ? input.getCreatedAt() : updatedAt, rule.getPluginKey(), emptyToNull(input.getQProfileKey())); } }
private void updateActiveRules() { activeRuleEditor.setText(""); StringBuilder builder = new StringBuilder(); try (CloseableIterator<ScannerReport.ActiveRule> activeRuleCloseableIterator = reader.readActiveRules()) { while (activeRuleCloseableIterator.hasNext()) { builder.append(activeRuleCloseableIterator.next().toString()).append("\n"); } activeRuleEditor.setText(builder.toString()); } }
@Override public void publish(ScannerReportWriter writer) { final ScannerReport.ActiveRule.Builder builder = ScannerReport.ActiveRule.newBuilder(); writer.writeActiveRules(activeRules.findAll().stream() .map(DefaultActiveRule.class::cast) .map(input -> { builder.clear(); builder.setRuleRepository(input.ruleKey().repository()); builder.setRuleKey(input.ruleKey().rule()); builder.setSeverity(Constants.Severity.valueOf(input.severity())); builder.setCreatedAt(input.createdAt()); builder.setUpdatedAt(input.updatedAt()); builder.setQProfileKey(input.qpKey()); builder.getMutableParamsByKey().putAll(input.params()); return builder.build(); }).collect(toList())); }
@Override public void execute() { List<ActiveRule> activeRules = new ArrayList<>(); try (CloseableIterator<ScannerReport.ActiveRule> batchActiveRules = batchReportReader.readActiveRules()) { while (batchActiveRules.hasNext()) { ScannerReport.ActiveRule scannerReportActiveRule = batchActiveRules.next(); Optional<Rule> rule = ruleRepository.findByKey(RuleKey.of(scannerReportActiveRule.getRuleRepository(), scannerReportActiveRule.getRuleKey())); if (rule.isPresent() && rule.get().getStatus() != RuleStatus.REMOVED && !rule.get().isExternal()) { ActiveRule activeRule = convert(scannerReportActiveRule, rule.get()); activeRules.add(activeRule); } } } activeRulesHolder.set(activeRules); }
private void updateActiveRules() { activeRuleEditor.setText(""); StringBuilder builder = new StringBuilder(); try (CloseableIterator<ScannerReport.ActiveRule> activeRuleCloseableIterator = reader.readActiveRules()) { while (activeRuleCloseableIterator.hasNext()) { builder.append(activeRuleCloseableIterator.next().toString()).append("\n"); } activeRuleEditor.setText(builder.toString()); } }
public CloseableIterator<ScannerReport.ActiveRule> readActiveRules() { File file = fileStructure.activeRules(); if (!fileExists(file)) { return emptyCloseableIterator(); } return Protobuf.readStream(file, ScannerReport.ActiveRule.parser()); }
private static ActiveRule convert(ScannerReport.ActiveRule input, Rule rule) { RuleKey key = RuleKey.of(input.getRuleRepository(), input.getRuleKey()); Map<String, String> params = new HashMap<>(input.getParamsByKeyMap()); return new ActiveRule(key, input.getSeverity().name(), params, input.getCreatedAt(), rule.getPluginKey()); } }
@Test public void feed_active_rules() { ruleRepository.add(XOO_X1) .setPluginKey("xoo"); ruleRepository.add(XOO_X2) .setPluginKey("xoo"); ScannerReport.ActiveRule.Builder batch1 = ScannerReport.ActiveRule.newBuilder() .setRuleRepository(XOO_X1.repository()) .setRuleKey(XOO_X1.rule()) .setSeverity(Constants.Severity.BLOCKER) .setCreatedAt(1000L) .setUpdatedAt(1200L); batch1.getMutableParamsByKey().put("p1", "v1"); ScannerReport.ActiveRule.Builder batch2 = ScannerReport.ActiveRule.newBuilder() .setRuleRepository(XOO_X2.repository()).setRuleKey(XOO_X2.rule()).setSeverity(Constants.Severity.MAJOR); batchReportReader.putActiveRules(asList(batch1.build(), batch2.build())); underTest.execute(new TestComputationStepContext()); assertThat(activeRulesHolder.getAll()).hasSize(2); ActiveRule ar1 = activeRulesHolder.get(XOO_X1).get(); assertThat(ar1.getSeverity()).isEqualTo(Severity.BLOCKER); assertThat(ar1.getParams()).containsExactly(MapEntry.entry("p1", "v1")); assertThat(ar1.getPluginKey()).isEqualTo("xoo"); assertThat(ar1.getUpdatedAt()).isEqualTo(1200L); ActiveRule ar2 = activeRulesHolder.get(XOO_X2).get(); assertThat(ar2.getSeverity()).isEqualTo(Severity.MAJOR); assertThat(ar2.getParams()).isEmpty(); assertThat(ar2.getPluginKey()).isEqualTo("xoo"); assertThat(ar1.getUpdatedAt()).isEqualTo(1200L); }
@Override public void execute(ComputationStep.Context context) { List<ActiveRule> activeRules = new ArrayList<>(); try (CloseableIterator<ScannerReport.ActiveRule> batchActiveRules = batchReportReader.readActiveRules()) { while (batchActiveRules.hasNext()) { ScannerReport.ActiveRule scannerReportActiveRule = batchActiveRules.next(); Optional<Rule> rule = ruleRepository.findByKey(RuleKey.of(scannerReportActiveRule.getRuleRepository(), scannerReportActiveRule.getRuleKey())); if (rule.isPresent() && rule.get().getStatus() != RuleStatus.REMOVED && !rule.get().isExternal()) { activeRules.add(convert(scannerReportActiveRule, rule.get())); } } } activeRulesHolder.set(activeRules); }
@Test public void ignore_not_found_rules() { ScannerReport.ActiveRule.Builder batch1 = ScannerReport.ActiveRule.newBuilder() .setRuleRepository(XOO_X1.repository()).setRuleKey(XOO_X1.rule()) .setSeverity(Constants.Severity.BLOCKER); batchReportReader.putActiveRules(asList(batch1.build())); underTest.execute(new TestComputationStepContext()); assertThat(activeRulesHolder.getAll()).isEmpty(); } }
@Test public void ignore_rules_with_status_REMOVED() { ruleRepository.add(new DumbRule(XOO_X1).setStatus(RuleStatus.REMOVED)); ScannerReport.ActiveRule.Builder batch1 = ScannerReport.ActiveRule.newBuilder() .setRuleRepository(XOO_X1.repository()).setRuleKey(XOO_X1.rule()) .setSeverity(Constants.Severity.BLOCKER); batchReportReader.putActiveRules(asList(batch1.build())); underTest.execute(new TestComputationStepContext()); assertThat(activeRulesHolder.getAll()).isEmpty(); }
public CloseableIterator<ScannerReport.ActiveRule> readActiveRules() { File file = fileStructure.activeRules(); if (!fileExists(file)) { return emptyCloseableIterator(); } return Protobuf.readStream(file, ScannerReport.ActiveRule.parser()); }