Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import com.navercorp.pinpoint.web.applicationmap.rawdata.LinkDataDuplexMap;
import com.navercorp.pinpoint.web.security.ServerMapDataFilter;
import com.navercorp.pinpoint.web.service.ServerInstanceDatasourceService;
import com.navercorp.pinpoint.web.vo.Application;
import com.navercorp.pinpoint.web.vo.SearchOption;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand Down Expand Up @@ -126,7 +127,7 @@
ApplicationMapBuilder builder = createApplicationMapBuilder(option);
ApplicationMap map = builder.build(linkDataDuplexMap, buildTimeoutMillis);
if (map.getNodes().isEmpty()) {
map = builder.build(option.getSourceApplication(), buildTimeoutMillis);
map = buildForNoRequest(option.getSourceApplication(), builder);

Check warning on line 130 in web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/MapServiceImpl.java

View check run for this annotation

Codecov / codecov/patch

web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/MapServiceImpl.java#L130

Added line #L130 was not covered by tests
}
watch.stop();
if (logger.isInfoEnabled()) {
Expand All @@ -138,19 +139,25 @@
return map;
}

Copy link

Copilot AI May 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider adding a Javadoc comment to explain the purpose of buildForNoRequest and describe its parameters, since it encapsulates special-case behavior.

Suggested change
/**
* Builds an {@link ApplicationMap} for scenarios where no request data is available.
* This method ensures that the map is still constructed using the source application,
* even if no nodes are found.
*
* @param source The source application for which the map is being built.
* @param builder The {@link ApplicationMapBuilder} used to construct the map.
* @return The constructed {@link ApplicationMap}.
*/

Copilot uses AI. Check for mistakes.
private ApplicationMap buildForNoRequest(Application source, ApplicationMapBuilder builder) {
// If no nodes are found, we still need to build the map with the source application.
builder.includeServerInfo(newServerGroupListFactory(false));
Copy link

Copilot AI May 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] Using a raw false literal makes the intent unclear; extract this flag into a well-named constant or consider overloading newServerGroupListFactory for readability.

Suggested change
builder.includeServerInfo(newServerGroupListFactory(false));
builder.includeServerInfo(newServerGroupListFactory(USE_STATISTICS_AGENT_STATE_FOR_NO_REQUEST));

Copilot uses AI. Check for mistakes.
return builder.build(source, buildTimeoutMillis);

Check warning on line 145 in web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/MapServiceImpl.java

View check run for this annotation

Codecov / codecov/patch

web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/MapServiceImpl.java#L144-L145

Added lines #L144 - L145 were not covered by tests
}

private ApplicationMapBuilder createApplicationMapBuilder(MapServiceOption option) {
ApplicationMapBuilder builder = applicationMapBuilderFactory.createApplicationMapBuilder(option.getTimeWindow());

final NodeHistogramFactory nodeHistogramFactory = newNodeHistogramFactory(option);
final NodeHistogramFactory nodeHistogramFactory = newNodeHistogramFactory(option.isSimpleResponseHistogram());

Check warning on line 151 in web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/MapServiceImpl.java

View check run for this annotation

Codecov / codecov/patch

web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/MapServiceImpl.java#L151

Added line #L151 was not covered by tests
builder.includeNodeHistogram(nodeHistogramFactory);

final ServerGroupListFactory serverGroupListFactory = newServerGroupListFactory(option);
final ServerGroupListFactory serverGroupListFactory = newServerGroupListFactory(option.isUseStatisticsAgentState());

Check warning on line 154 in web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/MapServiceImpl.java

View check run for this annotation

Codecov / codecov/patch

web/src/main/java/com/navercorp/pinpoint/web/applicationmap/service/MapServiceImpl.java#L154

Added line #L154 was not covered by tests
builder.includeServerInfo(serverGroupListFactory);
return builder;
}

private NodeHistogramFactory newNodeHistogramFactory(MapServiceOption option) {
if (option.isSimpleResponseHistogram()) {
private NodeHistogramFactory newNodeHistogramFactory(boolean isSimpleResponseHistogram) {
if (isSimpleResponseHistogram) {
WasNodeHistogramDataSource dataSource = new MapResponseSimplifiedNodeHistogramDataSource(mapResponseDao);
return new SimplifiedNodeHistogramFactory(dataSource);
} else {
Expand All @@ -159,9 +166,9 @@
}
}

private ServerGroupListFactory newServerGroupListFactory(MapServiceOption option) {
private ServerGroupListFactory newServerGroupListFactory(boolean isUseStatisticsAgentState) {
ServerGroupListDataSource serverGroupListDataSource = serverInstanceDatasourceService.getServerGroupListDataSource();
if (option.isUseStatisticsAgentState()) {
if (isUseStatisticsAgentState) {
return new StatisticsServerGroupListFactory(serverGroupListDataSource);
} else {
return new DefaultServerGroupListFactory(serverGroupListDataSource);
Expand Down