blob: 499d4e1937d531a2fded524d1503c97276f0cc26 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.yarn.server.resourcemanager.webapp.dao;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import com.google.gson.Gson;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler;
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerApplicationAttempt;
import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
import static org.apache.hadoop.yarn.util.StringHelper.PATH_JOINER;
@XmlRootElement(name = "appAttempt")
@XmlAccessorType(XmlAccessType.FIELD)
public class AppAttemptInfo {
protected int id;
protected long startTime;
protected long finishedTime;
protected String containerId;
protected String nodeHttpAddress;
protected String nodeId;
protected String logsLink;
protected String blacklistedNodes;
private String nodesBlacklistedBySystem;
protected String appAttemptId;
private String exportPorts;
private RMAppAttemptState appAttemptState;
public AppAttemptInfo() {
}
public AppAttemptInfo(ResourceManager rm, RMAppAttempt attempt,
Boolean hasAccess, String user, String schemePrefix) {
this.startTime = 0;
this.containerId = "";
this.nodeHttpAddress = "";
this.nodeId = "";
this.logsLink = "";
this.blacklistedNodes = "";
this.exportPorts = "";
if (attempt != null) {
this.id = attempt.getAppAttemptId().getAttemptId();
this.startTime = attempt.getStartTime();
this.finishedTime = attempt.getFinishTime();
this.appAttemptState = attempt.getAppAttemptState();
this.appAttemptId = attempt.getAppAttemptId().toString();
Container masterContainer = attempt.getMasterContainer();
if (masterContainer != null && hasAccess) {
this.containerId = masterContainer.getId().toString();
this.nodeHttpAddress = masterContainer.getNodeHttpAddress();
this.nodeId = masterContainer.getNodeId().toString();
Configuration conf = rm.getRMContext().getYarnConfiguration();
String logServerUrl = conf.get(YarnConfiguration.YARN_LOG_SERVER_URL);
if ((this.appAttemptState == RMAppAttemptState.FAILED ||
this.appAttemptState == RMAppAttemptState.FINISHED ||
this.appAttemptState == RMAppAttemptState.KILLED) &&
logServerUrl != null) {
this.logsLink = PATH_JOINER.join(logServerUrl,
masterContainer.getNodeId().toString(),
masterContainer.getId().toString(),
masterContainer.getId().toString(), user);
} else {
this.logsLink = WebAppUtils.getRunningLogURL(schemePrefix
+ masterContainer.getNodeHttpAddress(),
masterContainer.getId().toString(), user);
}
Gson gson = new Gson();
this.exportPorts = gson.toJson(masterContainer.getExposedPorts());
nodesBlacklistedBySystem =
StringUtils.join(attempt.getAMBlacklistManager()
.getBlacklistUpdates().getBlacklistAdditions(), ", ");
if (rm.getResourceScheduler() instanceof AbstractYarnScheduler) {
AbstractYarnScheduler ayScheduler =
(AbstractYarnScheduler) rm.getResourceScheduler();
SchedulerApplicationAttempt sattempt =
ayScheduler.getApplicationAttempt(attempt.getAppAttemptId());
if (sattempt != null) {
blacklistedNodes =
StringUtils.join(sattempt.getBlacklistedNodes(), ", ");
}
}
}
}
}
public int getAttemptId() {
return this.id;
}
public long getStartTime() {
return this.startTime;
}
public long getFinishedTime() {
return this.finishedTime;
}
public String getNodeHttpAddress() {
return this.nodeHttpAddress;
}
public String getLogsLink() {
return this.logsLink;
}
public String getAppAttemptId() {
return this.appAttemptId;
}
public RMAppAttemptState getAppAttemptState() {
return this.appAttemptState;
}
}