Skip to content

Commit

Permalink
Merge pull request #1 from bvn13/feature/performance-test
Browse files Browse the repository at this point in the history
Benchmarking
  • Loading branch information
bvn13 authored Jan 24, 2023
2 parents cf8af86 + 18c6d9d commit acfae07
Show file tree
Hide file tree
Showing 11 changed files with 384 additions and 48 deletions.
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,15 @@ x-xss-protection: 1; mode=block
]
```

# Performance

```
Benchmark Mode Cnt Score Error Units
NormalizedFeignLoggerBenchmarkTest.testFeignWithoutLogger thrpt 25 16281.625 ± 279.774 ops/s
NormalizedFeignLoggerBenchmarkTest.testNormalizedFeignLogger thrpt 25 6081.675 ± 229.912 ops/s
NormalizedFeignLoggerBenchmarkTest.testSlf4jFeignLogger thrpt 25 16593.059 ± 151.327 ops/s
```

# How to use

In order to use Normalized Logger into the application they must the following.
Expand All @@ -99,7 +108,7 @@ for Maven
<dependency>
<groupId>me.bvn13.openfeign.logger</groupId>
<artifactId>feign-normalized-logger</artifactId>
<version>0.1.4</version>
<version>0.2.1</version>
</dependency>
```

Expand Down
97 changes: 97 additions & 0 deletions logger-testing/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>me.bvn13.openfeign.logger</groupId>
<artifactId>feign-normalized-logger</artifactId>
<version>0.2.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<groupId>me.bvn13.openfeign.logger.test</groupId>
<artifactId>logger-testing</artifactId>

<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>me.bvn13.openfeign.logger</groupId>
<artifactId>feign-normalized-logger</artifactId>
<version>0.2.1-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>${jetty-server.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty-server.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>${jmh.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>${jmh.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>${feign.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-gson</artifactId>
<version>${feign.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-slf4j</artifactId>
<version>${feign.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>me.bvn13.openfeign.logger</groupId>
<artifactId>logger</artifactId>
<version>0.2.1-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package me.bvn13.openfeign.logger.normalized;

import feign.Feign;
import feign.Logger;
import feign.gson.GsonDecoder;
import feign.slf4j.Slf4jLogger;
import org.junit.jupiter.api.Assertions;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.TearDown;
import org.openjdk.jmh.annotations.Warmup;

import static me.bvn13.openfeign.logger.normalized.TestJettyServer.PORT;

public class NormalizedFeignLoggerBenchmarkTest {
@State(Scope.Benchmark)
public static class BenchmarkStateWithoutLogging {
TestJettyServer jettyServer;
TestFeignClient feignClient;

@Setup
public void init() {
jettyServer = new TestJettyServer();
jettyServer.start();
feignClient = Feign.builder()
.decoder(new GsonDecoder())
.target(TestFeignClient.class, "http://localhost:" + PORT);
}

@TearDown
public void tearDown() {
jettyServer.stop();
}
}

@State(Scope.Benchmark)
public static class BenchmarkStateWithSlf4jLogging {
TestJettyServer jettyServer;
TestFeignClient feignClient;

@Setup
public void init() {
jettyServer = new TestJettyServer();
jettyServer.start();
feignClient = Feign.builder()
.logger(new Slf4jLogger())
.logLevel(Logger.Level.FULL)
.decoder(new GsonDecoder())
.target(TestFeignClient.class, "http://localhost:" + PORT);
}

@TearDown
public void tearDown() {
jettyServer.stop();
}
}

@State(Scope.Benchmark)
public static class BenchmarkStateWithNormalizedLogging {
TestJettyServer jettyServer;
TestFeignClient feignClient;

@Setup
public void init() {
jettyServer = new TestJettyServer();
jettyServer.start();
feignClient = Feign.builder()
.logger(new NormalizedFeignLogger())
.logLevel(Logger.Level.FULL)
.decoder(new GsonDecoder())
.target(TestFeignClient.class, "http://localhost:" + PORT);
}

@TearDown
public void tearDown() {
jettyServer.stop();
}
}

@Benchmark
@Warmup(iterations = 3)
public void testFeignLogger(BenchmarkStateWithoutLogging benchmarkState) {
final ResponseDto status = benchmarkState.feignClient.getStatus();
Assertions.assertEquals("ok", status.getStatus());
}

@Benchmark
@Warmup(iterations = 3)
public void testSlf4jFeignLogger(BenchmarkStateWithSlf4jLogging benchmarkState) {
final ResponseDto status = benchmarkState.feignClient.getStatus();
Assertions.assertEquals("ok", status.getStatus());
}

@Benchmark
@Warmup(iterations = 3)
public void testNormalizedFeignLogger(BenchmarkStateWithNormalizedLogging benchmarkState) {
final ResponseDto status = benchmarkState.feignClient.getStatus();
Assertions.assertEquals("ok", status.getStatus());
}

public static void main(String[] args) throws Exception {
org.openjdk.jmh.Main.main(args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package me.bvn13.openfeign.logger.normalized;

public class ResponseDto {

private String status;

public String getStatus() {
return status;
}

public ResponseDto setStatus(String status) {
this.status = status;
return this;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package me.bvn13.openfeign.logger.normalized;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class TestBlockingServlet 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\"}");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package me.bvn13.openfeign.logger.normalized;


import feign.RequestLine;

public interface TestFeignClient {

@RequestLine("GET /status")
ResponseDto getStatus();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package me.bvn13.openfeign.logger.normalized;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.servlet.ServletHandler;

public class TestJettyServer {

public static final int PORT = 8090;
private Server server;

public TestJettyServer() {
server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(PORT);
server.setConnectors(new Connector[] {connector});
}

public void start() {
ServletHandler servletHandler = new ServletHandler();
server.setHandler(servletHandler);
servletHandler.addServletWithMapping(TestBlockingServlet.class, "/status");
new Thread(() -> {
try {
server.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
}).start();
}

public void stop() {
try {
server.stop();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public static void main(String[] args) {
TestJettyServer jettyServer;
jettyServer = new TestJettyServer();
try {
jettyServer.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

}
35 changes: 35 additions & 0 deletions logger/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>me.bvn13.openfeign.logger</groupId>
<artifactId>feign-normalized-logger</artifactId>
<version>0.2.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>logger</artifactId>

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>${feign.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>

</project>
Loading

0 comments on commit acfae07

Please sign in to comment.