From 42f1fa79f851bf548aa54dc5266e15b1361c3840 Mon Sep 17 00:00:00 2001 From: Toshiya Kobayashi Date: Mon, 20 Nov 2023 18:37:59 +0900 Subject: [PATCH 1/2] [DROOLS-7578] Evaluate Impact analysis for ansible integration rules - Quick prototype. Works for a basic example : ParserTest - Replace jboss repo with apache repo for snapshot --- .../api/domain/conditions/AstCondition.java | 8 + .../api/domain/conditions/MapCondition.java | 2 +- .../pom.xml | 52 ++++ .../visualization/parser/LhsParser.java | 80 ++++++ .../visualization/parser/RhsParser.java | 58 +++++ .../visualization/parser/RulesSetParser.java | 37 +++ .../main/resources/simplelogger.properties | 24 ++ .../visualization/parser/ParserTest.java | 243 ++++++++++++++++++ .../test/resources/simplelogger.properties | 25 ++ pom.xml | 13 +- 10 files changed, 535 insertions(+), 7 deletions(-) create mode 100644 drools-ansible-rulebook-integration-visualization/pom.xml create mode 100644 drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/LhsParser.java create mode 100644 drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/RhsParser.java create mode 100644 drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/RulesSetParser.java create mode 100644 drools-ansible-rulebook-integration-visualization/src/main/resources/simplelogger.properties create mode 100644 drools-ansible-rulebook-integration-visualization/src/test/java/org/drools/ansible/rulebook/integration/visualization/parser/ParserTest.java create mode 100644 drools-ansible-rulebook-integration-visualization/src/test/resources/simplelogger.properties diff --git a/drools-ansible-rulebook-integration-api/src/main/java/org/drools/ansible/rulebook/integration/api/domain/conditions/AstCondition.java b/drools-ansible-rulebook-integration-api/src/main/java/org/drools/ansible/rulebook/integration/api/domain/conditions/AstCondition.java index 058785a0..97751a87 100644 --- a/drools-ansible-rulebook-integration-api/src/main/java/org/drools/ansible/rulebook/integration/api/domain/conditions/AstCondition.java +++ b/drools-ansible-rulebook-integration-api/src/main/java/org/drools/ansible/rulebook/integration/api/domain/conditions/AstCondition.java @@ -52,6 +52,10 @@ public MultipleConditions(RuleGenerationContext ruleContext) { protected abstract org.drools.model.Condition.Type getConditionType(); + public List getConditions() { + return conditions; + } + @Override public ViewItem toPattern(RuleGenerationContext ruleContext) { if (conditions.size() == 1) { @@ -275,5 +279,9 @@ public PatternCondition negate(RuleGenerationContext ruleContext) { public SingleCondition

addSingleCondition(PrototypeExpression left, Index.ConstraintType operator, PrototypeExpression right) { return parent.addSingleCondition(left, operator, right); } + + public ParsedCondition getParsedCondition() { + return parsedCondition; + } } } \ No newline at end of file diff --git a/drools-ansible-rulebook-integration-api/src/main/java/org/drools/ansible/rulebook/integration/api/domain/conditions/MapCondition.java b/drools-ansible-rulebook-integration-api/src/main/java/org/drools/ansible/rulebook/integration/api/domain/conditions/MapCondition.java index a2edb95b..286890c0 100644 --- a/drools-ansible-rulebook-integration-api/src/main/java/org/drools/ansible/rulebook/integration/api/domain/conditions/MapCondition.java +++ b/drools-ansible-rulebook-integration-api/src/main/java/org/drools/ansible/rulebook/integration/api/domain/conditions/MapCondition.java @@ -100,7 +100,7 @@ private static void parseTimeOut(RuleGenerationContext ruleContext, MapCondition } } - private static Condition map2Ast(RuleGenerationContext ruleContext, MapCondition condition, AstCondition.MultipleConditions parent) { + public static Condition map2Ast(RuleGenerationContext ruleContext, MapCondition condition, AstCondition.MultipleConditions parent) { assert(condition.getMap().size() == 1); Map.Entry entry = condition.getMap().entrySet().iterator().next(); String expressionName = (String) entry.getKey(); diff --git a/drools-ansible-rulebook-integration-visualization/pom.xml b/drools-ansible-rulebook-integration-visualization/pom.xml new file mode 100644 index 00000000..f7870756 --- /dev/null +++ b/drools-ansible-rulebook-integration-visualization/pom.xml @@ -0,0 +1,52 @@ + + + + drools-ansible-rulebook-integration + org.drools + 1.0.5-SNAPSHOT + + 4.0.0 + + drools-ansible-rulebook-integration-visualization + + Drools :: Ansible Rulebook Integration :: Visualization + + + + org.slf4j + slf4j-simple + + + org.drools + drools-ansible-rulebook-integration-api + ${project.version} + + + + org.drools + drools-impact-analysis-parser + + + org.drools + drools-impact-analysis-graph-common + + + org.drools + drools-impact-analysis-graph-graphviz + + + + junit + junit + test + + + org.assertj + assertj-core + test + + + + diff --git a/drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/LhsParser.java b/drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/LhsParser.java new file mode 100644 index 00000000..9699a411 --- /dev/null +++ b/drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/LhsParser.java @@ -0,0 +1,80 @@ +package org.drools.ansible.rulebook.integration.visualization.parser; + +import java.util.List; + +import org.drools.ansible.rulebook.integration.api.domain.RuleGenerationContext; +import org.drools.ansible.rulebook.integration.api.domain.conditions.AstCondition; +import org.drools.ansible.rulebook.integration.api.domain.conditions.Condition; +import org.drools.ansible.rulebook.integration.api.domain.conditions.MapCondition; +import org.drools.ansible.rulebook.integration.api.rulesmodel.ParsedCondition; +import org.drools.base.facttemplates.FactTemplateObjectType; +import org.drools.impact.analysis.model.left.Constraint; +import org.drools.impact.analysis.model.left.LeftHandSide; +import org.drools.impact.analysis.model.left.Pattern; +import org.drools.model.ConstraintOperator; +import org.drools.model.Index; +import org.drools.model.PrototypeExpression; + +public class LhsParser { + + private LhsParser() { + // intentionally left blank + } + + public static void parse(Condition condition, LeftHandSide lhs) { + Pattern pattern = new Pattern(FactTemplateObjectType.class, true); + parseConditions(condition, pattern); + lhs.addPattern(pattern); + } + + private static void parseConditions(Condition condition, Pattern pattern) { + if (condition instanceof MapCondition mapCondition) { + // Firstly, process the raw condition + RuleGenerationContext ruleContext = new RuleGenerationContext(); + Condition astCondition = MapCondition.map2Ast(ruleContext, mapCondition, null); + parseConditions(astCondition, pattern); + } else if (condition instanceof AstCondition.MultipleConditions multipleConditions) { + // All and Any conditions + List conditions = multipleConditions.getConditions(); + conditions.forEach(c -> parseConditions(c, pattern)); + } else if (condition instanceof AstCondition.SingleCondition singleCondition) { + // Single condition turns into a constraint + ParsedCondition parsedCondition = singleCondition.getParsedCondition(); + PrototypeExpression left = parsedCondition.getLeft(); + ConstraintOperator operator = parsedCondition.getOperator(); + PrototypeExpression right = parsedCondition.getRight(); + Constraint constraint = createConstraint(operator, left, right); + pattern.addConstraint(constraint); + pattern.addReactOn(constraint.getProperty()); + } else { + throw new UnsupportedOperationException("Unsupported condition type: " + condition.getClass().getName()); + } + } + + private static Constraint createConstraint(ConstraintOperator operator, PrototypeExpression left, PrototypeExpression right) { + // quick implementation assuming that the right is always a fixed value + return new Constraint(convertConstraintOperator(operator), left.getIndexingKey().get(), ((PrototypeExpression.FixedValue) right).getValue()); + } + + private static Constraint.Type convertConstraintOperator(ConstraintOperator operator) { + if (operator instanceof Index.ConstraintType constraintType) { + switch (constraintType) { + case EQUAL: + return Constraint.Type.EQUAL; + case NOT_EQUAL: + return Constraint.Type.NOT_EQUAL; + case GREATER_THAN: + return Constraint.Type.GREATER_THAN; + case GREATER_OR_EQUAL: + return Constraint.Type.GREATER_OR_EQUAL; + case LESS_OR_EQUAL: + return Constraint.Type.LESS_OR_EQUAL; + case LESS_THAN: + return Constraint.Type.LESS_THAN; + default: + return Constraint.Type.UNKNOWN; + } + } + return Constraint.Type.UNKNOWN; + } +} diff --git a/drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/RhsParser.java b/drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/RhsParser.java new file mode 100644 index 00000000..aa162e9a --- /dev/null +++ b/drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/RhsParser.java @@ -0,0 +1,58 @@ +package org.drools.ansible.rulebook.integration.visualization.parser; + +import java.util.List; +import java.util.Map; + +import org.drools.ansible.rulebook.integration.api.domain.actions.MapAction; +import org.drools.base.facttemplates.FactTemplateObjectType; +import org.drools.impact.analysis.model.right.DeleteSpecificFactAction; +import org.drools.impact.analysis.model.right.InsertAction; +import org.drools.impact.analysis.model.right.InsertedProperty; +import org.drools.impact.analysis.model.right.RightHandSide; +import org.drools.impact.analysis.model.right.SpecificProperty; + +public class RhsParser { + + private RhsParser() { + // intentionally private + } + + public static void parse(List mapActions, RightHandSide rhs) { + for (MapAction mapAction : mapActions) { + Map map = (Map) mapAction.get("Action"); + String action = (String) map.get("action"); + Map actionArgs = (Map) map.get("action_args"); + switch (action) { + case "post_event": + addInsertAction((Map) actionArgs.get("event"), rhs); + break; + case "set_fact": + addInsertAction((Map) actionArgs.get("fact"), rhs); + break; + case "retract_fact": + addDeleteAction((Map) actionArgs.get("fact"), rhs); + break; + default: + // ignore any other actions + } + } + } + + private static void addInsertAction(Map propertyMap, RightHandSide rhs) { + InsertAction action = new InsertAction(FactTemplateObjectType.class); + propertyMap.entrySet().forEach(entry -> { + InsertedProperty insertedProperty = new InsertedProperty(entry.getKey(), entry.getValue()); + action.addInsertedProperty(insertedProperty); + }); + rhs.addAction(action); + } + + private static void addDeleteAction(Map propertyMap, RightHandSide rhs) { + DeleteSpecificFactAction action = new DeleteSpecificFactAction(FactTemplateObjectType.class); + propertyMap.entrySet().forEach(entry -> { + SpecificProperty specificProperty = new SpecificProperty(entry.getKey(), entry.getValue()); + action.addSpecificProperty(specificProperty); + }); + rhs.addAction(action); + } +} diff --git a/drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/RulesSetParser.java b/drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/RulesSetParser.java new file mode 100644 index 00000000..e0c6c7ad --- /dev/null +++ b/drools-ansible-rulebook-integration-visualization/src/main/java/org/drools/ansible/rulebook/integration/visualization/parser/RulesSetParser.java @@ -0,0 +1,37 @@ +package org.drools.ansible.rulebook.integration.visualization.parser; + +import java.util.ArrayList; +import java.util.List; + +import org.drools.ansible.rulebook.integration.api.domain.RulesSet; +import org.drools.ansible.rulebook.integration.api.domain.conditions.ConditionParseUtil; +import org.drools.impact.analysis.model.AnalysisModel; +import org.drools.impact.analysis.model.Package; +import org.drools.impact.analysis.model.Rule; +import org.drools.impact.analysis.model.left.LeftHandSide; +import org.drools.impact.analysis.model.right.RightHandSide; +import org.drools.model.impl.RuleBuilder; + +/** + * Parse drools-ansible RulesSet to drools-impact-analysis AnalysisModel + */ +public class RulesSetParser { + + public static AnalysisModel parse(RulesSet rulesSet) { + AnalysisModel analysisModel = new AnalysisModel(); + List rules = new ArrayList<>(); + rulesSet.getRules().forEach(ruleContainer -> { + rules.add(parseRule(ruleContainer.getRule())); + }); + Package pkg = new Package(RuleBuilder.DEFAULT_PACKAGE, rules); + analysisModel.addPackage(pkg); + return analysisModel; + } + + private static Rule parseRule(org.drools.ansible.rulebook.integration.api.domain.Rule ansibleRule) { + Rule analysisRule = new Rule(RuleBuilder.DEFAULT_PACKAGE, ansibleRule.getName(), null); + LhsParser.parse(ansibleRule.getCondition(), analysisRule.getLhs()); + RhsParser.parse(ansibleRule.getActions(), analysisRule.getRhs()); + return analysisRule; + } +} diff --git a/drools-ansible-rulebook-integration-visualization/src/main/resources/simplelogger.properties b/drools-ansible-rulebook-integration-visualization/src/main/resources/simplelogger.properties new file mode 100644 index 00000000..3494a520 --- /dev/null +++ b/drools-ansible-rulebook-integration-visualization/src/main/resources/simplelogger.properties @@ -0,0 +1,24 @@ +# Default logging detail level for all instances of SimpleLogger. +org.slf4j.simpleLogger.defaultLogLevel=info + +# Logging detail level +org.slf4j.simpleLogger.log.org.drools.ansible.rulebook.integration=info +org.slf4j.simpleLogger.log.guru.nidi.graphviz=warn + +# Set to true if you want the current date and time to be included in output messages. +# Default is false, and will output the number of milliseconds elapsed since startup. +org.slf4j.simpleLogger.showDateTime=true + +# The date and time format to be used in the output messages. +# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat. +# If the format is not specified or is invalid, the default format is used. +# The default format is yyyy-MM-dd HH:mm:ss:SSS Z. +org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z + +# Set to true if you want to output the current thread name. +# Defaults to true. +org.slf4j.simpleLogger.showThreadName=true + +# Log output +# Defaults to System.err +org.slf4j.simpleLogger.logFile=System.out diff --git a/drools-ansible-rulebook-integration-visualization/src/test/java/org/drools/ansible/rulebook/integration/visualization/parser/ParserTest.java b/drools-ansible-rulebook-integration-visualization/src/test/java/org/drools/ansible/rulebook/integration/visualization/parser/ParserTest.java new file mode 100644 index 00000000..59a4a167 --- /dev/null +++ b/drools-ansible-rulebook-integration-visualization/src/test/java/org/drools/ansible/rulebook/integration/visualization/parser/ParserTest.java @@ -0,0 +1,243 @@ +package org.drools.ansible.rulebook.integration.visualization.parser; + +import java.nio.file.Path; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.drools.ansible.rulebook.integration.api.domain.RulesSet; +import org.drools.base.facttemplates.FactTemplateObjectType; +import org.drools.impact.analysis.graph.Graph; +import org.drools.impact.analysis.graph.Link; +import org.drools.impact.analysis.graph.ModelToGraphConverter; +import org.drools.impact.analysis.graph.Node; +import org.drools.impact.analysis.graph.ReactivityType; +import org.drools.impact.analysis.graph.graphviz.GraphImageGenerator; +import org.drools.impact.analysis.model.AnalysisModel; +import org.drools.impact.analysis.model.Rule; +import org.drools.impact.analysis.model.left.Constraint; +import org.drools.impact.analysis.model.left.Pattern; +import org.drools.impact.analysis.model.right.ConsequenceAction; +import org.drools.impact.analysis.model.right.DeleteSpecificFactAction; +import org.drools.impact.analysis.model.right.InsertAction; +import org.junit.Test; + +import org.drools.ansible.rulebook.integration.api.RuleNotation; +import org.drools.ansible.rulebook.integration.api.RuleFormat; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ParserTest { + + private String JSON = + """ + { + "name":"05 Post event", + "hosts":[ + "all" + ], + "rules":[ + { + "Rule":{ + "name":"r1", + "condition":{ + "AllCondition":[ + { + "EqualsExpression":{ + "lhs":{ + "Event":"i" + }, + "rhs":{ + "Integer":1 + } + } + } + ] + }, + "actions":[ + { + "Action":{ + "action":"post_event", + "action_args":{ + "event":{ + "msg":"hello world" + } + } + } + } + ], + "enabled":true + } + }, + { + "Rule":{ + "name":"r2", + "condition":{ + "AllCondition":[ + { + "EqualsExpression":{ + "lhs":{ + "Event":"msg" + }, + "rhs":{ + "String":"hello world" + } + } + } + ] + }, + "actions":[ + { + "Action":{ + "action":"set_fact", + "action_args": { + "fact": { + "status": "created" + } + } + } + } + ], + "enabled":true + } + }, + { + "Rule":{ + "name":"r3", + "condition":{ + "AllCondition":[ + { + "EqualsExpression":{ + "lhs":{ + "Event":"status" + }, + "rhs":{ + "String":"created" + } + } + } + ] + }, + "actions":[ + { + "Action":{ + "action":"debug", + "action_args":{ + } + } + } + ], + "enabled":true + } + }, + { + "Rule":{ + "name":"r4", + "condition":{ + "AllCondition":[ + { + "EqualsExpression":{ + "lhs":{ + "Event":"i" + }, + "rhs":{ + "Integer":2 + } + } + } + ] + }, + "actions":[ + { + "Action":{ + "action":"retract_fact", + "action_args": { + "fact": { + "status": "created" + } + } + } + } + ], + "enabled":true + } + } + ] + } + """; + + @Test + public void parse4RulesWithPostEventSetFactRetractFact() { + RulesSet rulesSet = RuleNotation.CoreNotation.INSTANCE.toRulesSet(RuleFormat.JSON, JSON); + AnalysisModel analysisModel = RulesSetParser.parse(rulesSet); + + List rules = analysisModel.getPackages().get(0).getRules(); + assertThat(rules).hasSize(4); + Rule rule1 = rules.get(0); + Pattern pattern1 = rule1.getLhs().getPatterns().get(0); + assertThat(pattern1.getPatternClass()).isEqualTo(FactTemplateObjectType.class); + Constraint constraint1 = pattern1.getConstraints().iterator().next(); + assertThat(constraint1.getProperty()).isEqualTo("i"); + assertThat(constraint1.getValue()).isEqualTo(1); + ConsequenceAction action1 = rule1.getRhs().getActions().get(0); + assertThat(action1.getClass()).isEqualTo(InsertAction.class); + assertThat(((InsertAction)action1).getInsertedProperties()).hasSize(1); + assertThat(((InsertAction)action1).getInsertedProperties().get(0).getProperty()).isEqualTo("msg"); + assertThat(((InsertAction)action1).getInsertedProperties().get(0).getValue()).isEqualTo("hello world"); + + Rule rule2 = rules.get(1); + Pattern pattern2 = rule2.getLhs().getPatterns().get(0); + assertThat(pattern2.getPatternClass()).isEqualTo(FactTemplateObjectType.class); + Constraint constraint2 = pattern2.getConstraints().iterator().next(); + assertThat(constraint2.getProperty()).isEqualTo("msg"); + assertThat(constraint2.getValue()).isEqualTo("hello world"); + ConsequenceAction action2 = rule2.getRhs().getActions().get(0); + assertThat(action2.getClass()).isEqualTo(InsertAction.class); + assertThat(((InsertAction)action2).getInsertedProperties()).hasSize(1); + assertThat(((InsertAction)action2).getInsertedProperties().get(0).getProperty()).isEqualTo("status"); + assertThat(((InsertAction)action2).getInsertedProperties().get(0).getValue()).isEqualTo("created"); + + Rule rule3 = rules.get(2); + Pattern pattern3 = rule3.getLhs().getPatterns().get(0); + assertThat(pattern3.getPatternClass()).isEqualTo(FactTemplateObjectType.class); + Constraint constraint3 = pattern3.getConstraints().iterator().next(); + assertThat(constraint3.getProperty()).isEqualTo("status"); + assertThat(constraint3.getValue()).isEqualTo("created"); + assertThat(rule3.getRhs().getActions()).isEmpty(); // debug action is ignored + + Rule rule4 = rules.get(3); + Pattern pattern4 = rule4.getLhs().getPatterns().get(0); + assertThat(pattern4.getPatternClass()).isEqualTo(FactTemplateObjectType.class); + Constraint constraint4 = pattern4.getConstraints().iterator().next(); + assertThat(constraint4.getProperty()).isEqualTo("i"); + assertThat(constraint4.getValue()).isEqualTo(2); + ConsequenceAction action4 = rule4.getRhs().getActions().get(0); + assertThat(action4.getClass()).isEqualTo(DeleteSpecificFactAction.class); + assertThat(((DeleteSpecificFactAction)action4).getSpecificProperties()).hasSize(1); + assertThat(((DeleteSpecificFactAction)action4).getSpecificProperties().get(0).getProperty()).isEqualTo("status"); + assertThat(((DeleteSpecificFactAction)action4).getSpecificProperties().get(0).getValue()).isEqualTo("created"); + + ModelToGraphConverter converter = new ModelToGraphConverter(); + Graph graph = converter.toGraph(analysisModel); + + assertLink(graph, "defaultpkg.r1", "defaultpkg.r2", ReactivityType.POSITIVE); + assertLink(graph, "defaultpkg.r2", "defaultpkg.r3", ReactivityType.POSITIVE); + assertLink(graph, "defaultpkg.r4", "defaultpkg.r3", ReactivityType.NEGATIVE); + + GraphImageGenerator generator = new GraphImageGenerator("ParserTest-graph"); + String filePath = generator.generateSvg(graph); + assertThat(Path.of(filePath)).exists(); + } + + private void assertLink(Graph graph, String sourceFqdn, String targetFqdn, ReactivityType... expectedTypes) { + Node source = graph.getNodeMap().get(sourceFqdn); + Node target = graph.getNodeMap().get(targetFqdn); + List outgoingLinks = source.getOutgoingLinks().stream().filter(l -> l.getTarget().equals(target)).collect(Collectors.toList()); + List incomingLinks = target.getIncomingLinks().stream().filter(l -> l.getSource().equals(source)).collect(Collectors.toList()); + assertThat(outgoingLinks).hasSameElementsAs(incomingLinks); + + List outgoingLinkTypelist = outgoingLinks.stream().map(l -> l.getReactivityType()).collect(Collectors.toList()); + List expectedTypeList = Arrays.asList(expectedTypes); + assertThat(outgoingLinkTypelist).hasSameElementsAs(expectedTypeList); + } +} diff --git a/drools-ansible-rulebook-integration-visualization/src/test/resources/simplelogger.properties b/drools-ansible-rulebook-integration-visualization/src/test/resources/simplelogger.properties new file mode 100644 index 00000000..91343968 --- /dev/null +++ b/drools-ansible-rulebook-integration-visualization/src/test/resources/simplelogger.properties @@ -0,0 +1,25 @@ +# Default logging detail level for all instances of SimpleLogger. +org.slf4j.simpleLogger.defaultLogLevel=info + +# Logging detail level +org.slf4j.simpleLogger.log.org.drools.ansible.rulebook.integration=warn +org.slf4j.simpleLogger.log.guru.nidi.graphviz=warn + + +# Set to true if you want the current date and time to be included in output messages. +# Default is false, and will output the number of milliseconds elapsed since startup. +org.slf4j.simpleLogger.showDateTime=true + +# The date and time format to be used in the output messages. +# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat. +# If the format is not specified or is invalid, the default format is used. +# The default format is yyyy-MM-dd HH:mm:ss:SSS Z. +org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss:SSS Z + +# Set to true if you want to output the current thread name. +# Defaults to true. +org.slf4j.simpleLogger.showThreadName=true + +# Log output +# Defaults to System.err +org.slf4j.simpleLogger.logFile=System.out diff --git a/pom.xml b/pom.xml index 57a32f9d..7aed4916 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ drools-ansible-rulebook-integration-benchmark drools-ansible-rulebook-integration-tests drools-ansible-rulebook-integration-main + drools-ansible-rulebook-integration-visualization Drools :: Ansible Rulebook Integration @@ -46,9 +47,9 @@ - jboss-public-repository-group - JBoss Public Repository Group - https://repository.jboss.org/nexus/content/groups/public/ + apache-public-repository-group + Apache Public Repository Group + https://repository.apache.org/content/groups/public/ default false @@ -71,9 +72,9 @@ - jboss-public-repository-group - JBoss Public Repository Group - https://repository.jboss.org/nexus/content/groups/public/ + apache-public-repository-group + Apache Public Repository Group + https://repository.apache.org/content/groups/public/ false From 5ceabec812f72d10368a2e669b0d608da9d52bf8 Mon Sep 17 00:00:00 2001 From: Toshiya Kobayashi Date: Mon, 11 Dec 2023 16:50:06 +0900 Subject: [PATCH 2/2] build apache/incubator-kie-drools rather than kiegroup --- .ci/project-dependencies.yaml | 4 ++-- .ci/pull-request-config.yaml | 2 +- .github/workflows/pre-release.yml | 2 +- .github/workflows/release.yml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.ci/project-dependencies.yaml b/.ci/project-dependencies.yaml index d06217d0..54e95a16 100644 --- a/.ci/project-dependencies.yaml +++ b/.ci/project-dependencies.yaml @@ -1,6 +1,6 @@ version: "2.1" dependencies: - - project: kiegroup/drools + - project: apache/incubator-kie-drools mapping: dependant: default: @@ -10,7 +10,7 @@ dependencies: - project: kiegroup/drools-ansible-rulebook-integration dependencies: - - project: kiegroup/drools + - project: apache/incubator-kie-drools mapping: dependencies: default: diff --git a/.ci/pull-request-config.yaml b/.ci/pull-request-config.yaml index a57df626..cba59a83 100644 --- a/.ci/pull-request-config.yaml +++ b/.ci/pull-request-config.yaml @@ -3,7 +3,7 @@ version: "2.1" dependencies: ./project-dependencies.yaml build: - - project: kiegroup/drools + - project: apache/incubator-kie-drools build-command: current: mvn --batch-mode --update-snapshots install -Dquickly diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 1dfa375d..a7154d5f 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -20,7 +20,7 @@ jobs: - name: Install Drools Snapshot uses: actions/checkout@v3 with: - repository: kiegroup/drools + repository: apache/incubator-kie-drools path: drools - name: Build Drools Snapshot with Maven diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 697dfe78..67a82fe9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: - name: Install Drools Snapshot uses: actions/checkout@v3 with: - repository: kiegroup/drools + repository: apache/incubator-kie-drools path: drools - name: Build Drools Snapshot with Maven