1
1
package com .moesif .sdk .okhttp3client ;
2
2
3
+ import com .moesif .api .models .EventModel ;
3
4
import com .moesif .api .models .EventRequestModel ;
4
5
import com .moesif .api .models .EventResponseModel ;
6
+ import com .moesif .external .facebook .stetho .inspector .network .NetworkEventReporterMoesif ;
7
+ import com .moesif .external .facebook .stetho .inspector .network .NetworkEventReporterMoesifImpl ;
5
8
import com .moesif .sdk .okhttp3client .config .MoesifApiConnConfig ;
6
9
import com .moesif .sdk .okhttp3client .models .OkHttp3RequestMapper ;
7
10
import com .moesif .sdk .okhttp3client .models .OkHttp3ResponseMapper ;
8
11
import com .moesif .sdk .okhttp3client .models .filter .IInterceptEventFilter ;
9
12
import com .moesif .sdk .okhttp3client .util .ResponseWrap ;
10
- import com .moesif .external .facebook .stetho .inspector .network .NetworkEventReporterMoesifImpl ;
11
- import com .moesif .external .facebook .stetho .inspector .network .NetworkEventReporterMoesif ;
12
13
import okhttp3 .*;
13
14
import okio .BufferedSource ;
14
15
import okio .Okio ;
20
21
import java .io .ByteArrayOutputStream ;
21
22
import java .io .IOException ;
22
23
import java .io .InputStream ;
24
+ import java .time .Instant ;
23
25
import java .util .Collection ;
24
26
import java .util .Date ;
27
+ import java .util .concurrent .BlockingQueue ;
28
+ import java .util .concurrent .ExecutorService ;
29
+ import java .util .concurrent .Executors ;
30
+ import java .util .concurrent .LinkedBlockingQueue ;
25
31
import java .util .concurrent .atomic .AtomicInteger ;
26
32
27
- import java .time .Instant ;
28
-
29
33
/**
30
34
* MoesifOkHttp3Interceptor
31
35
* This intrceptor can be used both as Application and Network interceptor
39
43
*/
40
44
public class MoesifOkHttp3Interceptor implements Interceptor {
41
45
private static final Logger logger = LoggerFactory .getLogger (
42
- MoesifOkHttp3Interceptor .class );
43
-
46
+ MoesifOkHttp3Interceptor .class );
47
+ private static MoesifApiConnConfig connConfig ;
44
48
private final NetworkEventReporterMoesif mEventReporter =
45
- NetworkEventReporterMoesifImpl .get ();
49
+ NetworkEventReporterMoesifImpl .get ();
46
50
private final AtomicInteger mNextRequestId = new AtomicInteger (0 );
47
- private static MoesifApiConnConfig connConfig ;
51
+ private final ExecutorService executorService = Executors .newSingleThreadExecutor ();
52
+ private BlockingQueue <EventModel > eventQueue ;
53
+ private BatchEventLogger batchLogger ;
48
54
49
55
/**
50
56
* Initialize the Interceptor
@@ -70,7 +76,7 @@ public MoesifOkHttp3Interceptor(String moesifApplicationId) {
70
76
* to collector
71
77
*/
72
78
public MoesifOkHttp3Interceptor (String moesifApplicationId , Integer eventsBufferSize ) {
73
- MoesifApiConnConfig c = new MoesifApiConnConfig (moesifApplicationId );
79
+ MoesifApiConnConfig c = new MoesifApiConnConfig (moesifApplicationId );
74
80
c .setEventsBufferSize (eventsBufferSize );
75
81
init (c );
76
82
}
@@ -82,10 +88,11 @@ public MoesifOkHttp3Interceptor(String moesifApplicationId, Integer eventsBuffer
82
88
* to collector
83
89
*/
84
90
public MoesifOkHttp3Interceptor (Integer eventsBufferSize ) {
85
- MoesifApiConnConfig c = new MoesifApiConnConfig (null );
91
+ MoesifApiConnConfig c = new MoesifApiConnConfig (null );
86
92
c .setEventsBufferSize (eventsBufferSize );
87
93
init (c );
88
94
}
95
+
89
96
/**
90
97
* Initialize the Interceptor
91
98
* @param connConfig MoesifApiConnConfig object
@@ -96,7 +103,27 @@ public MoesifOkHttp3Interceptor(MoesifApiConnConfig connConfig) {
96
103
97
104
public void init (MoesifApiConnConfig connConfig ) {
98
105
MoesifOkHttp3Interceptor .connConfig = (null == connConfig )
99
- ? new MoesifApiConnConfig () : connConfig ;
106
+ ? new MoesifApiConnConfig () : connConfig ;
107
+ eventQueue = new LinkedBlockingQueue <>(MoesifOkHttp3Interceptor .connConfig .maxQueueSize );
108
+ batchLogger = new BatchEventLogger (
109
+ eventQueue ,
110
+ MoesifOkHttp3Interceptor .connConfig .eventsBufferSize ,
111
+ MoesifOkHttp3Interceptor .connConfig .eventTimeoutMillis ,
112
+ MoesifOkHttp3Interceptor .connConfig .getApplicationId ()
113
+ );
114
+ executorService .submit (batchLogger );
115
+ // Add shutdown hook to clean up and gracefully exit
116
+ Runtime .getRuntime ().addShutdownHook (new Thread (() -> {
117
+ batchLogger .shutdown ();
118
+ executorService .shutdown ();
119
+ try {
120
+ if (!executorService .awaitTermination (5 , java .util .concurrent .TimeUnit .SECONDS )) {
121
+ executorService .shutdownNow ();
122
+ }
123
+ } catch (InterruptedException e ) {
124
+ executorService .shutdownNow ();
125
+ }
126
+ }));
100
127
if (getConnConfig ().isDebug ()) {
101
128
logger .debug ("MoesifOkHttp3Interceptor initialized with config: {}" , getConnConfig ());
102
129
}
@@ -173,9 +200,8 @@ public Response intercept(Chain chain) throws IOException {
173
200
loggedResponse ,
174
201
outputStream ,
175
202
respw .isJsonHeader (),
176
- connConfig . getApplicationId () ,
203
+ eventQueue ,
177
204
connConfig .getMaxAllowedBodyBytesResponse (),
178
- connConfig .getEventsBufferSize (),
179
205
filter .identifyUser (request , response ).orElse (null ),
180
206
filter .identifyCompany (request , response ).orElse (null ),
181
207
filter .sessionToken (request , response ).orElse (null ),
@@ -201,8 +227,7 @@ public Response intercept(Chain chain) throws IOException {
201
227
} catch (Exception e ) {
202
228
logger .warn ("Error parsing response body" , e );
203
229
}
204
- }
205
- else {
230
+ } else {
206
231
logger .warn ("Body is null" );
207
232
}
208
233
return response ;
0 commit comments