Skip to content

Commit 3173a09

Browse files
committed
Extension for version 6.7.0. Added logging for runtime of functions inside pxVerify
1 parent 74d54c1 commit 3173a09

File tree

11 files changed

+209
-132
lines changed

11 files changed

+209
-132
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<name>PerimeterX JAVA SDK</name>
88
<groupId>com.perimeterx</groupId>
99
<artifactId>perimeterx-sdk</artifactId>
10-
<version>6.7.0</version>
10+
<version>6.7.0-rc-extended-logging</version>
1111

1212
<packaging>jar</packaging>
1313
<description>PerimeterX Java SDK</description>

src/main/java/com/perimeterx/api/PerimeterX.java

Lines changed: 41 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import java.util.Base64;
7070

7171
import static com.perimeterx.utils.Constants.*;
72+
import static com.perimeterx.utils.PXCommonUtils.logTime;
7273
import static java.util.Objects.isNull;
7374

7475
/**
@@ -155,49 +156,53 @@ public PerimeterX(PXConfiguration configuration, HostnameProvider hostnameProvid
155156
* @throws PXException - PXException
156157
*/
157158
public PXContext pxVerify(HttpServletRequest req, HttpServletResponseWrapper responseWrapper) throws PXException {
158-
PXContext context = null;
159-
logger.debug(PXLogger.LogReason.DEBUG_STARTING_REQUEST_VERIFICATION);
160-
161-
try {
162-
if (isValidTelemetryRequest(req)) {
163-
activityHandler.handleEnforcerTelemetryActivity(this.configuration, UpdateReason.COMMAND);
164-
return null;
165-
}
166-
167-
if (!moduleEnabled()) {
168-
logger.debug(PXLogger.LogReason.DEBUG_MODULE_DISABLED);
169-
return null;
170-
}
171-
172-
context = new PXContext(req, this.ipProvider, this.hostnameProvider, configuration);
159+
return logTime("pxVerify", () -> {
160+
PXContext context = null;
161+
logger.debug(PXLogger.LogReason.DEBUG_STARTING_REQUEST_VERIFICATION);
162+
163+
try {
164+
if (logTime("isValidTelemetryRequest", () -> isValidTelemetryRequest(req))) {
165+
logTime("activityHandler.handleEnforcerTelemetryActivity", () -> activityHandler.handleEnforcerTelemetryActivity(this.configuration, UpdateReason.COMMAND));
166+
return null;
167+
}
173168

174-
if (shouldReverseRequest(req, responseWrapper)) {
175-
context.setFirstPartyRequest(true);
176-
return context;
177-
}
169+
if (!moduleEnabled()) {
170+
logger.debug(PXLogger.LogReason.DEBUG_MODULE_DISABLED);
171+
return null;
172+
}
178173

179-
//if path ext is defined at whitelist, let the request pass
180-
if (configuration.isExtWhiteListed(req.getRequestURI())) {
181-
return null;
182-
}
174+
context = logTime("new PXContext", () -> new PXContext(req, this.ipProvider, this.hostnameProvider, configuration));
183175

184-
handleCookies(context);
185-
addCustomHeadersToRequest(req, context);
176+
if (logTime("shouldReverseRequest", () -> shouldReverseRequest(req, responseWrapper))) {
177+
context.setFirstPartyRequest(true);
178+
return context;
179+
}
186180

187-
context.setVerified(verificationHandler.handleVerification(context, responseWrapper));
188-
} catch (Exception e) {
189-
// If any general exception is being thrown, notify in page_request activity
190-
if (context != null) {
191-
if (!context.getS2sErrorReasonInfo().isErrorSet()) {
192-
EnforcerErrorUtils.handleEnforcerError(context, "Unexpected error", e);
181+
//if path ext is defined at whitelist, let the request pass
182+
if (configuration.isExtWhiteListed(req.getRequestURI())) {
183+
return null;
193184
}
194185

195-
activityHandler.handlePageRequestedActivity(context);
196-
context.setVerified(true);
186+
final PXContext finalContext = context;
187+
logTime("handleCookies", () -> handleCookies(finalContext));
188+
logTime("addCustomHeadersToRequest", () -> addCustomHeadersToRequest(req, finalContext));
189+
190+
context.setVerified(logTime("verificationHandler.handleVerification", () -> verificationHandler.handleVerification(finalContext, responseWrapper)));
191+
} catch (Exception e) {
192+
final PXContext finalContext = context;
193+
// If any general exception is being thrown, notify in page_request activity
194+
if (context != null) {
195+
if (!context.getS2sErrorReasonInfo().isErrorSet()) {
196+
logTime("EnforcerErrorUtils.handleEnforcerError", () -> EnforcerErrorUtils.handleEnforcerError(finalContext, "Unexpected error", e));
197+
}
198+
199+
logTime("activityHandler.handlePageRequestedActivity", () -> activityHandler.handlePageRequestedActivity(finalContext));
200+
context.setVerified(true);
201+
}
197202
}
198-
}
199203

200-
return context;
204+
return context;
205+
});
201206
}
202207

203208
private boolean moduleEnabled() {
@@ -339,7 +344,7 @@ public void setVerificationHandler(VerificationHandler verificationHandler) {
339344

340345
@Override
341346
public void close() throws IOException {
342-
if(this.pxClient != null) {
347+
if (this.pxClient != null) {
343348
this.pxClient.close();
344349
}
345350
}

src/main/java/com/perimeterx/api/activities/BufferedActivityHandler.java

Lines changed: 60 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.concurrent.atomic.AtomicInteger;
1515
import java.util.concurrent.locks.ReentrantLock;
1616

17+
import static com.perimeterx.utils.PXCommonUtils.logTime;
1718
import static com.perimeterx.utils.PXLogger.LogReason.ERROR_TELEMETRY_EXCEPTION;
1819

1920

@@ -39,41 +40,53 @@ public BufferedActivityHandler(PXClient client, PXConfiguration configuration) {
3940

4041
@Override
4142
public void handleBlockActivity(PXContext context) throws PXException {
42-
Activity activity = ActivityFactory.createActivity(Constants.ACTIVITY_BLOCKED, configuration.getAppId(), context);
43-
handleSendActivities(activity);
43+
logTime("handleBlockActivity", () -> {
44+
Activity activity = ActivityFactory.createActivity(Constants.ACTIVITY_BLOCKED, configuration.getAppId(), context);
45+
handleSendActivities(activity);
46+
});
47+
4448
}
4549

4650
@Override
4751
public void handlePageRequestedActivity(PXContext context) throws PXException {
48-
Activity activity = ActivityFactory.createActivity(Constants.ACTIVITY_PAGE_REQUESTED, configuration.getAppId(), context);
49-
handleSendActivities(activity);
52+
logTime("handlePageRequestedActivity", () -> {
53+
Activity activity = ActivityFactory.createActivity(Constants.ACTIVITY_PAGE_REQUESTED, configuration.getAppId(), context);
54+
handleSendActivities(activity);
55+
});
56+
5057
}
5158

5259
@Override
5360
public void handleEnforcerTelemetryActivity(PXConfiguration pxConfig, UpdateReason updateReason) throws PXException {
54-
try {
55-
EnforcerTelemetryActivityDetails details = new EnforcerTelemetryActivityDetails(pxConfig, updateReason);
56-
EnforcerTelemetry enforcerTelemetry = new EnforcerTelemetry("enforcer_telemetry", pxConfig.getAppId(), details);
57-
this.client.sendEnforcerTelemetry(enforcerTelemetry);
58-
} catch (IOException e) {
59-
throw new PXException(ERROR_TELEMETRY_EXCEPTION.toString(), e);
60-
}
61+
logTime("handleEnforcerTelemetryActivity", () -> {
62+
try {
63+
EnforcerTelemetryActivityDetails details = new EnforcerTelemetryActivityDetails(pxConfig, updateReason);
64+
EnforcerTelemetry enforcerTelemetry = new EnforcerTelemetry("enforcer_telemetry", pxConfig.getAppId(), details);
65+
this.client.sendEnforcerTelemetry(enforcerTelemetry);
66+
} catch (IOException e) {
67+
throw new PXException(ERROR_TELEMETRY_EXCEPTION.toString(), e);
68+
}
69+
});
6170
}
6271

6372
@Override
6473
public void handleAdditionalS2SActivity(PXContext context) throws PXException {
65-
final Activity activity = createAdditionalS2SActivity(context);
66-
handleSendActivities(activity);
74+
logTime("handleAdditionalS2SActivity", () -> {
75+
final Activity activity = createAdditionalS2SActivity(context);
76+
handleSendActivities(activity);
77+
});
6778
}
6879

6980
public Activity createAdditionalS2SActivity(PXContext context) {
70-
final Activity activity = ActivityFactory.createActivity(Constants.ACTIVITY_ADDITIONAL_S2S, configuration.getAppId(), context);
81+
return logTime("createAdditionalS2SActivity", () -> {
82+
final Activity activity = ActivityFactory.createActivity(Constants.ACTIVITY_ADDITIONAL_S2S, configuration.getAppId(), context);
7183

72-
if(isRequireRawUsername(context)) {
73-
((AdditionalS2SActivityDetails) activity.getDetails())
74-
.setUsername(context.getLoginData().getLoginCredentials().getRawUsername());
75-
}
76-
return activity;
84+
if (isRequireRawUsername(context)) {
85+
((AdditionalS2SActivityDetails) activity.getDetails())
86+
.setUsername(context.getLoginData().getLoginCredentials().getRawUsername());
87+
}
88+
return activity;
89+
});
7790
}
7891

7992
private boolean isRequireRawUsername(PXContext context) {
@@ -85,37 +98,42 @@ private boolean isRequireRawUsername(PXContext context) {
8598
}
8699

87100
private void handleSendActivities(Activity activity) throws PXException {
88-
bufferedActivities.add(activity);
89-
int count = counter.incrementAndGet();
90-
if (count > maxBufferLength) {
91-
handleOverflow();
92-
}
101+
logTime("handleSendActivities", () -> {
102+
bufferedActivities.add(activity);
103+
int count = counter.incrementAndGet();
104+
if (count > maxBufferLength) {
105+
handleOverflow();
106+
}
107+
});
93108
}
94109

95110
private void handleOverflow() throws PXException {
96-
ConcurrentLinkedQueue<Activity> activitiesToSend;
97-
if (lock.tryLock()) {
98-
try {
99-
activitiesToSend = flush();
100-
} finally {
101-
lock.unlock();
111+
logTime("handleOverflow", () -> {
112+
ConcurrentLinkedQueue<Activity> activitiesToSend;
113+
if (lock.tryLock()) {
114+
try {
115+
activitiesToSend = flush();
116+
} finally {
117+
lock.unlock();
118+
}
119+
sendAsync(activitiesToSend);
102120
}
103-
sendAsync(activitiesToSend);
104-
}
121+
});
105122
}
106123

107124
private void sendAsync(ConcurrentLinkedQueue<Activity> activitiesToSend) throws PXException {
108-
if (activitiesToSend == null) {
109-
return;
110-
}
111-
112-
List<Activity> activitiesLocal = activitiesAsList(activitiesToSend);
113-
try {
114-
client.sendBatchActivities(activitiesLocal);
115-
} catch (Exception e) {
116-
throw new PXException(e);
117-
}
125+
logTime("sendAsync", () -> {
126+
if (activitiesToSend == null) {
127+
return;
128+
}
118129

130+
List<Activity> activitiesLocal = activitiesAsList(activitiesToSend);
131+
try {
132+
client.sendBatchActivities(activitiesLocal);
133+
} catch (Exception e) {
134+
throw new PXException(e);
135+
}
136+
});
119137
}
120138

121139
private List<Activity> activitiesAsList(ConcurrentLinkedQueue<Activity> activityQueue) {

src/main/java/com/perimeterx/api/verificationhandler/DefaultVerificationHandler.java

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.io.UnsupportedEncodingException;
1414
import java.net.URLEncoder;
1515

16+
import static com.perimeterx.utils.PXCommonUtils.logTime;
1617
import static com.perimeterx.utils.PXLogger.LogReason.DEBUG_S2S_SCORE_IS_HIGHER_THAN_BLOCK;
1718
import static com.perimeterx.utils.PXLogger.LogReason.DEBUG_S2S_SCORE_IS_LOWER_THAN_BLOCK;
1819

@@ -35,29 +36,31 @@ public DefaultVerificationHandler(PXConfiguration pxConfiguration, ActivityHandl
3536

3637
@Override
3738
public boolean handleVerification(PXContext context, HttpServletResponseWrapper responseWrapper) throws PXException {
38-
boolean verified = shouldPassRequest(context);
39+
boolean verified = logTime("shouldPassRequest", () -> shouldPassRequest(context));
3940

40-
setPxhdCookie(context, responseWrapper);
41+
logTime("setPxhdCookie", () -> setPxhdCookie(context, responseWrapper));
4142

4243
if (!verified && !context.isMonitoredRequest()) {
43-
this.blockHandler.handleBlocking(context, this.pxConfiguration, responseWrapper);
44+
logTime("blockHandler.handleBlocking",() -> this.blockHandler.handleBlocking(context, this.pxConfiguration, responseWrapper));
4445
}
4546

46-
try {
47-
if (verified) {
48-
logger.debug("Passing request {} {}", verified, this.pxConfiguration.getModuleMode());
49-
50-
// Not blocking request and sending page_requested activity to px if configured as true
51-
if (this.pxConfiguration.isSendPageActivities()) {
52-
this.activityHandler.handlePageRequestedActivity(context);
47+
logTime("anonymousAsyncActivitiesSender" , () -> {
48+
try {
49+
if (verified) {
50+
logger.debug("Passing request {} {}", verified, this.pxConfiguration.getModuleMode());
51+
52+
// Not blocking request and sending page_requested activity to px if configured as true
53+
if (this.pxConfiguration.isSendPageActivities()) {
54+
this.activityHandler.handlePageRequestedActivity(context);
55+
}
56+
} else {
57+
logger.debug("Request invalid");
58+
this.activityHandler.handleBlockActivity(context);
5359
}
54-
} else {
55-
logger.debug("Request invalid");
56-
this.activityHandler.handleBlockActivity(context);
60+
} catch (PXException pxException) {
61+
logger.error("Error occurred while handle activities", pxException);
5762
}
58-
} catch (PXException pxException) {
59-
logger.error("Error occurred while handle activities", pxException);
60-
}
63+
});
6164

6265
return verified || context.isMonitoredRequest();
6366
}

src/main/java/com/perimeterx/internals/PXCookieValidator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import com.perimeterx.utils.PXLogger;
1212
import org.apache.commons.lang3.StringUtils;
1313

14+
import static com.perimeterx.utils.PXCommonUtils.logTime;
15+
1416
/**
1517
* PXCookieValidator
1618
* <p>
@@ -40,7 +42,7 @@ public boolean verify(PXContext context) {
4042
if (context.isMobileToken()) {
4143
PXCookieOriginalTokenValidator mobileVerifier = new PXCookieOriginalTokenValidator(pxConfiguration);
4244
mobileError = mobileVerifier.getMobileError(context);
43-
mobileVerifier.verify(context);
45+
logTime("mobileVerifier.verify", () -> mobileVerifier.verify(context));
4446
if (!StringUtils.isEmpty(mobileError)) {
4547
context.setS2sCallReason("mobile_error_" + mobileError);
4648
return false;

src/main/java/com/perimeterx/internals/PXS2SValidator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.perimeterx.utils.PXLogger;
1616
import org.apache.http.conn.ConnectTimeoutException;
1717

18+
import static com.perimeterx.utils.PXCommonUtils.logTime;
1819
import static org.apache.commons.lang3.StringUtils.*;
1920

2021
/**
@@ -48,7 +49,7 @@ public boolean verify(PXContext pxContext) {
4849
long rtt;
4950

5051
try {
51-
response = pxClient.riskApiCall(pxContext);
52+
response = logTime("pxClient.riskApiCall", () -> pxClient.riskApiCall(pxContext));
5253
} catch (ConnectTimeoutException e) {
5354
// Timeout handling - report pass reason and proceed with request
5455
pxContext.setPassReason(PassReason.S2S_TIMEOUT);

0 commit comments

Comments
 (0)