NodeInstanceLog nil = new NodeInstanceLog(); nil.setProcessInstanceId(randomLong()); nil.setProcessId(randomString()); cal.add(Calendar.SECOND, 1); nil.setDate(cal.getTime()); nil.setType(Math.abs(random.nextInt())); nil.setNodeInstanceId(randomString()); nil.setNodeId(randomString()); nil.setNodeName(randomString()); nil.setNodeType(randomString()); nil.setWorkItemId(randomLong()); nil.setConnection(randomString()); nil.setExternalId(randomString()); switch(i) { case 1: testData[i-1].setDate(testData[i].getDate()); break; case 2: testData[i-1].setNodeId(testData[i].getNodeId()); break; case 3: testData[i-1].setNodeInstanceId(testData[i].getNodeInstanceId()); break; case 4: testData[i-1].setNodeName(testData[i].getNodeName()); break; case 5: testData[i-1].setNodeType(testData[i].getNodeType());
.getProcessInstance(processInstanceId); if (processInstance instanceof WorkflowProcessInstance) { if (sessionPersistence) { List<? extends NodeInstanceLog> logs = logService.findNodeInstances(processInstanceId); // ENTER -> EXIT is correctly ordered if (logs != null) { List<String> activeNodes = new ArrayList<String>(); for (NodeInstanceLog l : logs) { String nodeName = l.getNodeName(); if (l.getType() == NodeInstanceLog.TYPE_ENTER && names.contains(nodeName)) { activeNodes.add(nodeName); if (l.getType() == NodeInstanceLog.TYPE_EXIT && names.contains(nodeName)) { activeNodes.remove(nodeName);
case AbstractAuditLogger.AFTER_NODE_ENTER_EVENT_TYPE: NodeInstanceLog nodeAfterEnterEvent = (NodeInstanceLog) event; if (nodeAfterEnterEvent.getWorkItemId() != null) { List<NodeInstanceLog> result = em.createQuery( "from NodeInstanceLog as log where log.nodeInstanceId = :nodeId and log.type = 0") .setParameter("nodeId", nodeAfterEnterEvent.getNodeInstanceId()).getResultList(); log.setWorkItemId(nodeAfterEnterEvent.getWorkItemId()); List<ProcessInstanceLog> result = em.createQuery( "from ProcessInstanceLog as log where log.processInstanceId = :piId and log.end is null") .setParameter("piId", processCompletedEvent.getProcessInstanceId()).getResultList(); log.setOutcome(processCompletedEvent.getOutcome()); log.setStatus(processCompletedEvent.getStatus()); log.setEnd(processCompletedEvent.getEnd());
logEvent = (NodeInstanceLog) log; } else { logEvent = new NodeInstanceLog( NodeInstanceLog.TYPE_EXIT, pi.getId(), pi.getProcessId(), Long.toString(nodeInstance.getId()), nodeId, nodeInstance.getNodeName()); logEvent.setWorkItemId(((WorkItemNodeInstance) nodeInstance).getWorkItem().getId()); logEvent.setReferenceId(((SubProcessNodeInstance) nodeInstance).getProcessInstanceId()); logEvent.setConnection(connection); logEvent.setExternalId(""+((KieSession) pnle.getKieRuntime()).getIdentifier()); logEvent.setNodeType(nodeType); logEvent.setNodeContainerId(nodeContainerId); logEvent.setDate(pnle.getEventDate()); logEvent.setSlaCompliance(nodeInstance.getSlaCompliance()); logEvent.setSlaDueDate(nodeInstance.getSlaDueDate()); return logEvent;
@Override public AuditEvent buildEvent(ProcessNodeTriggeredEvent pnte, Object log) { NodeInstanceImpl nodeInstance = (NodeInstanceImpl) pnte.getNodeInstance(); NodeInstanceLog logEvent =null; if (log != null) { logEvent = (NodeInstanceLog) log; if (nodeInstance instanceof WorkItemNodeInstance && ((WorkItemNodeInstance) nodeInstance).getWorkItem() != null) { logEvent.setWorkItemId(((WorkItemNodeInstance) nodeInstance).getWorkItem().getId()); } if (nodeInstance instanceof SubProcessNodeInstance) { logEvent.setReferenceId(((SubProcessNodeInstance) nodeInstance).getProcessInstanceId()); } return logEvent; } return null; }
ProcessInstanceLog pLog = new ProcessInstanceLog(23, "process"); pLog.setDuration(2000l); pLog.setEnd(new Date()); pLog.setExternalId("domain"); pLog.setIdentity("id"); NodeInstanceLog nLog = new NodeInstanceLog(0, 23, "process", "nodeInst", "node", "wally"); idField = NodeInstanceLog.class.getDeclaredField("id"); idField.setAccessible(true); dateField.setAccessible(true); dateField.set(nLog, new Date()); nLog.setNodeType("type"); nLog.setWorkItemId(88l); nLog.setConnection("connex"); nLog.setExternalId("domain"); resp.getHistoryLogList().add(new JaxbNodeInstanceLog(nLog));
int nodeSignals = 0; for (NodeInstanceLog niLog : nodeInstancesViolations) { RuntimeManager runtimeManager = RuntimeManagerRegistry.get().getManager(niLog.getExternalId()); if (runtimeManager == null) { logger.debug("No runtime manager found for {}, not able to send SLA violation signal", niLog.getExternalId()); continue; RuntimeEngine engine = runtimeManager.getRuntimeEngine(ProcessInstanceIdContext.get(niLog.getProcessInstanceId())); engine.getKieSession().signalEvent("slaViolation:" + niLog.getNodeInstanceId(), null, niLog.getProcessInstanceId()); nodeSignals++; } catch (Exception e) { logger.warn("Unexpected error when signalig process instance {} about SLA violation {}", niLog.getProcessInstanceId(), e.getMessage(), e); } finally { runtimeManager.disposeRuntimeEngine(engine); int processSignals = 0; for (ProcessInstanceLog piLog : processInstancesViolations) { RuntimeManager runtimeManager = RuntimeManagerRegistry.get().getManager(piLog.getExternalId()); if (runtimeManager == null) { logger.debug("No runtime manager found for {}, not able to send SLA violation signal", piLog.getExternalId()); continue; RuntimeEngine engine = runtimeManager.getRuntimeEngine(ProcessInstanceIdContext.get(piLog.getProcessInstanceId())); engine.getKieSession().signalEvent("slaViolation", null, piLog.getProcessInstanceId()); processSignals++; } catch (Exception e) {
@Test public void nodeInstanceLogTest() throws Exception { Assume.assumeFalse(getType().equals(TestType.YAML)); int type = 0; long processInstanceId = 23; String processId = "org.hospital.doctor.review"; String nodeInstanceId = "1-1"; String nodeId = "1"; String nodeName = "notification"; NodeInstanceLog origLog = new NodeInstanceLog(type, processInstanceId, processId, nodeInstanceId, nodeId, nodeName); origLog.setWorkItemId(78l); origLog.setConnection("link"); origLog.setExternalId("not-internal-num"); origLog.setNodeType("the-sort-of-point"); JaxbNodeInstanceLog xmlLog = new JaxbNodeInstanceLog(origLog); xmlLog.setCommandName("test-cmd"); xmlLog.setIndex(2); JaxbNodeInstanceLog newXmlLog = testRoundTrip(xmlLog); ComparePair.compareOrig(xmlLog, newXmlLog, JaxbNodeInstanceLog.class); NodeInstanceLog newLog = newXmlLog.getResult(); ComparePair.compareOrig(origLog, newLog, NodeInstanceLog.class); }
@Test public void simpleNodeInstanceLogQueryBuilderTest() { int p = 0; Date date = nilTestData[p++].getDate(); NodeInstanceLogQueryBuilder builder = this.nodeInstanceLogQuery().date(date); List<org.kie.api.runtime.manager.audit.NodeInstanceLog> resultList = builder.build().getResultList(); String nodeId = nilTestData[p++].getNodeId(); builder = this.nodeInstanceLogQuery().nodeId(nodeId); resultList = builder.build().getResultList(); String nodeInstId = nilTestData[p++].getNodeInstanceId(); builder = this.nodeInstanceLogQuery().nodeInstanceId(nodeInstId); resultList = builder.build().getResultList(); String name = nilTestData[p++].getNodeName(); builder = this.nodeInstanceLogQuery().nodeName(name); resultList = builder.build().getResultList(); String nodeType = nilTestData[p++].getNodeType(); builder = this.nodeInstanceLogQuery().nodeType(nodeType); resultList = builder.build().getResultList(); String processId = nilTestData[p++].getProcessId(); builder = this.nodeInstanceLogQuery().processId(processId); resultList = builder.build().getResultList(); long processInstanceId = nilTestData[p++].getProcessInstanceId(); builder = this.nodeInstanceLogQuery().processInstanceId(processInstanceId); resultList = builder.build().getResultList();
public int getNumberOfNodeTriggered(long processInstanceId, String node) { int counter = 0; if (sessionPersistence) { List<NodeInstanceLog> logs = logService.findNodeInstances(processInstanceId); if (logs != null) { for (NodeInstanceLog l : logs) { String nodeName = l.getNodeName(); if ((l.getType() == NodeInstanceLog.TYPE_ENTER || l.getType() == NodeInstanceLog.TYPE_EXIT) && node.equals(nodeName)) { counter++; } } } } else { for (LogEvent event : logger.getLogEvents()) { if (event instanceof RuleFlowNodeLogEvent) { String nodeName = ((RuleFlowNodeLogEvent) event).getNodeName(); if (node.equals(nodeName)) { counter++; } } } } return counter; }
private int getSLAComplianceForNodeInstance(long processInstanceId, org.jbpm.workflow.instance.NodeInstance nodeInstance, int logType) { int slaCompliance = -1; if (sessionPersistence) { List<NodeInstanceLog> logs = logService.findNodeInstances(processInstanceId); if (logs != null) { for (NodeInstanceLog log : logs) { if (log.getType() == logType && log.getNodeInstanceId().equals(String.valueOf(nodeInstance.getId()))) { slaCompliance = log.getSlaCompliance(); break; } } } } else { slaCompliance = nodeInstance.getSlaCompliance(); } return slaCompliance; } }
if (nodeInstance.getType() == NodeInstanceLog.TYPE_ENTER) { nodeInstances.put(nodeInstance.getNodeInstanceId(), nodeInstance); } else { nodeInstances.remove(nodeInstance.getNodeInstanceId()); for (NodeInstanceLog nodeInstance: nodeInstances.values()) { boolean found = false; DiagramInfo diagramInfo = getDiagramInfo(processInstance.getProcessId()); if (diagramInfo != null) { for (DiagramNodeInfo nodeInfo: diagramInfo.getNodeList()) { if (nodeInfo.getName().equals("id=" + nodeInstance.getNodeId())) { result.add(new ActiveNodeInfo(diagramInfo.getWidth(), diagramInfo.getHeight(), nodeInfo)); found = true; throw new IllegalArgumentException("Could not find info for diagram for process " + processInstance.getProcessId()); + nodeInstance.getNodeId() + " of process " + processInstance.getProcessId());
private void assertLogContent(NodeInstanceLog log, long nodeInstanceId, String processId, Integer type, String nodeType, String nodeName){ assertEquals(nodeInstanceId,log.getProcessInstanceId().longValue()); assertEquals(processId,log.getProcessId()); assertEquals(type,log.getType()); assertEquals(nodeType, log.getNodeType()); assertEquals(nodeName,log.getNodeName()); } }
@Override public AuditEvent buildEvent(ProcessNodeTriggeredEvent pnte) { NodeInstanceLog nodeInstanceLog = (NodeInstanceLog) super.buildEvent(pnte); nodeInstanceLog.setExternalId(ownerId); return nodeInstanceLog; }
private void addNodeEnterLog(long processInstanceId, String processId, String nodeInstanceId, String nodeId, String nodeName) { NodeInstanceLog log = new NodeInstanceLog( NodeInstanceLog.TYPE_ENTER, processInstanceId, processId, nodeInstanceId, nodeId, nodeName); persist(log); }
protected List<String> getCompletedNodes(long processInstanceId) { List<String> names = new ArrayList<String>(); if (sessionPersistence) { AuditLogService auditLogService = new JPAAuditLogService(emf); List<NodeInstanceLog> logs = auditLogService.findNodeInstances(processInstanceId); if (logs != null) { for (NodeInstanceLog l : logs) { names.add(l.getNodeId()); } } } else { for (LogEvent event : logger.getLogEvents()) { if (event instanceof RuleFlowNodeLogEvent) { if( event.getType() == 27 ) { names.add(((RuleFlowNodeLogEvent) event).getNodeId()); } } } } return names; }
org.jbpm.process.audit.ProcessInstanceLog pLog = new org.jbpm.process.audit.ProcessInstanceLog(23, "process"); pLog.setDuration(2000l); pLog.setEnd(new Date()); pLog.setExternalId("domain"); pLog.setIdentity("id"); org.jbpm.process.audit.NodeInstanceLog nLog = new org.jbpm.process.audit.NodeInstanceLog( 0, 23, "process", "nodeInst", "node", "wally"); dateField.setAccessible(true); dateField.set(nLog, new Date()); nLog.setNodeType("type"); nLog.setWorkItemId(88l); nLog.setConnection("connex"); nLog.setExternalId("domain"); resp.getHistoryLogList().add(new JaxbNodeInstanceLog(nLog));
nodeType = (String)nodeInstance.getMetaData("NodeType"); NodeInstanceLog log = new NodeInstanceLog( NodeInstanceLog.TYPE_ENTER, pi.getId(), pi.getProcessId(), Long.toString(nodeInstance.getId()), nodeId, nodeInstance.getNodeName()); if (nodeInstance instanceof WorkItemNodeInstance && ((WorkItemNodeInstance) nodeInstance).getWorkItem() != null) { log.setWorkItemId(((WorkItemNodeInstance) nodeInstance).getWorkItem().getId()); log.setReferenceId(((SubProcessNodeInstance) nodeInstance).getProcessInstanceId()); log.setConnection(connection); log.setExternalId(""+((KieSession) pnte.getKieRuntime()).getIdentifier()); log.setNodeType(nodeType); log.setNodeContainerId(nodeContainerId); log.setDate(pnte.getEventDate()); log.setSlaCompliance(nodeInstance.getSlaCompliance()); log.setSlaDueDate(nodeInstance.getSlaDueDate()); return log;
@Test public void nodeInstanceLogTest() throws Exception { Assume.assumeFalse(getType().equals(TestType.YAML)); int type = 0; long processInstanceId = 23; String processId = "org.hospital.doctor.review"; String nodeInstanceId = "1-1"; String nodeId = "1"; String nodeName = "notification"; org.jbpm.process.audit.NodeInstanceLog origLog = new org.jbpm.process.audit.NodeInstanceLog( type, processInstanceId, processId, nodeInstanceId, nodeId, nodeName); origLog.setWorkItemId(78l); origLog.setConnection("link"); origLog.setExternalId("not-internal-num"); origLog.setNodeType("the-sort-of-point"); JaxbNodeInstanceLog xmlLog = new JaxbNodeInstanceLog(origLog); xmlLog.setCommandName("test-cmd"); xmlLog.setIndex(2); xmlLog.setId(2l); JaxbNodeInstanceLog newXmlLog = testRoundTrip(xmlLog); ComparePair.compareOrig(xmlLog, newXmlLog, JaxbNodeInstanceLog.class); NodeInstanceLog newLog = newXmlLog.getResult(); ComparePair.compareOrig(origLog, newLog, NodeInstanceLog.class); }
@Test public void simpleNodeInstanceLogQueryBuilderTest() { int p = 0; Date date = nilTestData[p++].getDate(); NodeInstanceLogQueryBuilder builder = this.nodeInstanceLogQuery().date(date); List<org.kie.api.runtime.manager.audit.NodeInstanceLog> resultList = builder.build().getResultList(); String nodeId = nilTestData[p++].getNodeId(); builder = this.nodeInstanceLogQuery().nodeId(nodeId); resultList = builder.build().getResultList(); String nodeInstId = nilTestData[p++].getNodeInstanceId(); builder = this.nodeInstanceLogQuery().nodeInstanceId(nodeInstId); resultList = builder.build().getResultList(); String name = nilTestData[p++].getNodeName(); builder = this.nodeInstanceLogQuery().nodeName(name); resultList = builder.build().getResultList(); String nodeType = nilTestData[p++].getNodeType(); builder = this.nodeInstanceLogQuery().nodeType(nodeType); resultList = builder.build().getResultList(); String processId = nilTestData[p++].getProcessId(); builder = this.nodeInstanceLogQuery().processId(processId); resultList = builder.build().getResultList(); long processInstanceId = nilTestData[p++].getProcessInstanceId(); builder = this.nodeInstanceLogQuery().processInstanceId(processInstanceId); resultList = builder.build().getResultList();