use of io.automatiko.engine.workflow.process.instance.impl.WorkflowProcessInstanceImpl in project automatiko-engine by automatiko-io.
the class ProcessMetricsEventListener method afterNodeInstanceFailed.
@Override
public void afterNodeInstanceFailed(ProcessNodeInstanceFailedEvent event) {
final WorkflowProcessInstanceImpl processInstance = (WorkflowProcessInstanceImpl) event.getProcessInstance();
// Displays total count of process instances that failed during execution - failure of given node
Counter counter = registry.counter("automatiko.process.errored.count", Arrays.asList(Tag.of("application", application.orElse("")), Tag.of("version", version.orElse("")), Tag.of("processId", processInstance.getProcessId()), Tag.of("processVersion", processInstance.getProcess().getVersion() == null ? "unknown" : processInstance.getProcess().getVersion()), Tag.of("nodeName", event.getNodeInstance().getNodeName())));
counter.increment();
}
use of io.automatiko.engine.workflow.process.instance.impl.WorkflowProcessInstanceImpl in project automatiko-engine by automatiko-io.
the class ProcessMetricsEventListener method afterProcessSignaled.
@Override
public void afterProcessSignaled(ProcessSignaledEvent event) {
final WorkflowProcessInstanceImpl processInstance = (WorkflowProcessInstanceImpl) event.getProcessInstance();
// Displays total count of process instance's signals
Counter counter = registry.counter("automatiko.process.signals.count", Arrays.asList(Tag.of("application", application.orElse("")), Tag.of("version", version.orElse("")), Tag.of("processId", processInstance.getProcessId()), Tag.of("processVersion", processInstance.getProcess().getVersion() == null ? "unknown" : processInstance.getProcess().getVersion()), Tag.of("signal", event.getSignal())));
counter.increment();
}
use of io.automatiko.engine.workflow.process.instance.impl.WorkflowProcessInstanceImpl in project automatiko-engine by automatiko-io.
the class ProcessMetricsEventListener method afterProcessStarted.
@Override
public void afterProcessStarted(ProcessStartedEvent event) {
final WorkflowProcessInstanceImpl processInstance = (WorkflowProcessInstanceImpl) event.getProcessInstance();
// "Total count of started process instances"
Counter counter = registry.counter("automatiko.process.started.count", Arrays.asList(Tag.of("application", application.orElse("")), Tag.of("version", version.orElse("")), Tag.of("processId", processInstance.getProcessId()), Tag.of("processVersion", processInstance.getProcess().getVersion() == null ? "unknown" : processInstance.getProcess().getVersion())));
counter.increment();
}
use of io.automatiko.engine.workflow.process.instance.impl.WorkflowProcessInstanceImpl in project automatiko-engine by automatiko-io.
the class ProcessInstanceMarshaller method exportProcessInstance.
public ExportedProcessInstance<?> exportProcessInstance(ProcessInstance<?> processInstance) {
io.automatiko.engine.api.runtime.process.ProcessInstance pi = ((AbstractProcessInstance<?>) processInstance).internalGetProcessInstance();
if (pi == null) {
return null;
}
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
Map<String, Object> localEnv = new HashMap<String, Object>(env);
localEnv.put("_export_", true);
ProcessMarshallerWriteContext context = new ProcessMarshallerWriteContext(baos, ((io.automatiko.engine.workflow.base.instance.ProcessInstance) pi).getProcessRuntime(), null, localEnv);
context.setProcessInstanceId(pi.getId());
context.setState(pi.getState());
String processType = pi.getProcess().getType();
context.stream.writeUTF(processType);
io.automatiko.engine.workflow.marshalling.impl.ProcessInstanceMarshaller marshaller = ProcessMarshallerRegistry.INSTANCE.getMarshaller(processType);
Object result = marshaller.writeProcessInstance(context, pi);
AutomatikoMessages.Header.Builder _header = AutomatikoMessages.Header.newBuilder();
_header.setVersion(AutomatikoMessages.Version.newBuilder().setVersionMajor(1).setVersionMinor(0).setVersionRevision(0).build());
PersisterHelper.writeStrategiesIndex(context, _header);
String header = JsonFormat.printer().print(_header);
context.close();
// collect all information about timers
Collection<io.automatiko.engine.workflow.process.instance.NodeInstance> nodes = ((WorkflowProcessInstanceImpl) pi).getNodeInstances(true);
StringBuilder timers = new StringBuilder("[");
for (io.automatiko.engine.workflow.process.instance.NodeInstance ni : nodes) {
String timerId = null;
if (ni instanceof TimerNodeInstance) {
timerId = ((TimerNodeInstance) ni).getTimerId();
} else if (ni instanceof StateBasedNodeInstance) {
if (((StateBasedNodeInstance) ni).getTimerInstances() != null) {
((StateBasedNodeInstance) ni).getTimerInstances().forEach(timer -> {
ZonedDateTime scheduledTime = context.processRuntime.getJobsService().getScheduledTime(timer);
timers.append("{\"timerId\":\"").append(timer).append("\",\"scheduledAt\":\"").append(scheduledTime.toString()).append("\",\"nodeInstanceId\":\"").append(ni.getId()).append("\"}");
});
}
}
if (timerId != null) {
ZonedDateTime scheduledTime = context.processRuntime.getJobsService().getScheduledTime(timerId);
timers.append("{\"timerId\":\"").append(timerId).append("\",\"scheduledAt\":\"").append(scheduledTime.toString()).append("\",\"nodeInstanceId\":\"").append(ni.getId()).append("\"}");
}
if (((NodeInstanceImpl) ni).getRetryJobId() != null && !((NodeInstanceImpl) ni).getRetryJobId().isEmpty()) {
ZonedDateTime scheduledTime = context.processRuntime.getJobsService().getScheduledTime(((NodeInstanceImpl) ni).getRetryJobId());
timers.append("{\"timerId\":\"").append(((NodeInstanceImpl) ni).getRetryJobId()).append("\",\"scheduledAt\":\"").append(scheduledTime.toString()).append("\",\"nodeInstanceId\":\"").append(ni.getId()).append("\"}");
}
}
timers.append("]");
return StringExportedProcessInstance.of(header, JsonFormat.printer().print((MessageOrBuilder) result), timers.toString(), null);
} catch (Exception e) {
throw new RuntimeException("Error while marshalling process instance", e);
}
}
use of io.automatiko.engine.workflow.process.instance.impl.WorkflowProcessInstanceImpl in project automatiko-engine by automatiko-io.
the class AbstractProtobufProcessInstanceMarshaller method writeProcessInstance.
// Output methods
public AutomatikoMessages.ProcessInstance writeProcessInstance(MarshallerWriteContext context, ProcessInstance processInstance) throws IOException {
WorkflowProcessInstanceImpl workFlow = (WorkflowProcessInstanceImpl) processInstance;
AutomatikoMessages.ProcessInstance.Builder _instance = AutomatikoMessages.ProcessInstance.newBuilder().setId(workFlow.getId()).setProcessId(workFlow.getProcessId()).setState(workFlow.getState()).setProcessType(workFlow.getProcess().getType()).setSignalCompletion(workFlow.isSignalCompletion()).setSlaCompliance(workFlow.getSlaCompliance()).setStartDate(workFlow.getStartDate().getTime());
if (workFlow.getProcessXml() != null) {
_instance.setProcessXml(workFlow.getProcessXml());
}
if (workFlow.getDescription() != null) {
_instance.setDescription(workFlow.getDescription());
}
if (workFlow.getInitiator() != null) {
_instance.setInitiator(workFlow.getInitiator());
}
_instance.addAllCompletedNodeIds(workFlow.getCompletedNodeIds());
if (workFlow.getCorrelationKey() != null) {
_instance.setCorrelationKey(workFlow.getCorrelationKey());
}
if (workFlow.getSlaDueDate() != null) {
_instance.setSlaDueDate(workFlow.getSlaDueDate().getTime());
}
if (workFlow.getSlaTimerId() != null) {
_instance.setSlaTimerId(workFlow.getSlaTimerId());
}
if (workFlow.getParentProcessInstanceId() != null) {
_instance.setParentProcessInstanceId(workFlow.getParentProcessInstanceId());
}
if (workFlow.getRootProcessInstanceId() != null) {
_instance.setRootProcessInstanceId(workFlow.getRootProcessInstanceId());
}
if (workFlow.getRootProcessId() != null) {
_instance.setRootProcessId(workFlow.getRootProcessId());
}
if (workFlow.getReferenceFromRoot() != null) {
_instance.setReferenceFromRoot(workFlow.getReferenceFromRoot());
}
if (workFlow.getProcess().getVersion() != null) {
_instance.setProcessVersion(workFlow.getProcess().getVersion());
}
List<ExecutionsErrorInfo> errors = workFlow.errors();
if (errors != null) {
for (ExecutionsErrorInfo error : errors) {
_instance.addErrors(AutomatikoMessages.ProcessInstance.Error.newBuilder().setErrorNodeId(error.getFailedNodeId()).setErrorId(error.getErrorId()).setErrorMessage(error.getErrorMessage() == null ? "" : error.getErrorMessage()).setErrorDetails(error.getErrorDetails() == null ? "" : error.getErrorDetails()));
}
}
if (workFlow.getReferenceId() != null) {
_instance.setReferenceId(workFlow.getReferenceId());
}
Map<String, List<String>> children = workFlow.getChildren();
if (children != null) {
for (Entry<String, List<String>> entry : children.entrySet()) {
_instance.addChildren(AutomatikoMessages.ProcessInstance.ProcessInstanchChildren.newBuilder().setProcessId(entry.getKey()).addAllIds(entry.getValue()).build());
}
}
Collection<Tag> tags = workFlow.getTags();
if (tags != null) {
for (Tag tag : tags) {
_instance.addTags(AutomatikoMessages.ProcessInstance.Tag.newBuilder().setId(tag.getId()).setValue(tag.getValue()));
}
}
SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) workFlow.getContextInstance(SwimlaneContext.SWIMLANE_SCOPE);
if (swimlaneContextInstance != null) {
Map<String, String> swimlaneActors = swimlaneContextInstance.getSwimlaneActors();
for (Map.Entry<String, String> entry : swimlaneActors.entrySet()) {
_instance.addSwimlaneContext(AutomatikoMessages.ProcessInstance.SwimlaneContextInstance.newBuilder().setSwimlane(entry.getKey()).setActorId(entry.getValue()).build());
}
}
List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>(workFlow.getNodeInstances());
Collections.sort(nodeInstances, new Comparator<NodeInstance>() {
public int compare(NodeInstance o1, NodeInstance o2) {
return (int) (o1.getId().compareTo(o2.getId()));
}
});
for (NodeInstance nodeInstance : nodeInstances) {
_instance.addNodeInstance(writeNodeInstance(context, nodeInstance));
}
List<ContextInstance> exclusiveGroupInstances = workFlow.getContextInstances(ExclusiveGroup.EXCLUSIVE_GROUP);
if (exclusiveGroupInstances != null) {
for (ContextInstance contextInstance : exclusiveGroupInstances) {
AutomatikoMessages.ProcessInstance.ExclusiveGroupInstance.Builder _exclusive = AutomatikoMessages.ProcessInstance.ExclusiveGroupInstance.newBuilder();
ExclusiveGroupInstance exclusiveGroupInstance = (ExclusiveGroupInstance) contextInstance;
Collection<NodeInstance> groupNodeInstances = exclusiveGroupInstance.getNodeInstances();
for (NodeInstance nodeInstance : groupNodeInstances) {
_exclusive.addGroupNodeInstanceId(nodeInstance.getId());
}
_instance.addExclusiveGroup(_exclusive.build());
}
}
if (!(boolean) context.env.getOrDefault("_ignore_vars_", false)) {
writeVariableScope(context, workFlow, _instance);
}
List<Map.Entry<String, Integer>> iterationlevels = new ArrayList<Map.Entry<String, Integer>>(workFlow.getIterationLevels().entrySet());
Collections.sort(iterationlevels, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getKey().compareTo(o2.getKey());
}
});
for (Map.Entry<String, Integer> level : iterationlevels) {
if (level.getValue() != null) {
_instance.addIterationLevels(AutomatikoMessages.IterationLevel.newBuilder().setId(level.getKey()).setLevel(level.getValue()));
}
}
return _instance.build();
}
Aggregations