diff --git a/agent-testweb/jetty-plugin-testweb/README.md b/agent-testweb/jetty-plugin-testweb/README.md new file mode 100644 index 000000000000..aff94249dcf8 --- /dev/null +++ b/agent-testweb/jetty-plugin-testweb/README.md @@ -0,0 +1,13 @@ + +## Install +``` +$ mvn install +``` + +## Run +``` +$ mvn exec:java -Dexec.mainClass="com.pinpoint.test.plugin.JettyServerStarterMain" +``` +You can then access here: http://localhost:18080/ + +## Stop diff --git a/agent-testweb/jetty-plugin-testweb/pom.xml b/agent-testweb/jetty-plugin-testweb/pom.xml new file mode 100644 index 000000000000..b48930001f80 --- /dev/null +++ b/agent-testweb/jetty-plugin-testweb/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + com.navercorp.pinpoint + pinpoint-agent-testweb + 2.5.0-SNAPSHOT + + + pinpoint-jetty-plugin-testweb + + jar + + + + ${pinpoint.agent.default.jvmargument} + + 9.4.42.v20210604 + + + + + javax.servlet + javax.servlet-api + 3.1.0 + compile + + + org.eclipse.jetty + jetty-server + ${jetty.version} + + + javax.servlet + javax.servlet-api + + + + + org.eclipse.jetty + jetty-servlet + ${jetty.version} + + + + \ No newline at end of file diff --git a/agent-testweb/jetty-plugin-testweb/src/main/java/com/pinpoint/test/plugin/AsyncServlet.java b/agent-testweb/jetty-plugin-testweb/src/main/java/com/pinpoint/test/plugin/AsyncServlet.java new file mode 100644 index 000000000000..5906d1fe5c86 --- /dev/null +++ b/agent-testweb/jetty-plugin-testweb/src/main/java/com/pinpoint/test/plugin/AsyncServlet.java @@ -0,0 +1,42 @@ +package com.pinpoint.test.plugin; + +import javax.servlet.AsyncContext; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.WriteListener; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; + +public class AsyncServlet extends HttpServlet { + private static final String HEAVY_RESOURCE = "This is some heavy resource that will be served in an async way"; + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + ByteBuffer content = ByteBuffer.wrap(HEAVY_RESOURCE.getBytes(StandardCharsets.UTF_8)); + + AsyncContext async = request.startAsync(); + ServletOutputStream out = response.getOutputStream(); + out.setWriteListener(new WriteListener() { + @Override + public void onWritePossible() throws IOException { + while (out.isReady()) { + if (!content.hasRemaining()) { + response.setStatus(200); + async.complete(); + return; + } + out.write(content.get()); + } + } + + @Override + public void onError(Throwable t) { + getServletContext().log("Async Error", t); + async.complete(); + } + }); + } +} diff --git a/agent-testweb/jetty-plugin-testweb/src/main/java/com/pinpoint/test/plugin/BlockingServlet.java b/agent-testweb/jetty-plugin-testweb/src/main/java/com/pinpoint/test/plugin/BlockingServlet.java new file mode 100644 index 000000000000..7c3de7a43c11 --- /dev/null +++ b/agent-testweb/jetty-plugin-testweb/src/main/java/com/pinpoint/test/plugin/BlockingServlet.java @@ -0,0 +1,16 @@ +package com.pinpoint.test.plugin; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class BlockingServlet extends HttpServlet { + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json"); + response.setStatus(HttpServletResponse.SC_OK); + response.getWriter().println("{ \"status\": \"ok\"}"); + } +} diff --git a/agent-testweb/jetty-plugin-testweb/src/main/java/com/pinpoint/test/plugin/JettyServerStarterMain.java b/agent-testweb/jetty-plugin-testweb/src/main/java/com/pinpoint/test/plugin/JettyServerStarterMain.java new file mode 100644 index 000000000000..6aa790f9e289 --- /dev/null +++ b/agent-testweb/jetty-plugin-testweb/src/main/java/com/pinpoint/test/plugin/JettyServerStarterMain.java @@ -0,0 +1,49 @@ +package com.pinpoint.test.plugin; + +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletHandler; +import org.eclipse.jetty.util.thread.QueuedThreadPool; + +public class JettyServerStarterMain { + + private Server server; + + void start() throws Exception { + + int maxThreads = 10; + int minThreads = 3; + int idleTimeout = 30; + + QueuedThreadPool threadPool = new QueuedThreadPool(maxThreads, minThreads, idleTimeout); + + server = new Server(threadPool); + ServerConnector connector = new ServerConnector(server); + connector.setPort(18080); + server.setConnectors(new Connector[]{connector}); + + ServletHandler servletHandler = new ServletHandler(); + server.setHandler(servletHandler); + + servletHandler.addServletWithMapping(BlockingServlet.class, "/status"); + servletHandler.addServletWithMapping(AsyncServlet.class, "/async"); + + server.start(); + } + + void stop() throws Exception { + if (server != null) { + server.stop(); + } + } + + public static void main(String[] args) { + JettyServerStarterMain starter = new JettyServerStarterMain(); + try { + starter.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/agent-testweb/pom.xml b/agent-testweb/pom.xml index dd12ed6b8d25..e52d8bb660fa 100644 --- a/agent-testweb/pom.xml +++ b/agent-testweb/pom.xml @@ -72,6 +72,7 @@ postgresql-plugin-testweb undertow-plugin-testweb redis-lettuce-plugin-testweb + jetty-plugin-testweb