/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.execution.internal; import de.rcenvironment.core.component.execution.api.ConsoleRow; import de.rcenvironment.core.component.execution.api.ConsoleRow.Type; import de.rcenvironment.core.component.execution.api.ConsoleRowBuilder; import de.rcenvironment.core.utils.common.StringUtils; /** * Sends console rows for certain events and does some related event handling. * * @author Doreen Seider */ public class ConsoleRowsSender { private final ComponentExecutionRelatedInstances compExeRelatedInstances; private final Object logMessageLock = new Object(); protected ConsoleRowsSender(ComponentExecutionRelatedInstances compExeRelatedInstances) { this.compExeRelatedInstances = compExeRelatedInstances; } protected synchronized void sendLogFileWriteTriggerAsConsoleRow() { String payload = StringUtils.escapeAndConcat(ConsoleRow.WorkflowLifecyleEventType.COMPONENT_LOG_FINISHED.name(), String.valueOf(compExeRelatedInstances.compExeStorageBridge.getComponentExecutionDataManagementId()), String.valueOf(compExeRelatedInstances.compExeRelatedStates.executionCount.get())); synchronized (logMessageLock) { sendConsoleRow(Type.LIFE_CYCLE_EVENT, payload); compExeRelatedInstances.compExeRelatedStates.consoleRowSequenceNumber.set(0); compExeRelatedInstances.compExeRelatedStates.compHasSentConsoleRowLogMessages.set(false); } } protected void sendLogMessageAsConsoleRow(Type consoleRowType, String message, int compRun) { ConsoleRowBuilder consoleRowBuilder = createConsoleRowBuilder(); consoleRowBuilder.setType(consoleRowType).setPayload(message).setComponentRun(compRun); synchronized (logMessageLock) { consoleRowBuilder.setSequenceNumber(compExeRelatedInstances.compExeRelatedStates.consoleRowSequenceNumber.incrementAndGet()); compExeRelatedInstances.batchingConsoleRowsForwarder.onConsoleRow(consoleRowBuilder.build()); compExeRelatedInstances.compExeRelatedStates.compHasSentConsoleRowLogMessages.set(true); } } protected void sendStateAsConsoleRow(ConsoleRow.WorkflowLifecyleEventType type) { ConsoleRowBuilder consoleRowBuilder = createConsoleRowBuilder(); consoleRowBuilder.setPayload(type.name()); compExeRelatedInstances.batchingConsoleRowsForwarder.onConsoleRow(consoleRowBuilder.build()); } protected void sendTimelineEventAsConsoleRow(ConsoleRow.Type consoleRowType, String payload) { payload = StringUtils.escapeAndConcat(payload, String.valueOf(compExeRelatedInstances.compExeStorageBridge .getComponentExecutionDataManagementId())); sendConsoleRow(consoleRowType, payload); } private void sendConsoleRow(Type consoleRowType, String payload) { ConsoleRowBuilder consoleRowBuilder = createConsoleRowBuilder(); consoleRowBuilder.setType(consoleRowType).setPayload(payload); compExeRelatedInstances.batchingConsoleRowsForwarder.onConsoleRow(consoleRowBuilder.build()); } private ConsoleRowBuilder createConsoleRowBuilder() { ConsoleRowBuilder consoleRowBuilder = new ConsoleRowBuilder(compExeRelatedInstances.timestampOffsetToWorkfowNode); consoleRowBuilder.setExecutionIdentifiers(compExeRelatedInstances.compExeCtx.getWorkflowExecutionIdentifier(), compExeRelatedInstances.compExeCtx.getExecutionIdentifier()) .setInstanceNames(compExeRelatedInstances.compExeCtx.getWorkflowInstanceName(), compExeRelatedInstances.compExeCtx.getInstanceName()) .setType(ConsoleRow.Type.LIFE_CYCLE_EVENT); return consoleRowBuilder; } }