StatusService.java
Home
/
azkaban-web-server /
src /
main /
java /
azkaban /
webapp /
StatusService.java
package azkaban.webapp;
import static azkaban.webapp.servlet.AbstractAzkabanServlet.jarVersion;
import azkaban.db.DatabaseOperator;
import azkaban.executor.Executor;
import azkaban.executor.ExecutorLoader;
import azkaban.executor.ExecutorManagerException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class StatusService {
private static final Logger log = LoggerFactory.getLogger(StatusService.class);
private static final File PACKAGE_JAR = new File(
StatusService.class.getProtectionDomain().getCodeSource().getLocation().getPath());
private final ExecutorLoader executorLoader;
private final DatabaseOperator dbOperator;
@Inject
public StatusService(final ExecutorLoader executorLoader, final DatabaseOperator dbOperator) {
this.executorLoader = executorLoader;
this.dbOperator = dbOperator;
}
private static String getInstallationPath() {
try {
return PACKAGE_JAR.getCanonicalPath();
} catch (final IOException e) {
log.error("Unable to obtain canonical path. Reporting absolute path instead", e);
return PACKAGE_JAR.getAbsolutePath();
}
}
public Status getStatus() {
final String version = jarVersion == null ? "unknown" : jarVersion;
final Runtime runtime = Runtime.getRuntime();
final long usedMemory = runtime.totalMemory() - runtime.freeMemory();
return new Status(version,
getInstallationPath(),
usedMemory,
runtime.maxMemory(),
getDbStatus(),
getActiveExecutors());
}
private Map<Integer, Executor> getActiveExecutors() {
final Map<Integer, Executor> executorMap = new HashMap<>();
try {
final List<Executor> executors = this.executorLoader.fetchActiveExecutors();
for (final Executor executor : executors) {
executorMap.put(executor.getId(), executor);
}
} catch (final ExecutorManagerException e) {
log.error("Fetching executors failed!", e);
}
return executorMap;
}
private boolean getDbStatus() {
try {
return this.dbOperator.query("SELECT 1", rs -> true);
} catch (final SQLException e) {
log.error("DB Error", e);
}
return false;
}
}