Skip to content

Commit c9c35b8

Browse files
committed
[pinpoint-apm#9712] Add apdex to uri statistics summary
1 parent f5d0b05 commit c9c35b8

File tree

10 files changed

+241
-5
lines changed

10 files changed

+241
-5
lines changed

uristat/uristat-common/src/main/java/com/navercorp/pinpoint/uristat/common/model/UriStat.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public class UriStat {
3030
private final String applicationName;
3131
private final String agentId;
3232
private final String uri;
33+
private final double apdexRaw;
3334
private final long count;
3435
private final long failCount;
3536
private final long maxLatencyMs;
@@ -52,6 +53,7 @@ public UriStat(long timestamp, String tenantId, String serviceName, String appli
5253
this.failureHistogram = Objects.requireNonNull(failureHistogram, "totalHistogram");
5354
this.count = Arrays.stream(totalHistogram).sum();
5455
this.failCount = Arrays.stream(failureHistogram).sum();
56+
this.apdexRaw = (totalHistogram[0] + totalHistogram[1] + totalHistogram[2] + totalHistogram[3] + (0.5 * totalHistogram[4]));
5557
this.version = version;
5658
}
5759

@@ -69,6 +71,7 @@ public UriStat(long timestamp, double tot0, double tot1, double tot2, double tot
6971
this.failCount = EMPTY_NUMBER;
7072
this.maxLatencyMs = EMPTY_NUMBER;
7173
this.totalTimeMs = EMPTY_NUMBER;
74+
this.apdexRaw = EMPTY_NUMBER;
7275
this.totalHistogram = new int[]{(int) tot0, (int) tot1, (int) tot2, (int) tot3, (int) tot4, (int) tot5, (int) tot6, (int) tot7};
7376
this.failureHistogram = new int[]{(int) fail0, (int) fail1, (int) fail2, (int) fail3, (int) fail4, (int) fail5, (int) fail6, (int) fail7};
7477
this.version = version;
@@ -94,6 +97,10 @@ public String getUri() {
9497
return uri;
9598
}
9699

100+
public double getApdexRaw() {
101+
return apdexRaw;
102+
}
103+
97104
public long getCount() {
98105
return count;
99106
}
@@ -199,6 +206,7 @@ public String toString() {
199206
", applicationName='" + applicationName + '\'' +
200207
", agentId='" + agentId + '\'' +
201208
", uri=" + uri +
209+
", apdexRaw= " + apdexRaw +
202210
", count=" + count +
203211
", maxLatencyMs=" + maxLatencyMs +
204212
", totalTimeMs=" + totalTimeMs +

uristat/uristat-common/src/main/pinot/pinot-uriStat-schema.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
}
3030
],
3131
"metricFieldSpecs": [
32+
{
33+
"name": "apdexRaw",
34+
"dataType": "DOUBLE",
35+
"defaultNullValue": -1.0
36+
},
3237
{
3338
"name": "count",
3439
"dataType": "LONG"

uristat/uristat-web/src/main/java/com/navercorp/pinpoint/uristat/web/controller/UriStatController.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,32 @@ public UriStatController(UriStatService uriStatService, TenantProvider tenantPro
4949
this.tenantProvider = Objects.requireNonNull(tenantProvider, "tenantProvider");
5050
}
5151

52+
@GetMapping("summary")
53+
public List<UriStatSummary> getUriStatPagedSummary(@RequestParam("applicationName") String applicationName,
54+
@RequestParam(value = "agentId", required = false) String agentId,
55+
@RequestParam("from") long from,
56+
@RequestParam("to") long to,
57+
@RequestParam("orderby") String column,
58+
@RequestParam("isDesc") boolean isDesc,
59+
@RequestParam("count") int count) {
60+
UriStatQueryParameter.Builder builder = new UriStatQueryParameter.Builder();
61+
builder.setTenantId(tenantProvider.getTenantId());
62+
builder.setApplicationName(applicationName);
63+
builder.setRange(Range.newRange(from, to));
64+
builder.setOrderby(column);
65+
builder.setDesc(isDesc);
66+
builder.setLimit(count);
67+
68+
if (StringUtils.isEmpty(agentId)) {
69+
return uriStatService.getUriStatApplicationPagedSummary(builder.build());
70+
} else {
71+
builder.setAgentId(agentId);
72+
return uriStatService.getUriStatAgentPagedSummary(builder.build());
73+
}
74+
}
75+
5276
@GetMapping("top50")
77+
@Deprecated
5378
public List<UriStatSummary> getUriStatSummary(@RequestParam("applicationName") String applicationName,
5479
@RequestParam(value = "agentId", required = false) String agentId,
5580
@RequestParam("from") long from,

uristat/uristat-web/src/main/java/com/navercorp/pinpoint/uristat/web/dao/PinotUriStatDao.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.stereotype.Repository;
2727

2828
import java.util.List;
29+
import java.util.Map;
2930
import java.util.Objects;
3031

3132
@Repository
@@ -51,12 +52,25 @@ public List<UriStat> getUriStatAgent(UriStatQueryParameter queryParameter) {
5152
}
5253

5354
@Override
55+
public List<UriStatSummary> getUriStatApplicationPagedSummary(UriStatQueryParameter queryParameter) {
56+
return sqlPinotSessionTemplate.selectList(NAMESPACE + "uriStatApplicationSummary", queryParameter);
57+
}
58+
59+
@Override
60+
public List<UriStatSummary> getUriStatAgentPagedSummary(UriStatQueryParameter queryParameter) {
61+
return sqlPinotSessionTemplate.selectList(NAMESPACE + "uriStatAgentSummary", queryParameter);
62+
}
63+
64+
@Override
65+
@Deprecated
5466
public List<UriStatSummary> getUriStatApplicationSummary(UriStatQueryParameter queryParameter) {
5567
return sqlPinotSessionTemplate.selectList(NAMESPACE + "top50UriStatApplication", queryParameter);
5668
}
5769

5870
@Override
71+
@Deprecated
5972
public List<UriStatSummary> getUriStatAgentSummary(UriStatQueryParameter queryParameter) {
6073
return sqlPinotSessionTemplate.selectList(NAMESPACE + "top50UriStatAgent", queryParameter);
6174
}
75+
6276
}

uristat/uristat-web/src/main/java/com/navercorp/pinpoint/uristat/web/dao/UriStatDao.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,16 @@
2121
import com.navercorp.pinpoint.uristat.web.util.UriStatQueryParameter;
2222

2323
import java.util.List;
24+
import java.util.Map;
2425

2526
public interface UriStatDao {
2627
List<UriStat> getUriStatApplication(UriStatQueryParameter queryParameter);
2728
List<UriStat> getUriStatAgent(UriStatQueryParameter queryParameter);
29+
@Deprecated
2830
List<UriStatSummary> getUriStatApplicationSummary(UriStatQueryParameter uriStatQueryParameter);
31+
@Deprecated
2932
List<UriStatSummary> getUriStatAgentSummary(UriStatQueryParameter uriStatQueryParameter);
33+
List<UriStatSummary> getUriStatApplicationPagedSummary(UriStatQueryParameter uriStatQueryParameter);
34+
List<UriStatSummary> getUriStatAgentPagedSummary(UriStatQueryParameter uriStatQueryParameter);
35+
3036
}

uristat/uristat-web/src/main/java/com/navercorp/pinpoint/uristat/web/model/UriStatSummary.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,37 @@ public class UriStatSummary {
2424
private final double failureCount;
2525
private final double maxTimeMs;
2626
private final double avgTimeMs;
27+
private final double apdex;
2728
private final int version;
2829

29-
public UriStatSummary(String uri, double totalCount, double failureCount, double maxTimeMs, double totalTimeMs, int version) {
30+
public UriStatSummary(String uri, double apdexRaw, double apdexCount, double totalCount, double failureCount, double maxTimeMs, double totalTimeMs, int version) {
3031
this.uri = uri;
32+
this.apdex = MathUtils.average(apdexRaw, apdexCount);
3133
this.totalCount = totalCount;
3234
this.failureCount = failureCount;
3335
this.maxTimeMs = maxTimeMs;
3436
this.avgTimeMs = MathUtils.average(totalTimeMs, totalCount);
3537
this.version = version;
3638
}
3739

38-
40+
@Deprecated
41+
public UriStatSummary(String uri, double totalCount, double failureCount, double maxTimeMs, double totalTimeMs, int version) {
42+
this.uri = uri;
43+
this.apdex = 0;
44+
this.totalCount = totalCount;
45+
this.failureCount = failureCount;
46+
this.maxTimeMs = maxTimeMs;
47+
this.avgTimeMs = MathUtils.average(totalTimeMs, totalCount);
48+
this.version = version;
49+
}
3950
public String getUri() {
4051
return uri;
4152
}
4253

54+
public double getApdex() {
55+
return apdex;
56+
}
57+
4358
public double getTotalCount() {
4459
return totalCount;
4560
}

uristat/uristat-web/src/main/java/com/navercorp/pinpoint/uristat/web/service/UriStatService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@
2525
public interface UriStatService {
2626
List<UriStat> getCollectedUriStatApplication(UriStatQueryParameter queryParameter);
2727
List<UriStat> getCollectedUriStatAgent(UriStatQueryParameter queryParameter);
28+
@Deprecated
2829
List<UriStatSummary> getUriStatApplicationSummary(UriStatQueryParameter queryParameter);
30+
@Deprecated
2931
List<UriStatSummary> getUriStatAgentSummary(UriStatQueryParameter queryParameter);
32+
List<UriStatSummary> getUriStatApplicationPagedSummary(UriStatQueryParameter queryParameter);
33+
List<UriStatSummary> getUriStatAgentPagedSummary(UriStatQueryParameter queryParameter);
34+
3035
}

uristat/uristat-web/src/main/java/com/navercorp/pinpoint/uristat/web/service/UriStatServiceImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,25 @@ public List<UriStat> getCollectedUriStatAgent(UriStatQueryParameter queryParamet
4545
}
4646

4747
@Override
48+
@Deprecated
4849
public List<UriStatSummary> getUriStatApplicationSummary(UriStatQueryParameter queryParameter) {
4950
return uriStatDao.getUriStatApplicationSummary(queryParameter);
5051
}
5152

5253
@Override
54+
@Deprecated
5355
public List<UriStatSummary> getUriStatAgentSummary(UriStatQueryParameter queryParameter) {
5456
return uriStatDao.getUriStatAgentSummary(queryParameter);
5557
}
58+
59+
@Override
60+
public List<UriStatSummary> getUriStatApplicationPagedSummary(UriStatQueryParameter queryParameter) {
61+
return uriStatDao.getUriStatApplicationPagedSummary(queryParameter);
62+
}
63+
64+
@Override
65+
public List<UriStatSummary> getUriStatAgentPagedSummary(UriStatQueryParameter queryParameter) {
66+
return uriStatDao.getUriStatAgentPagedSummary(queryParameter);
67+
}
68+
5669
}

uristat/uristat-web/src/main/java/com/navercorp/pinpoint/uristat/web/util/UriStatQueryParameter.java

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.navercorp.pinpoint.metric.web.util.QueryParameter;
2020
import com.navercorp.pinpoint.metric.web.util.TimePrecision;
2121

22+
import java.security.InvalidParameterException;
2223
import java.util.concurrent.TimeUnit;
2324

2425
public class UriStatQueryParameter extends QueryParameter {
@@ -27,6 +28,45 @@ public class UriStatQueryParameter extends QueryParameter {
2728
private final String applicationName;
2829
private final String agentId;
2930
private final String uri;
31+
private final OrderBy orderBy;
32+
private final String isDesc;
33+
34+
35+
private enum OrderBy {
36+
URI("uri"),
37+
APDEX("apdex"),
38+
TOTAL("totalCount"),
39+
FAILURE("failureCount"),
40+
MAX("maxTimeMs"),
41+
AVG("avgTimeMs");
42+
43+
private final String value;
44+
45+
OrderBy(String value) {
46+
this.value = value;
47+
}
48+
49+
public static OrderBy fromValue(String value) {
50+
for (OrderBy orderBy : OrderBy.values()) {
51+
if (orderBy.value.equalsIgnoreCase(value)) {
52+
return orderBy;
53+
}
54+
}
55+
return null;
56+
}
57+
58+
@Override
59+
public String toString() {
60+
switch(this) {
61+
case APDEX:
62+
return "(apdexRaw / apdexCount)";
63+
case AVG:
64+
return "(totalTimeMs / totalCount)";
65+
default:
66+
return this.value;
67+
}
68+
}
69+
}
3070

3171
protected UriStatQueryParameter(Builder builder) {
3272
super(builder.getRange(), builder.getTimePrecision(), builder.getLimit());
@@ -35,6 +75,8 @@ protected UriStatQueryParameter(Builder builder) {
3575
this.applicationName = builder.applicationName;
3676
this.agentId = builder.agentId;
3777
this.uri = builder.uri;
78+
this.orderBy = builder.orderBy;
79+
this.isDesc = builder.isDesc;
3880
}
3981

4082
public static class Builder extends QueryParameter.Builder {
@@ -43,6 +85,8 @@ public static class Builder extends QueryParameter.Builder {
4385
private String applicationName;
4486
private String agentId;
4587
private String uri;
88+
private OrderBy orderBy;
89+
private String isDesc;
4690

4791
public void setTenantId(String tenantId) {
4892
this.tenantId = tenantId;
@@ -61,12 +105,41 @@ public void setAgentId(String agentId) {
61105

62106
public void setUri(String uri) { this.uri = uri; }
63107

108+
public void setOrderby(String orderBy) throws InvalidParameterException {
109+
this.orderBy = OrderBy.fromValue(orderBy);
110+
if (this.orderBy == null) {
111+
throw new InvalidParameterException("Invalid order by type : " + orderBy + " not supported.");
112+
}
113+
}
114+
115+
public void setDesc(boolean desc) {
116+
if (desc) {
117+
isDesc = "desc";
118+
} else {
119+
isDesc = "asc";
120+
}
121+
}
122+
123+
public void setLimit(long limit) {
124+
if (limit > 200) {
125+
this.limit = 200;
126+
} else if (limit < 50) {
127+
this.limit = 50;
128+
} else {
129+
this.limit = limit;
130+
}
131+
}
132+
64133
@Override
65134
public UriStatQueryParameter build() {
66135
if (timePrecision == null) {
67136
this.timePrecision = TimePrecision.newTimePrecision(TimeUnit.MILLISECONDS, 30000);
68137
}
69-
this.limit = estimateLimit();
138+
139+
if (limit == 0) {
140+
this.limit = estimateLimit();
141+
}
142+
70143
return new UriStatQueryParameter(this);
71144
}
72145
}

0 commit comments

Comments
 (0)