Skip to content

Commit bf2cd49

Browse files
committed
Fixing Ping Sender connection pool leak as well
1 parent e985629 commit bf2cd49

File tree

1 file changed

+85
-78
lines changed

1 file changed

+85
-78
lines changed

core/src/main/java/com/microsoft/applicationinsights/internal/quickpulse/DefaultQuickPulsePingSender.java

Lines changed: 85 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -36,82 +36,89 @@
3636
* Created by gupele on 12/12/2016.
3737
*/
3838
final class DefaultQuickPulsePingSender implements QuickPulsePingSender {
39-
private final static String QP_BASE_URI = "https://rt.services.visualstudio.com/QuickPulseService.svc/";
40-
41-
private final String quickPulsePingUri;
42-
private final ApacheSender apacheSender;
43-
private final QuickPulseNetworkHelper networkHelper = new QuickPulseNetworkHelper();
44-
private String pingPrefix;
45-
private long lastValidTransmission = 0;
46-
47-
public DefaultQuickPulsePingSender(final ApacheSender apacheSender, final String instanceName, final String quickPulseId) {
48-
this.apacheSender = apacheSender;
49-
50-
final String ikey = TelemetryConfiguration.getActive().getInstrumentationKey();
51-
quickPulsePingUri = QP_BASE_URI + "ping?ikey=" + ikey;
52-
53-
final StrBuilder sb = new StrBuilder();
54-
sb.append("{");
55-
sb.append("\"Documents\": null,");
56-
sb.append("\"Instance\":\"" + instanceName + "\",");
57-
sb.append("\"InstrumentationKey\": null,");
58-
sb.append("\"InvariantVersion\": 2,");
59-
sb.append("\"MachineName\":\"" + instanceName + "\",");
60-
sb.append("\"Metrics\": null,");
61-
sb.append("\"StreamId\": \"" + quickPulseId + "\",");
62-
sb.append("\"Timestamp\": \"\\/Date(");
63-
64-
pingPrefix = sb.toString();
65-
}
66-
67-
@Override
68-
public QuickPulseStatus ping() {
69-
final Date currentDate = new Date();
70-
final HttpPost request = networkHelper.buildRequest(currentDate, quickPulsePingUri);
71-
72-
final ByteArrayEntity pingEntity = buildPingEntity(currentDate.getTime());
73-
request.setEntity(pingEntity);
74-
75-
final long sendTime = System.nanoTime();
76-
try {
77-
HttpResponse response = apacheSender.sendPostRequest(request);
78-
if (networkHelper.isSuccess(response)) {
79-
final QuickPulseStatus quickPulseResultStatus = networkHelper.getQuickPulseStatus(response);
80-
switch (quickPulseResultStatus) {
81-
case QP_IS_OFF:
82-
case QP_IS_ON:
83-
lastValidTransmission = sendTime;
84-
return quickPulseResultStatus;
85-
86-
case ERROR:
87-
break;
88-
89-
default:
90-
break;
91-
}
92-
}
93-
} catch (IOException e) {
94-
}
95-
return onPingError(sendTime);
96-
}
97-
98-
private ByteArrayEntity buildPingEntity(long timeInMillis) {
99-
100-
StrBuilder sb = new StrBuilder(pingPrefix);
101-
sb.append(timeInMillis);
102-
sb.append(")\\/\",");
103-
sb.append("\"Version\":\"2.2.0-738\"");
104-
sb.append("}");
105-
ByteArrayEntity bae = new ByteArrayEntity(sb.toString().getBytes());
106-
return bae;
107-
}
108-
109-
private QuickPulseStatus onPingError(long sendTime) {
110-
final double timeFromLastValidTransmission = (sendTime - lastValidTransmission) / 1000000000.0;
111-
if (timeFromLastValidTransmission >= 60.0) {
112-
return QuickPulseStatus.ERROR;
113-
}
114-
115-
return QuickPulseStatus.QP_IS_OFF;
116-
}
39+
private final static String QP_BASE_URI = "https://rt.services.visualstudio.com/QuickPulseService.svc/";
40+
41+
private final String quickPulsePingUri;
42+
private final ApacheSender apacheSender;
43+
private final QuickPulseNetworkHelper networkHelper = new QuickPulseNetworkHelper();
44+
private String pingPrefix;
45+
private long lastValidTransmission = 0;
46+
47+
public DefaultQuickPulsePingSender(final ApacheSender apacheSender, final String instanceName,
48+
final String quickPulseId) {
49+
this.apacheSender = apacheSender;
50+
51+
final String ikey = TelemetryConfiguration.getActive().getInstrumentationKey();
52+
quickPulsePingUri = QP_BASE_URI + "ping?ikey=" + ikey;
53+
54+
final StrBuilder sb = new StrBuilder();
55+
sb.append("{");
56+
sb.append("\"Documents\": null,");
57+
sb.append("\"Instance\":\"" + instanceName + "\",");
58+
sb.append("\"InstrumentationKey\": null,");
59+
sb.append("\"InvariantVersion\": 2,");
60+
sb.append("\"MachineName\":\"" + instanceName + "\",");
61+
sb.append("\"Metrics\": null,");
62+
sb.append("\"StreamId\": \"" + quickPulseId + "\",");
63+
sb.append("\"Timestamp\": \"\\/Date(");
64+
65+
pingPrefix = sb.toString();
66+
}
67+
68+
@Override
69+
public QuickPulseStatus ping() {
70+
final Date currentDate = new Date();
71+
final HttpPost request = networkHelper.buildRequest(currentDate, quickPulsePingUri);
72+
73+
final ByteArrayEntity pingEntity = buildPingEntity(currentDate.getTime());
74+
request.setEntity(pingEntity);
75+
76+
final long sendTime = System.nanoTime();
77+
HttpResponse response = null;
78+
try {
79+
response = apacheSender.sendPostRequest(request);
80+
if (networkHelper.isSuccess(response)) {
81+
final QuickPulseStatus quickPulseResultStatus = networkHelper.getQuickPulseStatus(response);
82+
switch (quickPulseResultStatus) {
83+
case QP_IS_OFF:
84+
case QP_IS_ON:
85+
lastValidTransmission = sendTime;
86+
return quickPulseResultStatus;
87+
88+
case ERROR:
89+
break;
90+
91+
default:
92+
break;
93+
}
94+
}
95+
} catch (IOException e) {
96+
97+
} finally {
98+
if (response != null) {
99+
apacheSender.dispose(response);
100+
}
101+
}
102+
return onPingError(sendTime);
103+
}
104+
105+
private ByteArrayEntity buildPingEntity(long timeInMillis) {
106+
107+
StrBuilder sb = new StrBuilder(pingPrefix);
108+
sb.append(timeInMillis);
109+
sb.append(")\\/\",");
110+
sb.append("\"Version\":\"2.2.0-738\"");
111+
sb.append("}");
112+
ByteArrayEntity bae = new ByteArrayEntity(sb.toString().getBytes());
113+
return bae;
114+
}
115+
116+
private QuickPulseStatus onPingError(long sendTime) {
117+
final double timeFromLastValidTransmission = (sendTime - lastValidTransmission) / 1000000000.0;
118+
if (timeFromLastValidTransmission >= 60.0) {
119+
return QuickPulseStatus.ERROR;
120+
}
121+
122+
return QuickPulseStatus.QP_IS_OFF;
123+
}
117124
}

0 commit comments

Comments
 (0)