
org.moskito.controlagent.endpoints.http.HttpEndpoint Maven / Gradle / Ivy
The newest version!
package org.moskito.controlagent.endpoints.http;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import net.anotheria.moskito.core.config.MoskitoConfiguration;
import net.anotheria.util.StringUtils;
import org.moskito.controlagent.Agent;
import org.moskito.controlagent.data.accumulator.AccumulatorHolder;
import org.moskito.controlagent.data.accumulator.AccumulatorListItem;
import org.moskito.controlagent.data.info.SystemInfo;
import org.moskito.controlagent.data.info.SystemInfoProvider;
import org.moskito.controlagent.data.nowrunning.EntryPoint;
import org.moskito.controlagent.data.status.StatusHolder;
import org.moskito.controlagent.data.threshold.ThresholdDataItem;
import org.moskito.controlagent.endpoints.EndpointUtility;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* Provides data replying to MoSKito Control HTTP-requests.
*
* @author lrosenberg
* @since 15.04.13 20:43
*/
@WebFilter(description = "MoSKito Control Endpoint", filterName = "MoSKitoControlEndpoint",
urlPatterns = {
"/moskito-control-agent/*"
})
public class HttpEndpoint implements Filter {
private static Logger log = LoggerFactory.getLogger(HttpEndpoint.class);
public static final String VERSION = "3.0.1";
enum COMMAND{
/**
* Requests this application info
*/
INFO,
/**
* Requests the status of this component. The status is calculated based on worst threshold.
*/
STATUS,
/**
* Requests the list of the accumulators.
*/
ACCUMULATORS,
/**
* Requests the data for one or multiple accumulators.
*/
ACCUMULATOR,
/**
* Requests the data for thresholds of this component.
*/
THRESHOLDS,
/**
* Prints a help message
*/
HELP,
/**
* Requests moskito config.
*/
CONFIG,
/**
* Requests now running.
*/
NOWRUNNING
};
public static final String MAPPED_NAME = "moskito-control-agent";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String requestURI = request.getRequestURI();
//we ignore the case that request uri could be null
String myPath = requestURI.substring(requestURI.indexOf(MAPPED_NAME) +MAPPED_NAME.length() + 1);
String tokens[] = StringUtils.tokenize(myPath, '/');
COMMAND command = COMMAND.valueOf(tokens[0].toUpperCase());
switch(command){
case STATUS:
status(request, response, tokens);
break;
case ACCUMULATORS:
accumulators(request, response, tokens);
break;
case ACCUMULATOR:
accumulator(request, response, tokens);
break;
case THRESHOLDS:
thresholds(request, response, tokens);
break;
case INFO:
info(request, response, tokens);
break;
case HELP:
help(request, response, tokens);
break;
case CONFIG:
config(request, response, tokens);
break;
case NOWRUNNING:
nowrunning(request, response, tokens);
break;
default:
throw new AssertionError("Unrecognized command "+command+", try HELP");
}
}
@SuppressFBWarnings(
value="UnusedFormalParameter",
justification="We want all methods to have same signature")
private void status(HttpServletRequest servletRequest, HttpServletResponse servletResponse, String parameters[]) throws IOException{
StatusHolder status = Agent.getInstance().getThresholdStatus();
writeReply(servletResponse, status);
}
@SuppressFBWarnings(
value="UnusedFormalParameter",
justification="We want all methods to have same signature")
private void accumulators(HttpServletRequest servletRequest, HttpServletResponse servletResponse, String parameters[]) throws IOException{
List ret = Agent.getInstance().getAvailableAccumulators();
writeReply(servletResponse, ret);
}
@SuppressFBWarnings(
value="UnusedFormalParameter",
justification="We want all methods to have same signature")
private void accumulator(HttpServletRequest servletRequest, HttpServletResponse servletResponse, String parameters[]) throws IOException{
if (parameters.length==1)
throw new IllegalArgumentException("No accumulators specified");
LinkedList names = new LinkedList();
for (int i=1; i accumulators = Agent.getInstance().getAccumulatorsData(names);
writeReply(servletResponse, accumulators);
}
@SuppressFBWarnings(
value="UnusedFormalParameter",
justification="We want all methods to have same signature")
private void thresholds(HttpServletRequest servletRequest, HttpServletResponse servletResponse, String parameters[]) throws IOException {
List thresholds = Agent.getInstance().getThresholds();
writeReply(servletResponse, thresholds);
}
@SuppressFBWarnings(
value="UnusedFormalParameter",
justification="We want all methods to have same signature")
private void info(HttpServletRequest servletRequest, HttpServletResponse servletResponse, String parameters[]) throws IOException {
SystemInfo info = SystemInfoProvider.getInstance().getSystemInfo();
writeReply(servletResponse, info);
}
@SuppressFBWarnings(
value="UnusedFormalParameter",
justification="We want all methods to have same signature")
private void help(HttpServletRequest servletRequest, HttpServletResponse servletResponse, String parameters[]) throws IOException {
StringBuilder reply = new StringBuilder("Available commands: ").append(Arrays.toString(COMMAND.values())).append(", ");
reply.append("my version is at least "+VERSION);
writeReply(servletResponse, reply);
}
@SuppressFBWarnings(
value="UnusedFormalParameter",
justification="We want all methods to have same signature")
private void config(HttpServletRequest servletRequest, HttpServletResponse servletResponse, String[] tokens) throws IOException {
MoskitoConfiguration config = Agent.getInstance().getConfig();
writeReply(servletResponse, config);
}
@SuppressFBWarnings(
value="UnusedFormalParameter",
justification="We want all methods to have same signature")
private void nowrunning(HttpServletRequest servletRequest, HttpServletResponse servletResponse, String[] tokens) throws IOException {
List ep = Agent.getInstance().getNowRunning();
writeReply(servletResponse, ep);
}
void writeReply(HttpServletResponse servletResponse, Object parameter) throws IOException{
servletResponse.setContentType("application/json");
servletResponse.addHeader("moskitocontrol.version", VERSION);
byte[] data = EndpointUtility.object2JSON(parameter);
OutputStream out = servletResponse.getOutputStream();
out.write(data);
out.flush();
out.close();
}
@Override
public void destroy() {
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy