package org.fastcatsearch.job.management;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.fastcatsearch.common.io.Streamable;
import org.fastcatsearch.exception.FastcatSearchException;
import org.fastcatsearch.ir.io.DataInput;
import org.fastcatsearch.ir.io.DataOutput;
import org.fastcatsearch.job.Job;
import org.fastcatsearch.job.result.BasicStringResult;
import org.fastcatsearch.service.AbstractService;
import org.fastcatsearch.service.ServiceManager;
import org.json.JSONStringer;
public class GetModuleStateJob extends Job implements Streamable {
private static final long serialVersionUID = -5814628836593851820L;
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public JobResult doRun() throws FastcatSearchException {
try {
ServiceManager serviceManager = ServiceManager.getInstance();
AbstractService service = null;
Set<String> serviceNames = new TreeSet<String>();
Map<String,String> serviceNameMap = new HashMap<String, String>();
Map<String,Boolean> serviceStateMap = new HashMap<String, Boolean>();
for(Class serviceClass : serviceManager.getServiceClasses()) {
String[] fqdn = serviceClass.getName().split("[.]");
String serviceName = fqdn[fqdn.length-1];
serviceNames.add(serviceName);
service = serviceManager.getService(serviceClass);
serviceNameMap.put(serviceName, serviceClass.getName());
serviceStateMap.put(serviceName, service.isRunning());
}
JSONStringer stringer = new JSONStringer();
stringer.object().key("moduleState").array();
for(String serviceName : serviceNames) {
stringer.object()
.key("serviceName").value(serviceName)
.key("serviceClass").value(serviceNameMap.get(serviceName))
.key("status").value(serviceStateMap.get(serviceName))
.endObject();
}
stringer.endArray().endObject();
BasicStringResult result = new BasicStringResult();
result.setResult(stringer.toString());
return new JobResult(result);
} catch (Exception e) {
logger.error("", e);
}
return new JobResult(null);
}
@Override
public void readFrom(DataInput input) throws IOException { }
@Override
public void writeTo(DataOutput output) throws IOException { }
}