Skip to content

Commit

Permalink
Wrap PrintWriter with BufferedWriter (#540)
Browse files Browse the repository at this point in the history
* Wrap PrintWriter with BufferedWriter
* Microbenchmark for BufferedWriter wrapper

Signed-off-by: Takanori Takase <scm@after-sunrise.com>
Co-authored-by: Takanori Takase <scm@after-sunrise.com>
  • Loading branch information
after-the-sunrise and Takanori Takase committed Mar 14, 2020
1 parent c3dc1f2 commit ac5136b
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Arrays;
Expand Down Expand Up @@ -43,7 +44,7 @@ protected void doGet(final HttpServletRequest req, final HttpServletResponse res
resp.setStatus(HttpServletResponse.SC_OK);
resp.setContentType(TextFormat.CONTENT_TYPE_004);

Writer writer = resp.getWriter();
Writer writer = new BufferedWriter(resp.getWriter());
try {
TextFormat.write004(writer, registry.filteredMetricFamilySamples(parse(req)));
writer.flush();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package io.prometheus.client.exporter;

import io.prometheus.client.Gauge;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.UUID;

public class ExampleBenchmark {

public static void main(String[] args) throws Exception {

Gauge gauge = Gauge.build().name("labels").help("foo").labelNames("bar").register();
for (int i = 0; i < 10000; i++) {
gauge.labels(UUID.randomUUID().toString()).set(Math.random());
}

ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");

Server server = new Server(0);
server.setHandler(context);
server.start();
Thread.sleep(1000);

byte[] bytes = new byte[8192];
URL url = new URL("http", "localhost", server.getConnectors()[0].getLocalPort(), "/metrics");

long start = System.nanoTime();
for (int i = 0; i < 100; i++) {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream in = connection.getInputStream();
try {
while (in.read(bytes) != -1) in.available();
} finally {
in.close();
}
connection.disconnect();
}
System.out.println(String.format("%,3d ns", System.nanoTime() - start));

server.stop();
server.join();

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@
import java.io.StringWriter;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.fail;
import static org.mockito.Matchers.anyChar;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
Expand Down Expand Up @@ -63,8 +62,7 @@ public void testWriterIsClosedOnException() throws IOException, ServletException
HttpServletResponse resp = mock(HttpServletResponse.class);
PrintWriter writer = mock(PrintWriter.class);
when(resp.getWriter()).thenReturn(writer);
doThrow(new RuntimeException()).when(writer).write(anyChar());
doThrow(new RuntimeException()).when(writer).write(anyInt());
doThrow(new RuntimeException()).when(writer).write(any(char[].class), anyInt(), anyInt());
CollectorRegistry registry = new CollectorRegistry();
Gauge a = Gauge.build("a", "a help").register(registry);

Expand Down

0 comments on commit ac5136b

Please sign in to comment.