Skip to content

Commit f008277

Browse files
feat: Replace timestamps with Duration in async profiler query && Add AsyncProfiling widget (#12816)
1 parent eb4d38c commit f008277

File tree

162 files changed

+429
-30
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

162 files changed

+429
-30
lines changed

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/cache/AsyncProfilerTaskCache.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,16 @@ public void saveTask(String serviceId, AsyncProfilerTask task) {
7878
}
7979

8080
/**
81-
* use for every db query, -5 start time
81+
* use for every db query, -5min start time
8282
*/
8383
public long getCacheStartTimeBucket() {
84-
return TimeBucket.getMinuteTimeBucket(System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(5));
84+
return TimeBucket.getRecordTimeBucket(System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(5));
8585
}
8686

8787
/**
88-
* use for every db query, +5 end time(because search through task's start time)
88+
* use for every db query, +5min end time(because search through task's start time)
8989
*/
9090
public long getCacheEndTimeBucket() {
91-
return TimeBucket.getMinuteTimeBucket(System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(5));
91+
return TimeBucket.getRecordTimeBucket(System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(5));
9292
}
9393
}

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/asyncprofiler/AsyncProfilerMutationService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public AsyncProfilerTaskCreationResult createTask(String serviceId,
7777
task.setEventsFromList(rowEvents);
7878
task.setCreateTime(createTime);
7979
task.setExecArgs(execArgs);
80-
task.setTimeBucket(TimeBucket.getMinuteTimeBucket(createTime));
80+
task.setTimeBucket(TimeBucket.getRecordTimeBucket(createTime));
8181
NoneStreamProcessor.getInstance().in(task);
8282

8383
return AsyncProfilerTaskCreationResult.builder()

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/asyncprofiler/AsyncProfilerQueryService.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,18 @@
2222
import com.google.gson.Gson;
2323
import lombok.RequiredArgsConstructor;
2424
import org.apache.skywalking.oap.server.core.analysis.IDManager;
25-
import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
2625
import org.apache.skywalking.oap.server.core.profiling.asyncprofiler.storage.JFRProfilingDataRecord;
2726
import org.apache.skywalking.oap.server.core.query.AsyncProfilerTaskLog;
27+
import org.apache.skywalking.oap.server.core.query.input.Duration;
2828
import org.apache.skywalking.oap.server.core.query.type.AsyncProfilerStackTree;
2929
import org.apache.skywalking.oap.server.core.query.type.AsyncProfilerTask;
3030
import org.apache.skywalking.oap.server.core.storage.StorageModule;
3131
import org.apache.skywalking.oap.server.core.storage.profiling.asyncprofiler.IAsyncProfilerTaskLogQueryDAO;
3232
import org.apache.skywalking.oap.server.core.storage.profiling.asyncprofiler.IAsyncProfilerTaskQueryDAO;
3333
import org.apache.skywalking.oap.server.core.storage.profiling.asyncprofiler.IJFRDataQueryDAO;
34+
import org.apache.skywalking.oap.server.library.jfr.parser.JFRMergeBuilder;
3435
import org.apache.skywalking.oap.server.library.jfr.type.FrameTree;
3536
import org.apache.skywalking.oap.server.library.jfr.type.JFREventType;
36-
import org.apache.skywalking.oap.server.library.jfr.parser.JFRMergeBuilder;
3737
import org.apache.skywalking.oap.server.library.module.ModuleManager;
3838
import org.apache.skywalking.oap.server.library.module.Service;
3939

@@ -79,15 +79,12 @@ private IAsyncProfilerTaskLogQueryDAO getTaskLogQueryDAO() {
7979
return logQueryDAO;
8080
}
8181

82-
public List<AsyncProfilerTask> queryTask(String serviceId, Long startTime, Long endTime, Integer limit) throws IOException {
82+
public List<AsyncProfilerTask> queryTask(String serviceId, Duration duration, Integer limit) throws IOException {
8383
Long startTimeBucket = null;
84-
if (Objects.nonNull(startTime)) {
85-
startTimeBucket = TimeBucket.getMinuteTimeBucket(startTime);
86-
}
87-
8884
Long endTimeBucket = null;
89-
if (Objects.nonNull(endTime)) {
90-
endTimeBucket = TimeBucket.getMinuteTimeBucket(endTime);
85+
if (Objects.nonNull(duration)) {
86+
startTimeBucket = duration.getStartTimeBucketInSec();
87+
endTimeBucket = duration.getEndTimeBucketInSec();
9188
}
9289

9390
return getTaskQueryDAO().getTaskList(serviceId, startTimeBucket, endTimeBucket, limit);

oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/input/AsyncProfilerTaskListRequest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
@Setter
2727
public class AsyncProfilerTaskListRequest {
2828
private String serviceId;
29-
private Long startTime;
30-
private Long endTime;
29+
private Duration queryDuration;
3130
private Integer limit;
3231
}

oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AsyncProfilerQuery.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.apache.skywalking.oap.server.core.query.type.AsyncProfilerTaskListResult;
3333
import org.apache.skywalking.oap.server.core.query.type.AsyncProfilerTaskLogOperationType;
3434
import org.apache.skywalking.oap.server.core.query.type.AsyncProfilerTaskProgress;
35-
import org.apache.skywalking.oap.server.library.jfr.type.JFREventType;
3635
import org.apache.skywalking.oap.server.library.module.ModuleManager;
3736

3837
import java.io.IOException;
@@ -60,19 +59,12 @@ private AsyncProfilerQueryService getAsyncProfilerQueryService() {
6059

6160
public AsyncProfilerTaskListResult queryAsyncProfilerTaskList(AsyncProfilerTaskListRequest request) throws IOException {
6261
List<AsyncProfilerTask> tasks = getAsyncProfilerQueryService().queryTask(
63-
request.getServiceId(), request.getStartTime(), request.getEndTime(), request.getLimit()
62+
request.getServiceId(), request.getQueryDuration(), request.getLimit()
6463
);
6564
return new AsyncProfilerTaskListResult(null, tasks);
6665
}
6766

6867
public AsyncProfilerAnalyzation queryAsyncProfilerAnalyze(AsyncProfilerAnalyzatonRequest request) throws IOException {
69-
/**
70-
* Due to the replacement of async-profiler-convert package, after JfrReader reads JFR events, it cannot distinguish lock events.
71-
* Therefore, JAVA_MONITOR_ENTER and THREAD_PARK events are merged into one during query and parsing.
72-
*/
73-
if (JFREventType.isLockSample(request.getEventType())) {
74-
request.setEventType(JFREventType.LOCK);
75-
}
7668
AsyncProfilerStackTree eventFrameTrees = getAsyncProfilerQueryService().queryJFRData(
7769
request.getTaskId(), request.getInstanceIds(), request.getEventType()
7870
);

oap-server/server-starter/src/main/resources/ui-initialized-templates/general/general-service.json

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,6 +819,35 @@
819819
}
820820
]
821821
},
822+
{
823+
"name": "Async Profiling",
824+
"children": [
825+
{
826+
"x": 0,
827+
"y": 2,
828+
"w": 24,
829+
"h": 46,
830+
"i": "0",
831+
"type": "AsyncProfiling"
832+
},
833+
{
834+
"x": 0,
835+
"y": 0,
836+
"w": 24,
837+
"h": 2,
838+
"i": "2",
839+
"type": "Text",
840+
"graph": {
841+
"fontColor": "theme",
842+
"backgroundColor": "theme",
843+
"content": "Async Profiling supported services written in Java with SkyWalking native agents installed.",
844+
"fontSize": 14,
845+
"textAlign": "left",
846+
"url": ""
847+
}
848+
}
849+
]
850+
},
822851
{
823852
"name": "Log",
824853
"children": [

oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/AsyncProfilerTaskQueryEsDAO.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.EsDAO;
3737
import org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.IndexController;
3838

39-
import java.io.IOException;
4039
import java.lang.reflect.Type;
4140
import java.util.LinkedList;
4241
import java.util.List;
@@ -89,14 +88,19 @@ public List<AsyncProfilerTask> getTaskList(String serviceId, Long startTimeBucke
8988
}
9089

9190
@Override
92-
public AsyncProfilerTask getById(String id) throws IOException {
91+
public AsyncProfilerTask getById(String id) {
9392
if (StringUtil.isEmpty(id)) {
9493
return null;
9594
}
95+
final BoolQueryBuilder query = Query.bool();
9696
final String index = IndexController.LogicIndicesRegister.getPhysicalTableName(AsyncProfilerTaskRecord.INDEX_NAME);
97+
if (IndexController.LogicIndicesRegister.isMergedTable(AsyncProfilerTaskRecord.INDEX_NAME)) {
98+
query.must(Query.term(IndexController.LogicIndicesRegister.RECORD_TABLE_NAME, AsyncProfilerTaskRecord.INDEX_NAME));
99+
}
100+
query.must(Query.term(AsyncProfilerTaskRecord.TASK_ID, id));
97101

98102
final SearchBuilder search = Search.builder()
99-
.query(Query.bool().must(Query.term(AsyncProfilerTaskRecord.TASK_ID, id)))
103+
.query(query)
100104
.size(1);
101105

102106
final SearchResponse response = getClient().search(index, search.build());

test/e2e-v2/cases/activemq/expected/metrics-has-value-label-destinationname.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ results:
2727
{{- contains .values }}
2828
- id: {{ notEmpty .id }}
2929
value: {{ .value }}
30+
owner: null
3031
traceid: null
3132
- id: {{ notEmpty .id }}
3233
value: null
34+
owner: null
3335
traceid: null
3436
{{- end}}
3537
{{- end}}

test/e2e-v2/cases/activemq/expected/metrics-has-value-label-destinationtype.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@ results:
2828
- id: {{ notEmpty .id }}
2929
value: {{ .value }}
3030
traceid: null
31+
owner: null
3132
- id: {{ notEmpty .id }}
3233
value: null
3334
traceid: null
35+
owner: null
3436
{{- end}}
3537
{{- end}}
3638
error: null

0 commit comments

Comments
 (0)