Skip to content

Commit c0eef86

Browse files
author
Michael Mantos
committed
JAVA-56 - Add logging to transport and httpclient and update dependencies
1 parent 26f0502 commit c0eef86

7 files changed

Lines changed: 127 additions & 16 deletions

File tree

pom.xml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,16 @@
4747
<properties>
4848
<java.version>1.8</java.version>
4949
<slf4j-api.version>1.7.28</slf4j-api.version>
50-
<jackson.version>2.9.9</jackson.version>
51-
<jackson-databind.version>2.9.10.5</jackson-databind.version>
52-
<httpclient.version>4.5.9</httpclient.version>
50+
<jackson.version>2.12.7</jackson.version>
51+
<jackson-databind.version>2.12.6.1</jackson-databind.version>
52+
<httpclient.version>4.5.13</httpclient.version>
5353
<junixsocket.version>2.2.0</junixsocket.version>
5454
<failsafe.version>2.3.0</failsafe.version>
55-
<protobuf.version>3.9.1</protobuf.version>
55+
<protobuf.version>3.16.3</protobuf.version>
5656
<lombok.version>1.18.8</lombok.version>
57-
<junit.version>4.11</junit.version>
58-
<mockito.version>1.9.5</mockito.version>
59-
<powermock.version>1.5.6</powermock.version>
57+
<junit.version>4.13.1</junit.version>
58+
<mockito.version>2.8.9</mockito.version>
59+
<powermock.version>1.7.4</powermock.version>
6060
</properties>
6161

6262
<dependencies>
@@ -167,7 +167,7 @@
167167

168168
<dependency>
169169
<groupId>org.powermock</groupId>
170-
<artifactId>powermock-api-mockito</artifactId>
170+
<artifactId>powermock-api-mockito2</artifactId>
171171
<version>${powermock.version}</version>
172172
<scope>test</scope>
173173
</dependency>

src/main/java/com/stackify/api/common/http/HttpClient.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@
1515
*/
1616
package com.stackify.api.common.http;
1717

18+
import com.fasterxml.jackson.databind.ObjectMapper;
1819
import com.stackify.api.common.ApiConfiguration;
1920
import com.stackify.api.common.util.CharStreams;
2021
import com.stackify.api.common.util.Preconditions;
2122

23+
import org.slf4j.Logger;
24+
import org.slf4j.LoggerFactory;
25+
2226
import java.io.BufferedInputStream;
2327
import java.io.BufferedOutputStream;
2428
import java.io.IOException;
@@ -56,6 +60,8 @@ public class HttpClient {
5660
*/
5761
private final Proxy proxy;
5862

63+
private static final Logger LOGGER = LoggerFactory.getLogger(HttpClient.class);
64+
5965
/**
6066
* Constructor
6167
* @param apiConfig API configuration
@@ -107,6 +113,15 @@ public String post(final String path, final byte[] jsonBytes, final boolean gzip
107113
URL url = new URL(apiConfig.getApiUrl() + path);
108114

109115
// request properties
116+
if (LOGGER.isDebugEnabled()) {
117+
LOGGER.debug(
118+
"#HttpClient #Post Sending request to {}/{} - Body: {}",
119+
apiConfig.getApiUrl(),
120+
path,
121+
(new ObjectMapper())
122+
.writeValueAsString(jsonBytes)
123+
);
124+
}
110125

111126
connection = (HttpURLConnection) url.openConnection(proxy);
112127
connection.setDoInput(true);

src/main/java/com/stackify/api/common/log/LogAppender.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
import com.stackify.api.common.error.ErrorGovernor;
2424
import com.stackify.api.common.mask.Masker;
2525
import com.stackify.api.common.util.Preconditions;
26+
27+
import org.slf4j.Logger;
28+
import org.slf4j.LoggerFactory;
29+
2630
import lombok.NonNull;
2731

2832
import java.io.Closeable;
@@ -35,6 +39,11 @@
3539
*/
3640
public class LogAppender<T> implements Closeable {
3741

42+
/**
43+
* The appender logger
44+
*/
45+
private static final Logger LOGGER = LoggerFactory.getLogger(LogAppender.class);
46+
3847
/**
3948
* Internal package prefix
4049
*/
@@ -203,6 +212,10 @@ public void append(final T event) {
203212

204213
LogMsg logMsg = eventAdapter.getLogMsg(event, error);
205214

215+
if (LOGGER.isDebugEnabled()) {
216+
LOGGER.info("#Log #Appender #Template Logging mesage: {}", event);
217+
}
218+
206219
collector.addLogMsg(logMsg);
207220
}
208221
}

src/main/java/com/stackify/api/common/log/LogTransportAgentSocket.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package com.stackify.api.common.log;
1717

18+
import com.fasterxml.jackson.databind.ObjectMapper;
1819
import com.stackify.api.LogMsgGroup;
1920
import com.stackify.api.common.ApiConfiguration;
2021
import com.stackify.api.common.mask.Masker;
@@ -25,6 +26,8 @@
2526
import lombok.extern.slf4j.Slf4j;
2627
import org.apache.http.client.methods.HttpPost;
2728
import org.apache.http.entity.ByteArrayEntity;
29+
import org.slf4j.Logger;
30+
import org.slf4j.LoggerFactory;
2831

2932
/**
3033
* Log Transport - Agent Socket
@@ -46,6 +49,11 @@ public class LogTransportAgentSocket implements LogTransport {
4649

4750
private final HttpSocketClient httpSocketClient;
4851

52+
/**
53+
* The transport logger
54+
*/
55+
private static final Logger LOGGER = LoggerFactory.getLogger(LogTransportAgentSocket.class);
56+
4957
public LogTransportAgentSocket(@NonNull final ApiConfiguration apiConfig,
5058
Masker masker,
5159
boolean skipJson) {
@@ -73,6 +81,16 @@ public void send(@NonNull final LogMsgGroup group) throws Exception {
7381
HttpPost httpPost = new HttpPost(URI_PREFIX + "/log");
7482
httpPost.setHeader("Content-Type", "application/x-protobuf");
7583
httpPost.setEntity(new ByteArrayEntity(logGroup.toByteArray()));
84+
85+
if (LOGGER.isDebugEnabled()) {
86+
LOGGER.debug(
87+
"#Log #Transport #Socket Sending request to {} - Body: {}",
88+
httpPost.getURI(),
89+
(new ObjectMapper())
90+
.writeValueAsString(group)
91+
);
92+
}
93+
7694
httpSocketClient.send(httpPost);
7795
} catch (Throwable e) {
7896
log.info("Queueing logs for retransmission due to Exception");

src/main/java/com/stackify/api/common/log/LogTransportDirect.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
import com.stackify.api.common.ApiConfiguration;
2121
import com.stackify.api.common.http.HttpClient;
2222
import com.stackify.api.common.mask.Masker;
23+
24+
import org.slf4j.Logger;
25+
import org.slf4j.LoggerFactory;
26+
2327
import lombok.NonNull;
2428
import lombok.extern.slf4j.Slf4j;
2529

@@ -49,6 +53,8 @@ public class LogTransportDirect implements LogTransport {
4953

5054
private final LogTransportPreProcessor logTransportPreProcessor;
5155

56+
private static final Logger LOGGER = LoggerFactory.getLogger(LogTransportAgentSocket.class);
57+
5258
/**
5359
* Default constructor
5460
*
@@ -84,6 +90,14 @@ public void send(@NonNull final LogMsgGroup group) throws Exception {
8490
// post to stackify
8591

8692
try {
93+
if (LOGGER.isDebugEnabled()) {
94+
LOGGER.debug(
95+
"#Log #Transport #Direct Sending request to {} - Body: {}",
96+
LOG_SAVE_PATH,
97+
objectMapper
98+
.writeValueAsString(group)
99+
);
100+
}
87101
httpClient.post(LOG_SAVE_PATH, jsonBytes, true);
88102
} catch (Exception e) {
89103
log.info("Queueing logs for retransmission due to Exception");

src/test/java/com/stackify/api/common/log/LogAppenderTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,13 @@ public void testClose() throws Exception {
9090
public void testAppend() throws Exception {
9191
String event = "log event";
9292
Throwable t = new NullPointerException();
93-
93+
StackifyError error = Mockito.mock(StackifyError.class);
94+
LogMsg logMsg = Mockito.mock(LogMsg.class);
95+
9496
EventAdapter<String> adapter = Mockito.mock(EventAdapter.class);
9597
Mockito.when(adapter.getThrowable(event)).thenReturn(t);
96-
Mockito.when(adapter.getStackifyError(event, t)).thenReturn(Mockito.mock(StackifyError.class));
98+
Mockito.when(adapter.getStackifyError(event, t)).thenReturn(error);
99+
Mockito.when(adapter.getLogMsg(event, error)).thenReturn(logMsg);
97100

98101
ErrorGovernor governor = Mockito.mock(ErrorGovernor.class);
99102
Mockito.when(governor.errorShouldBeSent(Mockito.any(StackifyError.class))).thenReturn(true);
@@ -117,7 +120,7 @@ public void testAppend() throws Exception {
117120

118121
appender.close();
119122

120-
Mockito.verify(collector).addLogMsg(Mockito.any(LogMsg.class));
123+
Mockito.verify(collector).addLogMsg(logMsg);
121124
}
122125

123126
/**

src/test/java/com/stackify/api/common/log/LogSenderTest.java

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,18 @@
1515
*/
1616
package com.stackify.api.common.log;
1717

18+
import java.util.ArrayList;
19+
import java.util.List;
20+
1821
import com.fasterxml.jackson.databind.ObjectMapper;
19-
import com.fasterxml.jackson.databind.ObjectWriter;
22+
import com.stackify.api.LogMsg;
2023
import com.stackify.api.LogMsgGroup;
2124
import com.stackify.api.common.ApiConfiguration;
2225
import com.stackify.api.common.http.HttpClient;
2326
import com.stackify.api.common.mask.Masker;
27+
import com.stackify.api.common.socket.HttpSocketClient;
28+
29+
import org.apache.http.client.methods.HttpPost;
2430
import org.junit.Test;
2531
import org.junit.runner.RunWith;
2632
import org.mockito.Mockito;
@@ -33,7 +39,7 @@
3339
* @author Eric Martin
3440
*/
3541
@RunWith(PowerMockRunner.class)
36-
@PrepareForTest({LogTransportDirect.class, HttpClient.class})
42+
@PrepareForTest({LogTransportDirect.class, LogTransportAgentSocket.class, HttpClient.class})
3743
public class LogSenderTest {
3844

3945
/**
@@ -42,9 +48,21 @@ public class LogSenderTest {
4248
*/
4349
@Test
4450
public void testSend() throws Exception {
45-
ObjectMapper objectMapper = Mockito.mock(ObjectMapper.class);
51+
ObjectMapper objectMapper = new ObjectMapper();
4652
Masker masker = Mockito.mock(Masker.class);
47-
Mockito.when(objectMapper.writer()).thenReturn(Mockito.mock(ObjectWriter.class));
53+
LogMsgGroup logMsgGroup = new LogMsgGroup();
54+
LogMsg logMsg = new LogMsg();
55+
logMsg.setMsg("test message");
56+
57+
List<LogMsg> logMsgList = new ArrayList<LogMsg>();
58+
logMsgList.add(logMsg);
59+
60+
logMsgGroup.setAppName("AppName Test");
61+
logMsgGroup.setMsgs(
62+
logMsgList
63+
);
64+
65+
// Mockito.when(objectMapper.writer()).thenReturn(Mockito.mock(ObjectWriter.class));
4866

4967
ApiConfiguration apiConfig = ApiConfiguration.newBuilder().apiUrl("url").apiKey("key").build();
5068

@@ -54,6 +72,36 @@ public void testSend() throws Exception {
5472
PowerMockito.whenNew(HttpClient.class).withAnyArguments().thenReturn(httpClient);
5573
PowerMockito.when(httpClient.post(Mockito.anyString(), (byte[]) Mockito.any())).thenReturn("");
5674

57-
sender.send(Mockito.mock(LogMsgGroup.class));
75+
sender.send(logMsgGroup);
76+
}
77+
78+
/**
79+
* testSend
80+
* @throws Exception
81+
*/
82+
@Test
83+
public void testSendSocket() throws Exception {
84+
ObjectMapper objectMapper = new ObjectMapper();
85+
Masker masker = Mockito.mock(Masker.class);
86+
LogMsgGroup logMsgGroup = new LogMsgGroup();
87+
LogMsg logMsg = new LogMsg();
88+
logMsg.setMsg("test message");
89+
90+
List<LogMsg> logMsgList = new ArrayList<LogMsg>();
91+
logMsgList.add(logMsg);
92+
93+
logMsgGroup.setAppName("AppName Test");
94+
logMsgGroup.setMsgs(
95+
logMsgList
96+
);
97+
98+
ApiConfiguration apiConfig = ApiConfiguration.newBuilder().apiUrl("url").apiKey("key").build();
99+
100+
HttpSocketClient httpSocketClient = PowerMockito.spy(new HttpSocketClient("testSocket"));
101+
PowerMockito.whenNew(HttpSocketClient.class).withAnyArguments().thenReturn(httpSocketClient);
102+
PowerMockito.doNothing().when(httpSocketClient).send(Mockito.any(HttpPost.class));
103+
104+
LogTransportAgentSocket sender = new LogTransportAgentSocket(apiConfig, masker, true);
105+
sender.send(logMsgGroup);
58106
}
59107
}

0 commit comments

Comments
 (0)