Merge pull request 'feature/performance-test' (#3) from feature/performance-test into develop
Reviewed-on: bvn13/OpenFeign-NormalizedLogger#3
This commit is contained in:
commit
27b4ad81e1
11
README.md
11
README.md
@ -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.
|
||||
@ -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>
|
||||
```
|
||||
|
||||
|
91
logger-testing/pom.xml
Normal file
91
logger-testing/pom.xml
Normal file
@ -0,0 +1,91 @@
|
||||
<?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>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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\"}");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package me.bvn13.openfeign.logger.normalized;
|
||||
|
||||
|
||||
import feign.RequestLine;
|
||||
|
||||
public interface TestFeignClient {
|
||||
|
||||
@RequestLine("GET /status")
|
||||
ResponseDto getStatus();
|
||||
|
||||
}
|
@ -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
logger/pom.xml
Normal file
35
logger/pom.xml
Normal file
@ -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>
|
@ -6,6 +6,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@ -18,7 +19,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
* <pre>
|
||||
* {@code
|
||||
*
|
||||
* normalized feign request (HERE-IS-CLASS-AND-METHOD): [
|
||||
* Normalized feign request (HERE-ARE-CLASS-AND-METHOD): [
|
||||
*
|
||||
* ] has response [
|
||||
*
|
||||
@ -69,16 +70,16 @@ public class NormalizedFeignLogger extends feign.Logger {
|
||||
|
||||
private void init() {
|
||||
if (isResponse.get() == null) {
|
||||
isResponse.set(new ConcurrentHashMap<>());
|
||||
isResponse.set(new HashMap<>());
|
||||
}
|
||||
if (methodName.get() == null) {
|
||||
methodName.set(new ConcurrentHashMap<>());
|
||||
methodName.set(new HashMap<>());
|
||||
}
|
||||
if (logsRequest.get() == null) {
|
||||
logsRequest.set(new ConcurrentHashMap<>());
|
||||
logsRequest.set(new HashMap<>());
|
||||
}
|
||||
if (logsResponse.get() == null) {
|
||||
logsResponse.set(new ConcurrentHashMap<>());
|
||||
logsResponse.set(new HashMap<>());
|
||||
}
|
||||
}
|
||||
|
73
pom.xml
73
pom.xml
@ -7,9 +7,14 @@
|
||||
|
||||
<groupId>me.bvn13.openfeign.logger</groupId>
|
||||
<artifactId>feign-normalized-logger</artifactId>
|
||||
<version>0.1.5-SNAPSHOT</version>
|
||||
<version>0.2.1-SNAPSHOT</version>
|
||||
|
||||
<packaging>jar</packaging>
|
||||
<modules>
|
||||
<module>logger</module>
|
||||
<module>logger-testing</module>
|
||||
</modules>
|
||||
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>OpenFeign Normalized Logger</name>
|
||||
<description>Normalized Logger for OpenFeign</description>
|
||||
@ -42,8 +47,32 @@
|
||||
<nexus-staging-maven-plugin.version>1.6.13</nexus-staging-maven-plugin.version>
|
||||
<maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
|
||||
<gitflow-maven-plugin.version>1.18.0</gitflow-maven-plugin.version>
|
||||
|
||||
<!-- Testing -->
|
||||
<junit.version>5.9.0</junit.version>
|
||||
<jetty-server.version>11.0.11</jetty-server.version>
|
||||
<jmh.version>1.35</jmh.version>
|
||||
<httpclient.version>4.5.13</httpclient.version>
|
||||
</properties>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<id>bvn13</id>
|
||||
<name>Vyacheslav Boyko</name>
|
||||
<email>dev@bvn13.me</email>
|
||||
<roles>
|
||||
<role>Developer</role>
|
||||
</roles>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<scm>
|
||||
<connection>scm:git:git://github.com/bvn13/OpenFeign-NormalizedLogger.git</connection>
|
||||
<developerConnection>scm:git:ssh://git@github.com:bvn13/OpenFeign-NormalizedLogger.git</developerConnection>
|
||||
<tag>HEAD</tag>
|
||||
<url>https://github.com/bvn13/OpenFeign-NormalizedLogger.git</url>
|
||||
</scm>
|
||||
|
||||
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
@ -53,28 +82,6 @@
|
||||
</repository>
|
||||
</distributionManagement>
|
||||
|
||||
<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>
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>feign-normalized-logger</finalName>
|
||||
|
||||
@ -112,24 +119,6 @@
|
||||
</pluginManagement>
|
||||
</build>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<id>bvn13</id>
|
||||
<name>Vyacheslav Boyko</name>
|
||||
<email>dev@bvn13.me</email>
|
||||
<roles>
|
||||
<role>Developer</role>
|
||||
</roles>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<scm>
|
||||
<connection>scm:git:git://github.com/bvn13/OpenFeign-NormalizedLogger.git</connection>
|
||||
<developerConnection>scm:git:ssh://git@github.com:bvn13/OpenFeign-NormalizedLogger.git</developerConnection>
|
||||
<tag>HEAD</tag>
|
||||
<url>https://github.com/bvn13/OpenFeign-NormalizedLogger.git</url>
|
||||
</scm>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>release</id>
|
||||
|
@ -8,6 +8,8 @@ git push --tags
|
||||
|
||||
git push origin develop
|
||||
|
||||
git checkout master
|
||||
|
||||
read -p "Which version to publish? > " version
|
||||
|
||||
git checkout $version
|
||||
|
Loading…
Reference in New Issue
Block a user