package com.datascience.service;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import com.datascience.datastoring.jobs.JobsManager;
import com.datascience.executor.ICommandStatusesContainer;
import org.apache.log4j.Logger;
import org.joda.time.DateTime;
import com.sun.jersey.spi.resource.Singleton;
@Path("/status/")
@Singleton
public class StatusEntry {
@Context ServletContext context;
private DateTime getInitializationTimestamp(){
return (DateTime) context.getAttribute(Constants.DEPLOY_TIME);
}
private ResponseBuilder getResponseBuilder(){
return (ResponseBuilder) context.getAttribute(Constants.RESPONSER);
}
private JobsManager getJobsManager(){
return (JobsManager) context.getAttribute(Constants.JOBS_MANAGER);
}
private ICommandStatusesContainer getCommandStatusesContainer(){
return (ICommandStatusesContainer) context.getAttribute(Constants.COMMAND_STATUSES_CONTAINER);
}
@GET
public Response status(){
if (!InitializationSupport.checkIsInitialized(context))
return InitializationSupport.makeNotInitializedResponse(context);
Map<String, Object> content = new HashMap<String, Object>();
content.put("status", "OK");
content.put("deploy_time", getInitializationTimestamp().toString());
content.put("job_storage", getJobsManager().toString());
content.put("job_storage_status", getJobStorageStatus());
content.put("statuses_container", getCommandStatusesContainer().toString());
content.put("memory", getMemoryStats());
return getResponseBuilder().makeOKResponse(content);
}
protected String getJobStorageStatus() {
try {
getJobsManager().test();
return "OK";
} catch (Exception e) {
Logger.getLogger(this.getClass()).error("JOB STORAGE STATUS FAILED", e);
return "FAIL: " + e.getMessage();
}
}
protected Map<String, Object> getMemoryStats(){
Map<String, Object> memory = new HashMap<String, Object>();
Runtime runtime = Runtime.getRuntime();
memory.put("free", runtime.freeMemory());
memory.put("total", runtime.totalMemory());
memory.put("max", runtime.maxMemory());
memory.put("used", runtime.totalMemory() - runtime.freeMemory());
return memory;
}
}