/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hadoop.hive.llap.daemon; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HistoryLogger { private static final String HISTORY_EVENT_TYPE = "Event"; private static final String HISTORY_APPLICATION_ID = "ApplicationId"; private static final String HISTORY_CONTAINER_ID = "ContainerId"; private static final String HISTORY_SUBMIT_TIME = "SubmitTime"; private static final String HISTORY_START_TIME = "StartTime"; private static final String HISTORY_END_TIME = "EndTime"; private static final String HISTORY_QUERY_ID = "QueryId"; private static final String HISTORY_DAG_ID = "DagId"; private static final String HISTORY_VERTEX_NAME = "VertexName"; private static final String HISTORY_TASK_ID = "TaskId"; private static final String HISTORY_ATTEMPT_ID = "TaskAttemptId"; private static final String HISTORY_THREAD_NAME = "ThreadName"; private static final String HISTORY_HOSTNAME = "HostName"; private static final String HISTORY_SUCCEEDED = "Succeeded"; private static final String EVENT_TYPE_FRAGMENT_START = "FRAGMENT_START"; private static final String EVENT_TYPE_FRAGMENT_END = "FRAGMENT_END"; private static final Logger HISTORY_LOGGER = LoggerFactory.getLogger(HistoryLogger.class); public static void logFragmentStart(String applicationIdStr, String containerIdStr, String hostname, String queryId, int dagIdentifier, String vertexName, int taskId, int attemptId) { HISTORY_LOGGER.info( constructFragmentStartString(applicationIdStr, containerIdStr, hostname, queryId, dagIdentifier, vertexName, taskId, attemptId)); } public static void logFragmentEnd(String applicationIdStr, String containerIdStr, String hostname, String queryId, int dagIdentifier, String vertexName, int taskId, int attemptId, String threadName, long startTime, boolean failed) { HISTORY_LOGGER.info(constructFragmentEndString(applicationIdStr, containerIdStr, hostname, queryId, dagIdentifier, vertexName, taskId, attemptId, threadName, startTime, failed)); } private static String constructFragmentStartString(String applicationIdStr, String containerIdStr, String hostname, String queryId, int dagIdentifier, String vertexName, int taskId, int attemptId) { HistoryLineBuilder lb = new HistoryLineBuilder(EVENT_TYPE_FRAGMENT_START); lb.addHostName(hostname); lb.addAppid(applicationIdStr); lb.addContainerId(containerIdStr); lb.addQueryId(queryId); lb.addDagId(dagIdentifier); lb.addVertexName(vertexName); lb.addTaskId(taskId); lb.addTaskAttemptId(attemptId); lb.addTime(HISTORY_SUBMIT_TIME); return lb.toString(); } private static String constructFragmentEndString(String applicationIdStr, String containerIdStr, String hostname, String queryId, int dagIdentifier, String vertexName, int taskId, int attemptId, String threadName, long startTime, boolean succeeded) { HistoryLineBuilder lb = new HistoryLineBuilder(EVENT_TYPE_FRAGMENT_END); lb.addHostName(hostname); lb.addAppid(applicationIdStr); lb.addContainerId(containerIdStr); lb.addQueryId(queryId); lb.addDagId(dagIdentifier); lb.addVertexName(vertexName); lb.addTaskId(taskId); lb.addTaskAttemptId(attemptId); lb.addThreadName(threadName); lb.addSuccessStatus(succeeded); lb.addTime(HISTORY_START_TIME, startTime); lb.addTime(HISTORY_END_TIME); return lb.toString(); } private static class HistoryLineBuilder { private final StringBuilder sb = new StringBuilder(); HistoryLineBuilder(String eventType) { sb.append(HISTORY_EVENT_TYPE).append("=").append(eventType); } HistoryLineBuilder addHostName(String hostname) { return setKeyValue(HISTORY_HOSTNAME, hostname); } HistoryLineBuilder addAppid(String appId) { return setKeyValue(HISTORY_APPLICATION_ID, appId); } HistoryLineBuilder addContainerId(String containerId) { return setKeyValue(HISTORY_CONTAINER_ID, containerId); } HistoryLineBuilder addQueryId(String queryId) { return setKeyValue(HISTORY_QUERY_ID, queryId); } HistoryLineBuilder addDagId(int dagId) { return setKeyValue(HISTORY_DAG_ID, String.valueOf(dagId)); } HistoryLineBuilder addVertexName(String vertexName) { return setKeyValue(HISTORY_VERTEX_NAME, vertexName); } HistoryLineBuilder addTaskId(int taskId) { return setKeyValue(HISTORY_TASK_ID, String.valueOf(taskId)); } HistoryLineBuilder addTaskAttemptId(int attemptId) { return setKeyValue(HISTORY_ATTEMPT_ID, String.valueOf(attemptId)); } HistoryLineBuilder addThreadName(String threadName) { return setKeyValue(HISTORY_THREAD_NAME, threadName); } HistoryLineBuilder addTime(String timeParam, long millis) { return setKeyValue(timeParam, String.valueOf(millis)); } HistoryLineBuilder addTime(String timeParam) { return setKeyValue(timeParam, String.valueOf(System.currentTimeMillis())); } HistoryLineBuilder addSuccessStatus(boolean status) { return setKeyValue(HISTORY_SUCCEEDED, String.valueOf(status)); } private HistoryLineBuilder setKeyValue(String key, String value) { sb.append(", ").append(key).append("=").append(value); return this; } @Override public String toString() { return sb.toString(); } } }