Enable/disable kie logging #271
Allow to define a JMT token to give access to a project over reverse proxy #274 Hot deploy management #269 => UI for defiinition
This commit is contained in:
parent
a3fc3ae71f
commit
488870e587
32 changed files with 664 additions and 167 deletions
|
|
@ -64,95 +64,98 @@ public class StoreLoggingService {
|
|||
item.setServerName(sessionContext.getServerName());
|
||||
Map<Long, BusinessTransactionAction> actions = new HashMap<>();
|
||||
SessionExecution sessionExecution = sessionContext.getSessionExecution();
|
||||
BusinessTransactionAction businessTransactionoutput = null;
|
||||
for (Fact fact : sessionExecution.getFacts()) {
|
||||
BusinessTransactionAction businessTransactionAction = new BusinessTransactionAction();
|
||||
businessTransactionAction.setId(UUID.randomUUID().toString());
|
||||
businessTransactionAction.setBusinessTransactionId(item.getId());
|
||||
if (fact.getFactType().equals(FactType.INPUTDATA)) {
|
||||
businessTransactionAction.setEventType(EventType.INPUT);
|
||||
businessTransactionAction.setInputData(fact);
|
||||
businessTransactionAction.setEventNumber(0);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
} else if (fact.getFactType().equals(FactType.OUTPUTDATA)) {
|
||||
businessTransactionAction.setEventType(EventType.OUPUT);
|
||||
businessTransactionAction.setOutputData(fact);
|
||||
businessTransactionoutput = businessTransactionAction;
|
||||
if (sessionExecution != null) {
|
||||
BusinessTransactionAction businessTransactionoutput = null;
|
||||
for (Fact fact : sessionExecution.getFacts()) {
|
||||
BusinessTransactionAction businessTransactionAction = new BusinessTransactionAction();
|
||||
businessTransactionAction.setId(UUID.randomUUID().toString());
|
||||
businessTransactionAction.setBusinessTransactionId(item.getId());
|
||||
if (fact.getFactType().equals(FactType.INPUTDATA)) {
|
||||
businessTransactionAction.setEventType(EventType.INPUT);
|
||||
businessTransactionAction.setInputData(fact);
|
||||
businessTransactionAction.setEventNumber(0);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
} else if (fact.getFactType().equals(FactType.OUTPUTDATA)) {
|
||||
businessTransactionAction.setEventType(EventType.OUPUT);
|
||||
businessTransactionAction.setOutputData(fact);
|
||||
businessTransactionoutput = businessTransactionAction;
|
||||
|
||||
} else if (fact.getFactType().equals(FactType.INSERTED)) {
|
||||
businessTransactionAction.setEventType(EventType.INSERTFACT);
|
||||
businessTransactionAction.setFact(fact);
|
||||
businessTransactionAction.setEventNumber(ii++);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
} else if (fact.getFactType().equals(FactType.UPDATED_NEWVALUE)) {
|
||||
businessTransactionAction.setEventType(EventType.UPDATEFACTNEWVALUE);
|
||||
businessTransactionAction.setFact(fact);
|
||||
businessTransactionAction.setEventNumber(ii++);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
} else if (fact.getFactType().equals(FactType.UPDATED_OLDVALUE)) {
|
||||
businessTransactionAction.setEventType(EventType.UPDATEFACTOLDVALUE);
|
||||
businessTransactionAction.setFact(fact);
|
||||
businessTransactionAction.setEventNumber(ii++);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
} else if (fact.getFactType().equals(FactType.DELETED)) {
|
||||
businessTransactionAction.setEventType(EventType.RETRACTFACT);
|
||||
businessTransactionAction.setFact(fact);
|
||||
businessTransactionAction.setEventNumber(ii++);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
}
|
||||
}
|
||||
for (ProcessExecution processExecution : sessionExecution.getProcessExecutions()) {
|
||||
BusinessTransactionAction businessTransactionActionStart = new BusinessTransactionAction();
|
||||
|
||||
businessTransactionActionStart.setEventType(EventType.STARTPROCESS);
|
||||
businessTransactionActionStart.setProcessID(processExecution.getProcessId());
|
||||
|
||||
businessTransactionActionStart.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionStart.setEventNumber(ii++);
|
||||
businessTransactionActionStart.setId(UUID.randomUUID().toString());
|
||||
actions.put(businessTransactionActionStart.getEventNumber(), businessTransactionActionStart);
|
||||
for (RuleflowGroup rfg : processExecution.getRuleflowGroups()) {
|
||||
BusinessTransactionAction businessTransactionActionStartRFG = new BusinessTransactionAction();
|
||||
|
||||
businessTransactionActionStartRFG.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionStartRFG.setEventType(EventType.STARTRULEFLOWGROUP);
|
||||
businessTransactionActionStartRFG.setRuleflowGroupName(rfg.getRuleflowGroup());
|
||||
businessTransactionActionStartRFG.setEventNumber(ii++);
|
||||
businessTransactionActionStartRFG.setId(UUID.randomUUID().toString());
|
||||
actions.put(businessTransactionActionStartRFG.getEventNumber(), businessTransactionActionStartRFG);
|
||||
for (RuleExecution ruleExecution : rfg.getRuleExecutionList()) {
|
||||
BusinessTransactionAction businessTransactionActionRule = new BusinessTransactionAction();
|
||||
|
||||
businessTransactionActionRule.setEventType(EventType.RULE);
|
||||
businessTransactionActionRule.setRuleflowGroupName(rfg.getRuleflowGroup());
|
||||
businessTransactionActionRule.setRuleExecution(ruleExecution);
|
||||
businessTransactionActionRule.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionRule.setProcessID(processExecution.getProcessId());
|
||||
businessTransactionActionRule.setEventNumber(ii++);
|
||||
businessTransactionActionRule.setId(UUID.randomUUID().toString());
|
||||
actions.put(businessTransactionActionRule.getEventNumber(), businessTransactionActionRule);
|
||||
} else if (fact.getFactType().equals(FactType.INSERTED)) {
|
||||
businessTransactionAction.setEventType(EventType.INSERTFACT);
|
||||
businessTransactionAction.setFact(fact);
|
||||
businessTransactionAction.setEventNumber(ii++);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
} else if (fact.getFactType().equals(FactType.UPDATED_NEWVALUE)) {
|
||||
businessTransactionAction.setEventType(EventType.UPDATEFACTNEWVALUE);
|
||||
businessTransactionAction.setFact(fact);
|
||||
businessTransactionAction.setEventNumber(ii++);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
} else if (fact.getFactType().equals(FactType.UPDATED_OLDVALUE)) {
|
||||
businessTransactionAction.setEventType(EventType.UPDATEFACTOLDVALUE);
|
||||
businessTransactionAction.setFact(fact);
|
||||
businessTransactionAction.setEventNumber(ii++);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
} else if (fact.getFactType().equals(FactType.DELETED)) {
|
||||
businessTransactionAction.setEventType(EventType.RETRACTFACT);
|
||||
businessTransactionAction.setFact(fact);
|
||||
businessTransactionAction.setEventNumber(ii++);
|
||||
actions.put(businessTransactionAction.getEventNumber(), businessTransactionAction);
|
||||
}
|
||||
BusinessTransactionAction businessTransactionActionSTOPRFG = new BusinessTransactionAction();
|
||||
|
||||
businessTransactionActionSTOPRFG.setEventType(EventType.STOPTRULEFLOWGROUP);
|
||||
businessTransactionActionSTOPRFG.setRuleflowGroupName(rfg.getRuleflowGroup());
|
||||
businessTransactionActionSTOPRFG.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionSTOPRFG.setEventNumber(ii++);
|
||||
businessTransactionActionSTOPRFG.setId(UUID.randomUUID().toString());
|
||||
actions.put(businessTransactionActionSTOPRFG.getEventNumber(), businessTransactionActionSTOPRFG);
|
||||
}
|
||||
BusinessTransactionAction businessTransactionActionEnd = new BusinessTransactionAction();
|
||||
businessTransactionActionEnd.setEventType(EventType.STOPPROCESS);
|
||||
businessTransactionActionEnd.setProcessID(processExecution.getProcessId());
|
||||
businessTransactionActionEnd.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionEnd.setEventNumber(ii++);
|
||||
businessTransactionActionEnd.setId(UUID.randomUUID().toString());
|
||||
for (ProcessExecution processExecution : sessionExecution.getProcessExecutions()) {
|
||||
BusinessTransactionAction businessTransactionActionStart = new BusinessTransactionAction();
|
||||
|
||||
actions.put(businessTransactionActionEnd.getEventNumber(), businessTransactionActionEnd);
|
||||
}
|
||||
if (businessTransactionoutput != null) {
|
||||
businessTransactionoutput.setEventNumber(ii++);
|
||||
actions.put(businessTransactionoutput.getEventNumber(), businessTransactionoutput);
|
||||
businessTransactionActionStart.setEventType(EventType.STARTPROCESS);
|
||||
businessTransactionActionStart.setProcessID(processExecution.getProcessId());
|
||||
|
||||
businessTransactionActionStart.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionStart.setEventNumber(ii++);
|
||||
businessTransactionActionStart.setId(UUID.randomUUID().toString());
|
||||
actions.put(businessTransactionActionStart.getEventNumber(), businessTransactionActionStart);
|
||||
for (RuleflowGroup rfg : processExecution.getRuleflowGroups()) {
|
||||
BusinessTransactionAction businessTransactionActionStartRFG = new BusinessTransactionAction();
|
||||
|
||||
businessTransactionActionStartRFG.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionStartRFG.setEventType(EventType.STARTRULEFLOWGROUP);
|
||||
businessTransactionActionStartRFG.setRuleflowGroupName(rfg.getRuleflowGroup());
|
||||
businessTransactionActionStartRFG.setEventNumber(ii++);
|
||||
businessTransactionActionStartRFG.setId(UUID.randomUUID().toString());
|
||||
actions.put(businessTransactionActionStartRFG.getEventNumber(), businessTransactionActionStartRFG);
|
||||
for (RuleExecution ruleExecution : rfg.getRuleExecutionList()) {
|
||||
BusinessTransactionAction businessTransactionActionRule = new BusinessTransactionAction();
|
||||
|
||||
businessTransactionActionRule.setEventType(EventType.RULE);
|
||||
businessTransactionActionRule.setRuleflowGroupName(rfg.getRuleflowGroup());
|
||||
businessTransactionActionRule.setRuleExecution(ruleExecution);
|
||||
businessTransactionActionRule.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionRule.setProcessID(processExecution.getProcessId());
|
||||
businessTransactionActionRule.setEventNumber(ii++);
|
||||
businessTransactionActionRule.setId(UUID.randomUUID().toString());
|
||||
actions.put(businessTransactionActionRule.getEventNumber(), businessTransactionActionRule);
|
||||
}
|
||||
BusinessTransactionAction businessTransactionActionSTOPRFG = new BusinessTransactionAction();
|
||||
|
||||
businessTransactionActionSTOPRFG.setEventType(EventType.STOPTRULEFLOWGROUP);
|
||||
businessTransactionActionSTOPRFG.setRuleflowGroupName(rfg.getRuleflowGroup());
|
||||
businessTransactionActionSTOPRFG.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionSTOPRFG.setEventNumber(ii++);
|
||||
businessTransactionActionSTOPRFG.setId(UUID.randomUUID().toString());
|
||||
actions.put(businessTransactionActionSTOPRFG.getEventNumber(), businessTransactionActionSTOPRFG);
|
||||
}
|
||||
BusinessTransactionAction businessTransactionActionEnd = new BusinessTransactionAction();
|
||||
businessTransactionActionEnd.setEventType(EventType.STOPPROCESS);
|
||||
businessTransactionActionEnd.setProcessID(processExecution.getProcessId());
|
||||
businessTransactionActionEnd.setBusinessTransactionId(item.getId());
|
||||
businessTransactionActionEnd.setEventNumber(ii++);
|
||||
businessTransactionActionEnd.setId(UUID.randomUUID().toString());
|
||||
|
||||
actions.put(businessTransactionActionEnd.getEventNumber(), businessTransactionActionEnd);
|
||||
}
|
||||
|
||||
if (businessTransactionoutput != null) {
|
||||
businessTransactionoutput.setEventNumber(ii++);
|
||||
actions.put(businessTransactionoutput.getEventNumber(), businessTransactionoutput);
|
||||
}
|
||||
}
|
||||
List<Long> keys = new ArrayList<>(actions.keySet());
|
||||
Collections.sort(keys);
|
||||
|
|
|
|||
|
|
@ -13,12 +13,14 @@ public class DroolsRouter extends RouteBuilder {
|
|||
private String projectName;
|
||||
private Class<?> clazzUser;
|
||||
private String processID;
|
||||
private boolean disableRuleLogging;
|
||||
|
||||
public DroolsRouter(CamelContext camelContext, Class<?> clazzUser, String projectName, String processID) {
|
||||
public DroolsRouter(CamelContext camelContext, Class<?> clazzUser, String projectName, String processID, boolean disableRuleLogging) {
|
||||
super(camelContext);
|
||||
this.clazzUser = clazzUser;
|
||||
this.projectName = projectName;
|
||||
this.processID = processID;
|
||||
this.disableRuleLogging = disableRuleLogging;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -33,6 +35,6 @@ public class DroolsRouter extends RouteBuilder {
|
|||
.param().name("body").type(body).description("The Data drools should work on").endParam()
|
||||
.responseMessage().code(200).message("Data drools worked on").endResponseMessage()
|
||||
|
||||
.to("bean:ruleService?method=runSessionObject(${header.transactionId}," + this.projectName + "," + this.processID + ",${body})");
|
||||
.to("bean:ruleService?method=runSessionObject(${header.transactionId}," + this.projectName + "," + this.processID + ",${body},"+disableRuleLogging+")");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import org.chtijbug.drools.proxy.persistence.model.ContainerRuntimePojoPersist;
|
|||
import org.chtijbug.drools.proxy.persistence.model.RuntimePersist;
|
||||
import org.chtijbug.drools.proxy.persistence.repository.ContainerRepository;
|
||||
import org.chtijbug.drools.proxy.persistence.repository.ContainerRuntimeRepository;
|
||||
import org.chtijbug.drools.proxy.persistence.repository.ProjectRepository;
|
||||
import org.chtijbug.drools.proxy.persistence.repository.RuntimeRepository;
|
||||
import org.chtijbug.kieserver.services.drools.DroolsChtijbugKieServerExtension;
|
||||
import org.chtijbug.kieserver.services.drools.DroolsChtijbugRulesExecutionService;
|
||||
|
|
@ -72,6 +73,8 @@ public class KieServiceCommon {
|
|||
private RuntimeRepository runtimeRepository;
|
||||
@Inject
|
||||
private ContainerRuntimeRepository containerRuntimeRepository;
|
||||
@Inject
|
||||
private ProjectRepository projectRepository;
|
||||
|
||||
@Value("${server.port}")
|
||||
private int serverPort;
|
||||
|
|
@ -185,6 +188,7 @@ public class KieServiceCommon {
|
|||
containerRuntimePojoPersist.setServerName(serverName);
|
||||
containerRuntimePojoPersist.setHostname(hostName);
|
||||
containerRuntimePojoPersist.setStatus(ContainerRuntimePojoPersist.STATUS.UP.name());
|
||||
containerRuntimePojoPersist.setProjectUUID(container.getProjectUUID());
|
||||
containerRuntimeRepository.save(containerRuntimePojoPersist);
|
||||
this.createContainer(kieContainerResource.getContainerId(), kieContainerResource);
|
||||
this.initCamelBusinessRoute(container);
|
||||
|
|
@ -260,7 +264,7 @@ public class KieServiceCommon {
|
|||
String projectName = container.getContainerId();
|
||||
String processId = container.getProcessID();
|
||||
this.deleteCamelBusinessRoute(projectName);
|
||||
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, processId);
|
||||
DroolsRouter droolsRouter = new DroolsRouter(camelContext, theClass, projectName, processId,container.isDisableRuleLogging());
|
||||
camelContext.addRoutes(droolsRouter);
|
||||
routes.put(containerId, droolsRouter);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,12 +27,13 @@ public class RuleService {
|
|||
logger.info("Rule Service created");
|
||||
}
|
||||
|
||||
public Object runSessionObject(String transactionID, String id, String processID, Object input) {
|
||||
public Object runSessionObject(String transactionID, String id, String processID, Object input, boolean disableRuleLogging) {
|
||||
|
||||
ChtijbugObjectRequest chtijbugObjectRequest = new ChtijbugObjectRequest();
|
||||
chtijbugObjectRequest.setTransactionID(transactionID);
|
||||
chtijbugObjectRequest.setProcessID(processID);
|
||||
chtijbugObjectRequest.setContainerID(id);
|
||||
chtijbugObjectRequest.setDisableLogging(disableRuleLogging);
|
||||
chtijbugObjectRequest.setTransactionStartTimeStamp(LocalDateTime.now());
|
||||
KieContainerInstance kci = kieServiceCommon.getRegistry().getContainer(id);
|
||||
chtijbugObjectRequest.setArtifactID(kci.getKieContainer().getReleaseId().getArtifactId());
|
||||
|
|
|
|||
|
|
@ -4,15 +4,19 @@ import org.springframework.data.annotation.Id;
|
|||
import org.springframework.data.mongodb.core.index.Indexed;
|
||||
import org.springframework.data.mongodb.core.mapping.Document;
|
||||
|
||||
import java.security.PrivateKey;
|
||||
|
||||
@Document
|
||||
public class ContainerPojoPersist {
|
||||
|
||||
@Id
|
||||
private String id;
|
||||
|
||||
private boolean disableRuleLogging;
|
||||
|
||||
@Indexed
|
||||
private String className;
|
||||
|
||||
@Indexed
|
||||
private String containerId;
|
||||
@Indexed
|
||||
|
|
@ -22,14 +26,13 @@ public class ContainerPojoPersist {
|
|||
|
||||
private String projectName;
|
||||
|
||||
|
||||
|
||||
private String groupId;
|
||||
|
||||
private String artifactId;
|
||||
|
||||
private String version;
|
||||
|
||||
private String projectUUID;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
|
|
@ -79,7 +82,21 @@ public class ContainerPojoPersist {
|
|||
this.processID = processID;
|
||||
}
|
||||
|
||||
public String getProjectUUID() {
|
||||
return projectUUID;
|
||||
}
|
||||
|
||||
public void setProjectUUID(String projectUUID) {
|
||||
this.projectUUID = projectUUID;
|
||||
}
|
||||
|
||||
public boolean isDisableRuleLogging() {
|
||||
return disableRuleLogging;
|
||||
}
|
||||
|
||||
public void setDisableRuleLogging(boolean disableRuleLogging) {
|
||||
this.disableRuleLogging = disableRuleLogging;
|
||||
}
|
||||
|
||||
public String getGroupId() {
|
||||
return groupId;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ public class ContainerRuntimePojoPersist {
|
|||
|
||||
private String status;
|
||||
|
||||
private String projectUUID;
|
||||
|
||||
private boolean disableRuleLogging;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
|
|
@ -33,6 +36,21 @@ public class ContainerRuntimePojoPersist {
|
|||
this.id = id;
|
||||
}
|
||||
|
||||
public String getProjectUUID() {
|
||||
return projectUUID;
|
||||
}
|
||||
|
||||
public void setProjectUUID(String projectUUID) {
|
||||
this.projectUUID = projectUUID;
|
||||
}
|
||||
|
||||
public boolean isDisableRuleLogging() {
|
||||
return disableRuleLogging;
|
||||
}
|
||||
|
||||
public void setDisableRuleLogging(boolean disableRuleLogging) {
|
||||
this.disableRuleLogging = disableRuleLogging;
|
||||
}
|
||||
|
||||
public String getContainerId() {
|
||||
return containerId;
|
||||
|
|
|
|||
|
|
@ -16,13 +16,13 @@ import java.util.List;
|
|||
@CompoundIndexes({
|
||||
@CompoundIndex(def = "{'projectName':1, 'branch':1}", name = "projectName_branch_Index")
|
||||
})
|
||||
public class ProjectPersist implements Serializable {
|
||||
public class ProjectPersist implements Serializable {
|
||||
|
||||
public static final String ADEFINIR="A définir";
|
||||
public static final String ADEFINIR = "A définir";
|
||||
|
||||
public static final String DEFINI="Défini";
|
||||
public static final String DEFINI = "Défini";
|
||||
|
||||
public static final String Deployable="Déployable";
|
||||
public static final String Deployable = "Déployable";
|
||||
|
||||
@Indexed
|
||||
private String deploymentName;
|
||||
|
|
@ -51,13 +51,22 @@ public class ProjectPersist implements Serializable {
|
|||
|
||||
private String branch;
|
||||
|
||||
private List<String> serverNames= new ArrayList<>();
|
||||
private List<String> serverNames = new ArrayList<>();
|
||||
|
||||
private String status;
|
||||
|
||||
private List<String> classNameList;
|
||||
|
||||
public ProjectPersist(){}
|
||||
private boolean disableRuleLogging;
|
||||
|
||||
private boolean enableHotDeploy;
|
||||
|
||||
private boolean useJWTToConnect;
|
||||
|
||||
private String jwtAPIToken;
|
||||
|
||||
public ProjectPersist() {
|
||||
}
|
||||
|
||||
public ProjectPersist(String deploymentName, KieProject projectName, String mainClass, String groupID, String artifactID, String processID, String projectVersion, String containerID, List<String> serverNames, String status) {
|
||||
this.deploymentName = deploymentName;
|
||||
|
|
@ -72,6 +81,10 @@ public class ProjectPersist implements Serializable {
|
|||
this.status = status;
|
||||
}
|
||||
|
||||
public String getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
public String getDeploymentName() {
|
||||
return deploymentName;
|
||||
}
|
||||
|
|
@ -180,22 +193,60 @@ public class ProjectPersist implements Serializable {
|
|||
this.serverNames = serverNames;
|
||||
}
|
||||
|
||||
public String getWorkspaceName(){
|
||||
if (this.projectName!= null){
|
||||
public String getWorkspaceName() {
|
||||
if (this.projectName != null) {
|
||||
return projectName.getSpaceName();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public String getKieProjectName(){
|
||||
if (this.projectName!= null){
|
||||
return projectName.getName()+"-"+this.branch;
|
||||
|
||||
public boolean isUseJWTToConnect() {
|
||||
return useJWTToConnect;
|
||||
}
|
||||
|
||||
public void setUseJWTToConnect(boolean useJWTToConnect) {
|
||||
this.useJWTToConnect = useJWTToConnect;
|
||||
}
|
||||
|
||||
public String getKieProjectName() {
|
||||
if (this.projectName != null) {
|
||||
return projectName.getName() + "-" + this.branch;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public ProjectPersist duplicate(){
|
||||
|
||||
public boolean isDisableRuleLogging() {
|
||||
return disableRuleLogging;
|
||||
}
|
||||
|
||||
public void setDisableRuleLogging(boolean disableRuleLogging) {
|
||||
this.disableRuleLogging = disableRuleLogging;
|
||||
}
|
||||
|
||||
public boolean isEnableHotDeploy() {
|
||||
return enableHotDeploy;
|
||||
}
|
||||
|
||||
public void setEnableHotDeploy(boolean enableHotDeploy) {
|
||||
this.enableHotDeploy = enableHotDeploy;
|
||||
}
|
||||
|
||||
public String getJwtAPIToken() {
|
||||
return jwtAPIToken;
|
||||
}
|
||||
|
||||
public void setJwtAPIToken(String jwtAPIToken) {
|
||||
this.jwtAPIToken = jwtAPIToken;
|
||||
}
|
||||
|
||||
public ProjectPersist duplicate() {
|
||||
ArrayList<String> listServerNames = new ArrayList<String>();
|
||||
listServerNames.addAll(serverNames);
|
||||
ProjectPersist duplicate = new ProjectPersist(deploymentName,projectName,mainClass,groupID,artifactID,processID,projectVersion,containerID,listServerNames,status);
|
||||
ProjectPersist duplicate = new ProjectPersist(deploymentName, projectName, mainClass, groupID, artifactID, processID, projectVersion, containerID, listServerNames, status);
|
||||
duplicate.setEnableHotDeploy(enableHotDeploy);
|
||||
duplicate.setJwtAPIToken(jwtAPIToken);
|
||||
duplicate.setDisableRuleLogging(disableRuleLogging);
|
||||
duplicate.setUseJWTToConnect(useJWTToConnect);
|
||||
return duplicate;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ public interface ContainerRepository extends MongoRepository<ContainerPojoPersis
|
|||
|
||||
List<ContainerPojoPersist> findByServerName(String serverName);
|
||||
|
||||
List<ContainerPojoPersist> findByProjectUUID(String projectUUID);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public interface ContainerRuntimeRepository extends MongoRepository<ContainerRun
|
|||
List<ContainerRuntimePojoPersist> findByServerNameAndStatus(String serverName, String status);
|
||||
List<ContainerRuntimePojoPersist> findByServerNameAndStatusAndHostname(String serverName, String status,String hostname);
|
||||
List<ContainerRuntimePojoPersist> findByServerNameAndHostname(String serverName, String hostname);
|
||||
List<ContainerRuntimePojoPersist> findByProjectUUID(String projectUUID);
|
||||
List<ContainerRuntimePojoPersist> findByContainerId(String continuerID);
|
||||
|
||||
ContainerRuntimePojoPersist findByServerNameAndContainerIdAndHostname(String serverName, String containerId,String hostname);
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ public interface ProjectRepository extends MongoRepository<ProjectPersist, Strin
|
|||
public List<ProjectPersist> findByProjectName(KieProject projectName);
|
||||
public ProjectPersist findByProjectNameAndBranch(KieProject projectName,String branch);
|
||||
public ProjectPersist findByDeploymentName(String deploymentName);
|
||||
public ProjectPersist findByUuid(String UUID);
|
||||
public List<ProjectPersist> findByServerNamesIn(List<String> serverNames);
|
||||
public List<ProjectPersist> findByServerNamesInAndDeploymentName(List<String> serverNames,String deploymentName);
|
||||
public List<ProjectPersist> findByKieWorkbench(KieWorkbench kieWorkbench);
|
||||
|
|
|
|||
|
|
@ -72,6 +72,17 @@
|
|||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt</artifactId>
|
||||
<version>0.9.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt</artifactId>
|
||||
<version>0.9.1</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<!-- Spring-Boot and Camel BOM -->
|
||||
<dependencyManagement>
|
||||
|
|
|
|||
|
|
@ -5,12 +5,16 @@ import com.github.mkopylec.charon.configuration.MappingProperties;
|
|||
import com.github.mkopylec.charon.core.http.HttpClientProvider;
|
||||
import com.github.mkopylec.charon.core.mappings.MappingsCorrector;
|
||||
import com.github.mkopylec.charon.core.mappings.MappingsProvider;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import org.chtijbug.drools.common.rest.Constants;
|
||||
import org.chtijbug.drools.reverseproxy.service.JwtService;
|
||||
import org.chtijbug.drools.reverseproxy.service.UpdateService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.web.ServerProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -18,23 +22,40 @@ import java.util.Map;
|
|||
@Component
|
||||
public class CustomMappingsProvider extends MappingsProvider {
|
||||
|
||||
|
||||
@Autowired
|
||||
private UpdateService updateService;
|
||||
|
||||
@Autowired
|
||||
private JwtService jwtService;
|
||||
|
||||
private Map<String,MappingProperties> mappingPropertiesMap = new HashMap<>();
|
||||
|
||||
private Map<String, MappingProperties> mappingJWTPropertiesMap = new HashMap<>();
|
||||
|
||||
public CustomMappingsProvider(ServerProperties server, CharonProperties charon, MappingsCorrector mappingsCorrector, HttpClientProvider httpClientProvider) {
|
||||
super(server, charon, mappingsCorrector,httpClientProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MappingProperties resolveMapping(String originUri, HttpServletRequest request) {
|
||||
|
||||
MappingProperties result = mappingPropertiesMap.get(UpdateService.removeSlach(originUri));
|
||||
if (result!= null){
|
||||
return result;
|
||||
String token = request.getHeader(Constants.AUTHORISATION_HEADER);
|
||||
if (token!= null && token.length()>0){
|
||||
Claims claims = jwtService.decodeJWT(token);
|
||||
String uuid = (String)claims.get("uuid");
|
||||
MappingProperties result = mappingJWTPropertiesMap.get(uuid);
|
||||
if (result != null) {
|
||||
return result;
|
||||
} else {
|
||||
return super.resolveMapping(originUri, request);
|
||||
}
|
||||
}else {
|
||||
return super.resolveMapping(originUri, request);
|
||||
|
||||
MappingProperties result = mappingPropertiesMap.get(UpdateService.removeSlach(originUri));
|
||||
if (result != null) {
|
||||
return result;
|
||||
} else {
|
||||
return super.resolveMapping(originUri, request);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -45,10 +66,17 @@ public class CustomMappingsProvider extends MappingsProvider {
|
|||
|
||||
@Override
|
||||
protected List<MappingProperties> retrieveMappings() {
|
||||
return updateService.retrievePath();
|
||||
List<MappingProperties> paths= new ArrayList<>();
|
||||
paths.addAll(mappingPropertiesMap.values());
|
||||
paths.addAll(mappingJWTPropertiesMap.values());
|
||||
return paths;
|
||||
}
|
||||
|
||||
public void setMappingPropertiesMap(Map<String, MappingProperties> mappingPropertiesMap) {
|
||||
this.mappingPropertiesMap = mappingPropertiesMap;
|
||||
}
|
||||
|
||||
public void setMappingJWTPropertiesMap(Map<String, MappingProperties> mappingJWTPropertiesMap) {
|
||||
this.mappingJWTPropertiesMap = mappingJWTPropertiesMap;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
package org.chtijbug.drools.reverseproxy.service;
|
||||
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.JwtBuilder;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
import org.chtijbug.drools.proxy.persistence.model.ProjectPersist;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import javax.xml.bind.DatatypeConverter;
|
||||
import java.security.Key;
|
||||
import java.util.Date;
|
||||
|
||||
@Service
|
||||
public class JwtService {
|
||||
|
||||
@Value("${secretkey}")
|
||||
public String secretKey;
|
||||
|
||||
public Claims decodeJWT(String jwt) {
|
||||
return Jwts.parser()
|
||||
.setSigningKey(DatatypeConverter.parseBase64Binary(secretKey))
|
||||
.parseClaimsJws(jwt.replace("bearer","")).getBody();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -31,10 +31,10 @@ public class UpdateService {
|
|||
|
||||
private Boolean toUpdate = true;
|
||||
|
||||
private List<MappingProperties> mappings = new ArrayList<>();
|
||||
|
||||
|
||||
private Map<String, MappingProperties> mappingPropertiesMap = new HashMap<>();
|
||||
|
||||
private Map<String, MappingProperties> mappingJWTPropertiesMap = new HashMap<>();
|
||||
@Autowired
|
||||
private CustomMappingsProvider customMappingsProvider;
|
||||
|
||||
|
|
@ -48,42 +48,54 @@ public class UpdateService {
|
|||
containerFactory = "mappingKafkaListenerContainerFactory")
|
||||
public void store(ReverseProxyUpdate update) {
|
||||
boolean found = false;
|
||||
for (MappingProperties mappingProperties : mappingPropertiesMap.values()) {
|
||||
if (UpdateService.removeSlach(mappingProperties.getPath()).equals(UpdateService.removeSlach(update.getPath()))) {
|
||||
MappingProperties mappingProperties = null;
|
||||
if (update.getTokenUUID() != null && update.getTokenUUID().length() > 0) {
|
||||
mappingProperties = mappingJWTPropertiesMap.get(update.getTokenUUID());
|
||||
if (mappingProperties != null) {
|
||||
found = true;
|
||||
}
|
||||
} else {
|
||||
mappingProperties = mappingPropertiesMap.get(UpdateService.removeSlach(update.getPath()));
|
||||
if (mappingProperties != null) {
|
||||
found = true;
|
||||
mappingProperties.getDestinations().clear();
|
||||
logger.info("Updating path {}",update.getPath());
|
||||
for (String destination : update.getServerNames()) {
|
||||
mappingProperties.getDestinations().add(destination);
|
||||
logger.info("for path {} adding server {} ",update.getPath(),destination);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
if (found) {
|
||||
mappingProperties.getDestinations().clear();
|
||||
logger.info("Updating path {}", update.getPath());
|
||||
for (String destination : update.getServerNames()) {
|
||||
mappingProperties.getDestinations().add(destination);
|
||||
logger.info("for path {} adding server {} ", update.getPath(), destination);
|
||||
}
|
||||
} else {
|
||||
MappingProperties newMappingProperties = new MappingProperties();
|
||||
newMappingProperties.setPath(UpdateService.removeSlach(update.getPath()));
|
||||
logger.info("Creating path {}",update.getPath());
|
||||
|
||||
if (update.getTokenUUID() != null && update.getTokenUUID().length() > 0) {
|
||||
mappingJWTPropertiesMap.put(update.getTokenUUID(), newMappingProperties);
|
||||
} else {
|
||||
newMappingProperties.setPath(UpdateService.removeSlach(update.getPath()));
|
||||
logger.info("Creating path {}", update.getPath());
|
||||
mappingPropertiesMap.put(UpdateService.removeSlach(update.getPath()), newMappingProperties);
|
||||
}
|
||||
newMappingProperties.setName(update.getContainerID());
|
||||
|
||||
newMappingProperties.getCustomConfiguration().put("connect", 2000);
|
||||
newMappingProperties.getCustomConfiguration().put("read", 2000);
|
||||
newMappingProperties.setStripPath(true);
|
||||
for (String destination : update.getServerNames()) {
|
||||
newMappingProperties.getDestinations().add(destination);
|
||||
logger.info("for path {} adding server {} ",update.getPath(),destination);
|
||||
logger.info("for path {} adding server {} ", update.getPath(), destination);
|
||||
}
|
||||
mappingPropertiesMap.put(UpdateService.removeSlach(update.getPath()), newMappingProperties);
|
||||
}
|
||||
mappings.clear();
|
||||
mappings.addAll(mappingPropertiesMap.values());
|
||||
|
||||
this.toUpdate = true;
|
||||
}
|
||||
|
||||
public List<MappingProperties> retrievePath() {
|
||||
this.toUpdate = false;
|
||||
return mappings;
|
||||
}
|
||||
|
||||
public static String removeSlach(String target){
|
||||
if (target!= null) {
|
||||
return target.replace("/", "").replace(" ","");
|
||||
|
||||
public static String removeSlach(String target) {
|
||||
if (target != null) {
|
||||
return target.replace("/", "").replace(" ", "");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
@ -125,14 +137,24 @@ public class UpdateService {
|
|||
mappingProperties2.getCustomConfiguration().put("read", 2000);
|
||||
mappingProperties2.setStripPath(true);
|
||||
if (mappingProperties2.getDestinations().size() > 0) {
|
||||
mappingPropertiesMap.put(UpdateService.removeSlach(mappingProperties2.getPath()), mappingProperties2);
|
||||
paths.add(mappingProperties2);
|
||||
logger.info("Startup creating path {}",mappingProperties2.getPath());
|
||||
for (String serverName : mappingProperties2.getDestinations()){
|
||||
logger.info("---------for path {} adding server {} ",mappingProperties2.getPath(),serverName);
|
||||
}
|
||||
logger.info("---------Project " + projectPersist.getContainerID() + " defined on servers - " + mappingProperties2.getDestinations().toString());
|
||||
if (projectPersist.isUseJWTToConnect()) {
|
||||
mappingJWTPropertiesMap.put(projectPersist.getUuid(), mappingProperties2);
|
||||
paths.add(mappingProperties2);
|
||||
logger.info("Startup creating path / and for token uuid {}", projectPersist.getUuid());
|
||||
for (String serverName : mappingProperties2.getDestinations()) {
|
||||
logger.info("---------for uuid {} adding server {} ", projectPersist.getUuid(), serverName);
|
||||
}
|
||||
logger.info("---------Project " + projectPersist.getContainerID() + " defined on servers - " + mappingProperties2.getDestinations().toString());
|
||||
|
||||
} else {
|
||||
mappingPropertiesMap.put(UpdateService.removeSlach(mappingProperties2.getPath()), mappingProperties2);
|
||||
paths.add(mappingProperties2);
|
||||
logger.info("Startup creating path {}", mappingProperties2.getPath());
|
||||
for (String serverName : mappingProperties2.getDestinations()) {
|
||||
logger.info("---------for path {} adding server {} ", mappingProperties2.getPath(), serverName);
|
||||
}
|
||||
logger.info("---------Project " + projectPersist.getContainerID() + " defined on servers - " + mappingProperties2.getDestinations().toString());
|
||||
}
|
||||
} else {
|
||||
logger.error("Project " + projectPersist.getContainerID() + " defined on non existing server");
|
||||
}
|
||||
|
|
@ -141,9 +163,8 @@ public class UpdateService {
|
|||
}
|
||||
|
||||
}
|
||||
mappings.clear();
|
||||
mappings.addAll(paths);
|
||||
this.customMappingsProvider.setMappingPropertiesMap(mappingPropertiesMap);
|
||||
this.customMappingsProvider.setMappingJWTPropertiesMap(mappingJWTPropertiesMap);
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
|
|
|
|||
|
|
@ -11,4 +11,5 @@ pymma.kafka.sslTruststorePassword=${PYMMA_KAFKA_SSL_TRUSTSTORE_PASSWORD:}
|
|||
pymma.kafka.sslKeyPassword=${PYMMA_KAFKA_KEY_PASSWORD:}
|
||||
pymma.kafka.sslKeystorePassword=${PYMMA_KAFKA_SSL_KEYSTORE_PASSWORD:}
|
||||
pymma.kafka.sslKeystoreLocation=${PYMMA_KAFKA_SSL_KEYSTORE_LOCATION:}
|
||||
pymma.kafka.sslKeystoreType=${PYMMA_KAFKA_SSL_KEYSTORE_TYPE:}
|
||||
pymma.kafka.sslKeystoreType=${PYMMA_KAFKA_SSL_KEYSTORE_TYPE:}
|
||||
secretkey=eRaYY7Wo24sDqKSX3IM9ASGmdGPmkTd9jo1QTy4b7P9Ze5_9hKolVX8xNrQDcNRfVEdTZNOuOyqEGhXEbdJI-ZQ19k_o9MI0y3eZN2lp9jow55FfXMiINEdt1XR85VipRLSOkT6kSpzs2x-jbLDiz9iFVzkd81YKxMgPA7VfZeQUm4n-mOmnWMaVX30zGFU4L3oPBctYKkl4dYfqYWqRNfrgPJVi5DGFjywgxx0ASEiJHtV72paI3fDR2XwlSkyhhmY-ICjCRmsJN4fX1pdoL8a18-aQrvyu4j0Os6dVPYIoPvvY0SAZtWYKHfM15g7A3HD4cVREf9cUsprCRK93w
|
||||
|
|
|
|||
Loading…
Add table
editor.link_modal.header
Reference in a new issue