package org.skywalking.apm.collector.worker.httpserver;
import com.google.gson.JsonObject;
import org.skywalking.apm.collector.actor.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
/**
* @author pengys5
*/
public abstract class AbstractGet extends AbstractLocalSyncWorker {
protected AbstractGet(Role role, ClusterWorkerContext clusterContext, LocalWorkerContext selfContext) {
super(role, clusterContext, selfContext);
}
@Override
final public void onWork(Object request, Object response) throws Exception {
Map<String, String[]> parameterMap = (Map<String, String[]>) request;
try {
onSearch(parameterMap, (JsonObject) response);
} catch (Exception e) {
((JsonObject) response).addProperty("isSuccess", false);
((JsonObject) response).addProperty("reason", e.getMessage());
}
}
protected abstract void onSearch(Map<String, String[]> request, JsonObject response) throws Exception;
static class GetWithHttpServlet extends AbstractHttpServlet {
private final LocalSyncWorkerRef ownerWorkerRef;
GetWithHttpServlet(LocalSyncWorkerRef ownerWorkerRef) {
this.ownerWorkerRef = ownerWorkerRef;
}
@Override
final protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
Map<String, String[]> parameterMap = request.getParameterMap();
JsonObject resJson = new JsonObject();
try {
ownerWorkerRef.ask(parameterMap, resJson);
reply(response, resJson, HttpServletResponse.SC_OK);
} catch (Exception e) {
resJson.addProperty("error", e.getMessage());
reply(response, resJson, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
}
}