Skip to content

Commit c664915

Browse files
Merge pull request #377 from debugthings/bugfix/360
Fix low hanging issues for "QuickPulse Broken #360"
2 parents 8bb18b0 + 86608ca commit c664915

File tree

3 files changed

+76
-64
lines changed

3 files changed

+76
-64
lines changed

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

Lines changed: 40 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
* Created by gupele on 12/12/2016.
3434
*/
3535
final class DefaultQuickPulseDataFetcher implements QuickPulseDataFetcher {
36-
private final static String QP_BASE_URI = "https://rt.services.visualstudio.com/QuickPulseService.svc/ping?ikey=";
36+
private final static String QP_BASE_URI = "https://rt.services.visualstudio.com/QuickPulseService.svc/";
3737
private final String quickPulsePostUri;
3838
private final ArrayBlockingQueue<HttpPost> sendQueue;
3939
private final QuickPulseNetworkHelper networkHelper = new QuickPulseNetworkHelper();
@@ -43,15 +43,14 @@ public DefaultQuickPulseDataFetcher(final ArrayBlockingQueue<HttpPost> sendQueue
4343
quickPulsePostUri = QP_BASE_URI + "post?ikey=" + ikey;
4444
this.sendQueue = sendQueue;
4545
final StringBuilder sb = new StringBuilder();
46-
sb.append("\"Instance\":\"" + instanceName + "\"," + "\"InstrumentationKey\":");
47-
sb.append(ikey);
48-
sb.append(",\"InvariantVersion\":2,\"MachineName\":\"");
49-
sb.append(instanceName);
50-
sb.append("\"");
51-
sb.append(",\"Version\":\"2.2.0-424\"");
52-
sb.append(",\"StreamId\":");
53-
sb.append(quickPulseId);
54-
46+
sb.append("[{");
47+
formatDocuments(sb);
48+
sb.append("\"Instance\": \"" + instanceName + "\",");
49+
sb.append("\"InstrumentationKey\": \"" + ikey + "\",");
50+
sb.append("\"InvariantVersion\": 2,");
51+
sb.append("\"MachineName\": \"" + instanceName + "\",");
52+
sb.append("\"StreamId\": \"" + quickPulseId + "\",");
53+
5554
postPrefix = sb.toString();
5655
}
5756

@@ -77,45 +76,47 @@ public void prepareQuickPulseDataForSend() {
7776

7877
private ByteArrayEntity buildPostEntity(QuickPulseDataCollector.FinalCounters counters) {
7978
StringBuilder sb = new StringBuilder(postPrefix);
80-
81-
formatDocuments(sb);
8279
formatMetrics(counters, sb);
83-
84-
sb.append(",\"Timestamp\": \"\\/Date(");
85-
80+
sb.append("\"Timestamp\": \"\\/Date(");
8681
long ms = System.currentTimeMillis();
87-
8882
sb.append(ms);
89-
sb.append(")\\\\/\\\"\"");
90-
83+
sb.append(")\\/\",");
84+
sb.append("\"Version\": \"2.2.0-738\"");
85+
sb.append("}]");
9186
ByteArrayEntity bae = new ByteArrayEntity(sb.toString().getBytes());
9287
return bae;
9388
}
9489

9590
private void formatDocuments(StringBuilder sb) {
96-
sb.append(",\"Documents\":null");
91+
sb.append("\"Documents\": [] ,");
92+
}
93+
94+
private void formatSingleMetric(StringBuilder sb, String metricName, double metricValue, int metricWeight, Boolean includeComma) {
95+
String comma = includeComma ? "," : "";
96+
sb.append(String.format("{\"Name\": \"%s\",\"Value\": %s,\"Weight\": %s}%s", metricName, metricValue, metricWeight, comma));
97+
}
98+
private void formatSingleMetric(StringBuilder sb, String metricName, long metricValue, int metricWeight, Boolean includeComma) {
99+
String comma = includeComma ? "," : "";
100+
sb.append(String.format("{\"Name\": \"%s\",\"Value\": %s,\"Weight\": %s}%s", metricName, metricValue, metricWeight, comma));
101+
}
102+
private void formatSingleMetric(StringBuilder sb, String metricName, int metricValue, int metricWeight, Boolean includeComma) {
103+
String comma = includeComma ? "," : "";
104+
sb.append(String.format("{\"Name\": \"%s\",\"Value\": %s,\"Weight\": %s}%s", metricName, metricValue, metricWeight, comma));
97105
}
98106

99107
private void formatMetrics(QuickPulseDataCollector.FinalCounters counters, StringBuilder sb) {
100-
sb.append(
101-
String.format(",\"Metrics\":[{" +
102-
"{\"Name\":\"\\\\ApplicationInsights\\\\Exceptions\",\"Value\": %s,\"Weight\":1}," +
103-
"{\"Name\":\"\\\\Memory\\\\Committed Bytes\",\"Value\": %s,\"Weight\":1}," +
104-
"{\"Name\":\"\\\\Memory\\\\Processor(_Total)\\\\%% Processor Time\",\"Value\": %s,\"Weight\":1}," +
105-
"{\"Name\":\"\\\\ApplicationInsights\\\\Request\",\"Value\": %s,\"Weight\":1}," +
106-
"{\"Name\":\"\\\\ApplicationInsights\\\\Request Duration\\/Sec\",\"Value\":%s,\"Weight\":%s}," +
107-
"{\"Name\":\"\\\\ApplicationInsights\\\\Requests Failed\\/Sec\",\"Value\":%s,\"Weight\":1}," +
108-
"{\"Name\":\"\\\\ApplicationInsights\\\\Dependency Calls\",\"Value\":%s,\"Weight\":1}," +
109-
"{\"Name\":\"\\\\ApplicationInsights\\\\Dependency Calls Failed\\/Sec\",\"Value\":%s,\"Weight\":1}," +
110-
"{\"Name\":\"\\\\ApplicationInsights\\\\Dependency Call Duration\\/Sec\",\"Value\":%s,\"Weight\":%s}}]",
111-
counters.exceptions,
112-
counters.memoryCommitted,
113-
counters.cpuUsage,
114-
counters.requests,
115-
counters.requestsDuration, counters.requests,
116-
counters.unsuccessfulRequests,
117-
counters.rdds,
118-
counters.unsuccessfulRdds,
119-
counters.rddsDuration, counters.rdds));
108+
sb.append("\"Metrics\":[");
109+
formatSingleMetric(sb, "\\\\ApplicationInsights\\\\Requests\\/Sec", counters.requests, 1, true);
110+
formatSingleMetric(sb, "\\\\ApplicationInsights\\\\Request Duration", counters.requestsDuration, 1, true);
111+
formatSingleMetric(sb, "\\\\ApplicationInsights\\\\Requests Failed\\/Sec", counters.unsuccessfulRequests, 1, true);
112+
formatSingleMetric(sb, "\\\\ApplicationInsights\\\\Requests Succeeded\\/Sec", (counters.requests - counters.unsuccessfulRequests), 1, true);
113+
formatSingleMetric(sb, "\\\\ApplicationInsights\\\\Dependency Calls\\/Sec", counters.rdds, 1, true);
114+
formatSingleMetric(sb, "\\\\ApplicationInsights\\\\Dependency Call Duration", counters.rddsDuration, 1, true);
115+
formatSingleMetric(sb, "\\\\ApplicationInsights\\\\Dependency Calls Failed\\/Sec", counters.unsuccessfulRdds, 1, true);
116+
formatSingleMetric(sb, "\\\\ApplicationInsights\\\\Dependency Calls Succeeded\\/Sec", counters.rdds - counters.unsuccessfulRdds, 1, true);
117+
formatSingleMetric(sb, "\\\\ApplicationInsights\\\\Exceptions\\/Sec", counters.exceptions, 1, true);
118+
formatSingleMetric(sb, "\\\\Memory\\\\Committed Bytes", counters.memoryCommitted, 1, true);
119+
formatSingleMetric(sb, "\\\\Processor(_Total)\\\\% Processor Time", counters.cpuUsage, 1, false);
120+
sb.append("],");
120121
}
121122
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@ public void run() {
5757
}
5858

5959
final long sendTime = System.nanoTime();
60+
HttpResponse response = null;
6061
try {
61-
HttpResponse response = apacheSender.sendPostRequest(post);
62+
response = apacheSender.sendPostRequest(post);
6263
if (networkHelper.isSuccess(response)) {
6364
final QuickPulseStatus quickPulseResultStatus = networkHelper.getQuickPulseStatus(response);
6465
switch (quickPulseResultStatus) {
@@ -78,6 +79,10 @@ public void run() {
7879
}
7980
} catch (IOException e) {
8081
onPostError(sendTime);
82+
} finally {
83+
if (response != null) {
84+
apacheSender.dispose(response);
85+
}
8186
}
8287
}
8388
} catch (Throwable t) {

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

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,33 +36,31 @@
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/ping?ikey=";
39+
private final static String QP_BASE_URI = "https://rt.services.visualstudio.com/QuickPulseService.svc/";
4040

4141
private final String quickPulsePingUri;
4242
private final ApacheSender apacheSender;
4343
private final QuickPulseNetworkHelper networkHelper = new QuickPulseNetworkHelper();
4444
private String pingPrefix;
4545
private long lastValidTransmission = 0;
4646

47-
public DefaultQuickPulsePingSender(final ApacheSender apacheSender, final String instanceName, final String quickPulseId) {
47+
public DefaultQuickPulsePingSender(final ApacheSender apacheSender, final String instanceName,
48+
final String quickPulseId) {
4849
this.apacheSender = apacheSender;
4950

5051
final String ikey = TelemetryConfiguration.getActive().getInstrumentationKey();
5152
quickPulsePingUri = QP_BASE_URI + "ping?ikey=" + ikey;
5253

5354
final StrBuilder sb = new StrBuilder();
54-
sb.append("\"Instance\":\"" + instanceName + "\"," + "\"InstrumentationKey\":");
55-
sb.append(ikey);
56-
sb.append(",\"InvariantVersion\":2,\"MachineName\":\"");
57-
sb.append(instanceName);
58-
sb.append("\"");
59-
sb.append(",\"Version\":\"2.2.0-424\"");
60-
sb.append(",\"StreamId\":");
61-
sb.append(quickPulseId);
62-
63-
sb.append(",\"Documents\":null");
64-
sb.append(",\"Metrics\":null");
65-
sb.append(",\"Timestamp\": \"\\/Date(");
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(");
6664

6765
pingPrefix = sb.toString();
6866
}
@@ -76,24 +74,30 @@ public QuickPulseStatus ping() {
7674
request.setEntity(pingEntity);
7775

7876
final long sendTime = System.nanoTime();
77+
HttpResponse response = null;
7978
try {
80-
HttpResponse response = apacheSender.sendPostRequest(request);
79+
response = apacheSender.sendPostRequest(request);
8180
if (networkHelper.isSuccess(response)) {
8281
final QuickPulseStatus quickPulseResultStatus = networkHelper.getQuickPulseStatus(response);
8382
switch (quickPulseResultStatus) {
84-
case QP_IS_OFF:
85-
case QP_IS_ON:
86-
lastValidTransmission = sendTime;
87-
return quickPulseResultStatus;
83+
case QP_IS_OFF:
84+
case QP_IS_ON:
85+
lastValidTransmission = sendTime;
86+
return quickPulseResultStatus;
8887

89-
case ERROR:
90-
break;
88+
case ERROR:
89+
break;
9190

92-
default:
93-
break;
91+
default:
92+
break;
9493
}
9594
}
9695
} catch (IOException e) {
96+
97+
} finally {
98+
if (response != null) {
99+
apacheSender.dispose(response);
100+
}
97101
}
98102
return onPingError(sendTime);
99103
}
@@ -102,7 +106,9 @@ private ByteArrayEntity buildPingEntity(long timeInMillis) {
102106

103107
StrBuilder sb = new StrBuilder(pingPrefix);
104108
sb.append(timeInMillis);
105-
sb.append(")\\\\/\\\"\"");
109+
sb.append(")\\/\",");
110+
sb.append("\"Version\":\"2.2.0-738\"");
111+
sb.append("}");
106112
ByteArrayEntity bae = new ByteArrayEntity(sb.toString().getBytes());
107113
return bae;
108114
}

0 commit comments

Comments
 (0)