Skip to content

Commit

Permalink
[pinpoint-apm#11050] NodeHistogram
Browse files Browse the repository at this point in the history
  • Loading branch information
emeroad committed Jun 3, 2024
1 parent e8f0f49 commit 4ab1dc2
Show file tree
Hide file tree
Showing 7 changed files with 135 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.navercorp.pinpoint.web.applicationmap.service.MapServiceOption;
import com.navercorp.pinpoint.web.applicationmap.service.ResponseTimeHistogramService;
import com.navercorp.pinpoint.web.applicationmap.service.ResponseTimeHistogramServiceOption;
import com.navercorp.pinpoint.web.applicationmap.view.NodeHistogramSummaryView;
import com.navercorp.pinpoint.web.component.ApplicationFactory;
import com.navercorp.pinpoint.web.validation.NullOrNotBlank;
import com.navercorp.pinpoint.web.view.ApplicationTimeHistogramViewModel;
Expand Down Expand Up @@ -213,7 +214,7 @@ public ApplicationTimeHistogramViewModel getResponseTimeHistogramData(
}

@PostMapping(value = "/getResponseTimeHistogramDataV2")
public NodeHistogramSummary postResponseTimeHistogramDataV2(
public NodeHistogramSummaryView postResponseTimeHistogramDataV2(
@RequestParam("applicationName") @NotBlank String applicationName,
@RequestParam("serviceTypeCode") Short serviceTypeCode,
@RequestParam("from") @PositiveOrZero long from,
Expand Down Expand Up @@ -242,11 +243,12 @@ public NodeHistogramSummary postResponseTimeHistogramDataV2(
if (useLoadHistogramFormat) {
nodeHistogramSummary.setTimeHistogramFormat(TimeHistogramFormat.V2);
}
return nodeHistogramSummary;
// return nodeHistogramSummary;
return new NodeHistogramSummaryView(nodeHistogramSummary, nodeHistogramSummary.getServerGroupList(), TimeHistogramFormat.V2);
}

@GetMapping(value = "/getResponseTimeHistogramDataV2")
public NodeHistogramSummary getResponseTimeHistogramDataV2(
public NodeHistogramSummaryView getResponseTimeHistogramDataV2(
@RequestParam("applicationName") @NotBlank String applicationName,
@RequestParam("serviceTypeCode") Short serviceTypeCode,
@RequestParam("from") @PositiveOrZero long from,
Expand Down Expand Up @@ -289,7 +291,7 @@ public NodeHistogramSummary getResponseTimeHistogramDataV2(
if (useLoadHistogramFormat) {
nodeHistogramSummary.setTimeHistogramFormat(TimeHistogramFormat.V2);
}
return nodeHistogramSummary;
return new NodeHistogramSummaryView(nodeHistogramSummary, nodeHistogramSummary.getServerGroupList(), TimeHistogramFormat.V2);
}

private List<Application> toApplications(List<String> applicationNames, List<Short> serviceTypeCodes) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,7 @@

package com.navercorp.pinpoint.web.applicationmap.histogram;

import com.navercorp.pinpoint.web.view.TimeSeries.TimeSeriesView;
import com.navercorp.pinpoint.web.view.TimeViewModel;
import com.navercorp.pinpoint.web.view.histogram.TimeHistogramChartBuilder;
import com.navercorp.pinpoint.web.view.histogram.TimeHistogramType;
import com.navercorp.pinpoint.web.vo.Application;

import java.util.Collections;
Expand Down Expand Up @@ -47,10 +44,6 @@ public List<TimeViewModel> createViewModel(TimeHistogramFormat timeHistogramForm
return format.build(application, histogramList);
}

public TimeSeriesView createTimeSeriesView(TimeHistogramType timeHistogramType) {
return new TimeHistogramChartBuilder(histogramList).build(timeHistogramType);
}

public List<TimeHistogram> getHistogramList() {
return histogramList;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,18 @@

package com.navercorp.pinpoint.web.applicationmap.nodes;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationTimeHistogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.NodeHistogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogramFormat;
import com.navercorp.pinpoint.web.view.NodeHistogramSummarySerializer;
import com.navercorp.pinpoint.web.view.TimeSeries.TimeSeriesView;
import com.navercorp.pinpoint.web.view.histogram.HistogramView;
import com.navercorp.pinpoint.web.view.histogram.ServerHistogramView;
import com.navercorp.pinpoint.web.view.histogram.TimeHistogramType;
import com.navercorp.pinpoint.web.vo.Application;

import java.util.List;
import java.util.Objects;

/**
* @author HyunGil Jeong
*/
@JsonSerialize(using = NodeHistogramSummarySerializer.class)
//@JsonSerialize(using = NodeHistogramSummarySerializer.class)
public class NodeHistogramSummary {

private final Application application;
Expand All @@ -48,6 +41,10 @@ public NodeHistogramSummary(Application application, ServerGroupList serverGroup
this.nodeHistogram = Objects.requireNonNull(nodeHistogram, "nodeHistogram");
}

public Application getApplication() {
return application;
}

public ServerGroupList getServerGroupList() {
return serverGroupList;
}
Expand All @@ -60,8 +57,8 @@ public Histogram getHistogram() {
return nodeHistogram.getApplicationHistogram();
}

public TimeSeriesView getNodeTimeHistogram(TimeHistogramType timeHistogramType) {
return nodeHistogram.getApplicationTimeHistogram().createTimeSeriesView(timeHistogramType);
public ApplicationTimeHistogram getApplicationTimeHistogram() {
return nodeHistogram.getApplicationTimeHistogram();
}

public TimeHistogramFormat getTimeHistogramFormat() {
Expand All @@ -72,23 +69,10 @@ public void setTimeHistogramFormat(TimeHistogramFormat timeHistogramFormat) {
this.timeHistogramFormat = timeHistogramFormat;
}

public HistogramView getHistogramView() {
String nodeName = NodeName.toNodeName(application.getName(), application.getServiceType());
Histogram applicationHistogram = nodeHistogram.getApplicationHistogram();
List<TimeHistogram> histogramList = nodeHistogram.getApplicationTimeHistogram().getHistogramList();
return new HistogramView(nodeName, applicationHistogram, histogramList);
}

public ServerHistogramView getAgentHistogramView() {
return new ServerHistogramView(NodeName.of(application), nodeHistogram, serverGroupList);
}

@Override
public String toString() {
final StringBuilder sb = new StringBuilder("NodeHistogramSummary{");
sb.append("serverGroupList=").append(serverGroupList);
sb.append(", nodeHistogram=").append(nodeHistogram);
sb.append('}');
return sb.toString();
return "NodeHistogramSummary{" + "serverGroupList=" + serverGroupList +
", nodeHistogram=" + nodeHistogram +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.navercorp.pinpoint.web.applicationmap.view;

import com.navercorp.pinpoint.common.server.util.json.JsonFields;
import com.navercorp.pinpoint.web.applicationmap.histogram.ApplicationTimeHistogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.NodeHistogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogramFormat;
import com.navercorp.pinpoint.web.applicationmap.nodes.NodeHistogramSummary;
import com.navercorp.pinpoint.web.applicationmap.nodes.ServerGroupList;
import com.navercorp.pinpoint.web.view.TimeViewModel;
import com.navercorp.pinpoint.web.view.id.AgentNameView;
import com.navercorp.pinpoint.web.vo.ResponseTimeStatics;

import java.util.List;
import java.util.Map;
import java.util.Objects;

public class NodeHistogramSummaryView {

private final NodeHistogramSummary nodeHistogramSummary;
private final NodeHistogram nodeHistogram;
private final TimeHistogramFormat format;

private final ServerGroupList serverGroupList;

public NodeHistogramSummaryView(NodeHistogramSummary nodeHistogramSummary, ServerGroupList serverGroupList, TimeHistogramFormat format) {
this.nodeHistogramSummary = Objects.requireNonNull(nodeHistogramSummary, "nodeHistogramSummary");
this.nodeHistogram = nodeHistogramSummary.getNodeHistogram();

this.serverGroupList = Objects.requireNonNull(serverGroupList, "serverGroupList");

this.format = Objects.requireNonNull(format, "format");
}

public long getCurrentServerTime() {
return System.currentTimeMillis();
}

public ServerGroupList getServerList() {
return serverGroupList;
}

public ResponseTimeStatics getResponseStatistics() {
return ResponseTimeStatics.of(nodeHistogram.getApplicationHistogram());
}

public Histogram getHistogram() {
return nodeHistogram.getApplicationHistogram();
}

public Map<String, Histogram> getAgentHistogram() {
return nodeHistogram.getAgentHistogramMap();
}

public Map<String, ResponseTimeStatics> getAgentResponseStatistics() {
return nodeHistogram.getAgentResponseStatisticsMap();
}


public List<TimeViewModel> getTimeSeriesHistogram() {
ApplicationTimeHistogram applicationTimeHistogram = nodeHistogramSummary.getApplicationTimeHistogram();
if (applicationTimeHistogram == null) {
return List.of();
}
return applicationTimeHistogram.createViewModel(format);
}

public JsonFields<AgentNameView, List<TimeViewModel>> getAgentTimeSeriesHistogram() {
return nodeHistogram.getAgentTimeHistogram().createViewModel(format);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,10 @@
import com.navercorp.pinpoint.web.applicationmap.service.ResponseTimeHistogramService;
import com.navercorp.pinpoint.web.applicationmap.service.ResponseTimeHistogramServiceOption;
import com.navercorp.pinpoint.web.component.ApplicationFactory;
import com.navercorp.pinpoint.web.view.TimeSeries.TimeSeriesView;
import com.navercorp.pinpoint.web.view.histogram.HistogramView;
import com.navercorp.pinpoint.web.view.histogram.ServerHistogramView;
import com.navercorp.pinpoint.web.view.histogram.TimeHistogramChart;
import com.navercorp.pinpoint.web.view.histogram.TimeHistogramChartBuilder;
import com.navercorp.pinpoint.web.view.histogram.TimeHistogramType;
import com.navercorp.pinpoint.web.vo.Application;
import com.navercorp.pinpoint.web.vo.ApplicationPair;
Expand Down Expand Up @@ -83,7 +84,7 @@ public ServerHistogramView getWasServerHistogramData(
.setUseStatisticsAgentState(false) //set useStatisticsAgentState to false for agent data
.build();
NodeHistogramSummary nodeHistogramSummary = responseTimeHistogramService.selectNodeHistogramData(option);
return nodeHistogramSummary.getAgentHistogramView();
return ServerHistogramView.view(nodeHistogramSummary);
}

@GetMapping(value = "/getWas/histogram")
Expand Down Expand Up @@ -118,7 +119,7 @@ public ResponseTimeStatics getWasResponseTimeStatistics(
}

@GetMapping(value = "/getWas/{type}/chart")
public TimeSeriesView getWasTimeHistogramChart(
public TimeHistogramChart getWasTimeHistogramChart(
@RequestParam("applicationName") @NotBlank String applicationName,
@RequestParam(value = "serviceTypeCode", required = false) Short serviceTypeCode,
@RequestParam(value = "serviceTypeName", required = false) @NotBlank String serviceTypeName,
Expand All @@ -135,7 +136,9 @@ public TimeSeriesView getWasTimeHistogramChart(
.setUseStatisticsAgentState(true)
.build();
NodeHistogramSummary nodeHistogramSummary = responseTimeHistogramService.selectNodeHistogramData(option);
return nodeHistogramSummary.getNodeTimeHistogram(timeHistogramType);
ApplicationTimeHistogram applicationTimeHistogram = nodeHistogramSummary.getApplicationTimeHistogram();

return chartView(applicationTimeHistogram, timeHistogramType);
}

@GetMapping(value = "/getWas/histogramData")
Expand All @@ -154,7 +157,7 @@ public HistogramView getWasHistogramData(
.setUseStatisticsAgentState(true)
.build();
NodeHistogramSummary nodeHistogramSummary = responseTimeHistogramService.selectNodeHistogramData(option);
return nodeHistogramSummary.getHistogramView();
return HistogramView.view(nodeHistogramSummary);
}

private ResponseTimeHistogramServiceOption.Builder createWasOptionBuilder(Application application, Range range) {
Expand All @@ -181,7 +184,7 @@ public ServerHistogramView postNodeServerHistogramData(
.setUseStatisticsAgentState(false) //set useStatisticsAgentState to false for agent data
.build();
NodeHistogramSummary nodeHistogramSummary = responseTimeHistogramService.selectNodeHistogramData(option);
return nodeHistogramSummary.getAgentHistogramView();
return ServerHistogramView.view(nodeHistogramSummary);
}

@PostMapping(value = "/getNode/histogramData")
Expand All @@ -202,11 +205,11 @@ public HistogramView postNodeHistogramData(
.build();
NodeHistogramSummary nodeHistogramSummary = responseTimeHistogramService.selectNodeHistogramData(option);

return nodeHistogramSummary.getHistogramView();
return HistogramView.view(nodeHistogramSummary);
}

@PostMapping(value = "/getNode/{type}/chart")
public TimeSeriesView postNodeTimeHistogramChart(
public TimeHistogramChart postNodeTimeHistogramChart(
@RequestParam("applicationName") @NotBlank String applicationName,
@RequestParam(value = "serviceTypeCode", required = false) Short serviceTypeCode,
@RequestParam(value = "serviceTypeName", required = false) @NotBlank String serviceTypeName,
Expand All @@ -225,7 +228,14 @@ public TimeSeriesView postNodeTimeHistogramChart(
.build();
NodeHistogramSummary nodeHistogramSummary = responseTimeHistogramService.selectNodeHistogramData(option);

return nodeHistogramSummary.getNodeTimeHistogram(timeHistogramType);
ApplicationTimeHistogram applicationTimeHistogram = nodeHistogramSummary.getApplicationTimeHistogram();

return chartView(applicationTimeHistogram, timeHistogramType);
}

private TimeHistogramChart chartView(ApplicationTimeHistogram applicationTimeHistogram, TimeHistogramType timeHistogramType) {
return new TimeHistogramChartBuilder(applicationTimeHistogram.getHistogramList())
.build(timeHistogramType);
}

@GetMapping(value = "/getLink/histogramData")
Expand Down Expand Up @@ -259,7 +269,7 @@ public HistogramView newHistogramView(LinkHistogramSummary summary) {
}

@GetMapping(value = "/getLink/{type}/chart")
public TimeSeriesView getLinkTimeHistogramChart(
public TimeHistogramChart getLinkTimeHistogramChart(
@RequestParam("fromApplicationName") @NotBlank String fromApplicationName,
@RequestParam(value = "fromServiceTypeCode", required = false) Short fromServiceTypeCode,
@RequestParam(value = "fromServiceTypeName", required = false) @NotBlank String fromServiceTypeName,
Expand All @@ -281,7 +291,8 @@ public TimeSeriesView getLinkTimeHistogramChart(
responseTimeHistogramService.selectLinkHistogramData(fromApplication, toApplication, range);

ApplicationTimeHistogram histogram = linkHistogramSummary.getLinkApplicationTimeHistogram();
return histogram.createTimeSeriesView(timeHistogramType);

return chartView(histogram, timeHistogramType);
}

private ResponseTimeHistogramServiceOption.Builder createOptionBuilder(Application application, Range range,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@
import com.navercorp.pinpoint.web.applicationmap.histogram.ApdexScore;
import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram;
import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogram;
import com.navercorp.pinpoint.web.applicationmap.nodes.NodeHistogramSummary;
import com.navercorp.pinpoint.web.applicationmap.nodes.NodeName;
import com.navercorp.pinpoint.web.view.TimeSeries.TimeSeriesView;
import com.navercorp.pinpoint.web.vo.Application;
import com.navercorp.pinpoint.web.vo.ResponseTimeStatics;

import java.util.List;
Expand Down Expand Up @@ -69,4 +72,15 @@ public TimeSeriesView getLoadStatisticsChart() {
TimeHistogramChartBuilder builder = new TimeHistogramChartBuilder(sortedTimeHistograms);
return builder.build(TimeHistogramType.loadStatistics);
}



public static HistogramView view(NodeHistogramSummary summary) {
Application application = summary.getApplication();
String nodeName = NodeName.toNodeName(application.getName(), application.getServiceType());
Histogram applicationHistogram = summary.getNodeHistogram().getApplicationHistogram();
List<TimeHistogram> histogramList = summary.getNodeHistogram().getApplicationTimeHistogram().getHistogramList();

return new HistogramView(nodeName, applicationHistogram, histogramList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@

import com.fasterxml.jackson.annotation.JsonProperty;
import com.navercorp.pinpoint.web.applicationmap.histogram.NodeHistogram;
import com.navercorp.pinpoint.web.applicationmap.nodes.NodeHistogramSummary;
import com.navercorp.pinpoint.web.applicationmap.nodes.NodeName;
import com.navercorp.pinpoint.web.applicationmap.nodes.ServerGroupList;
import com.navercorp.pinpoint.web.vo.Application;

import java.util.List;
import java.util.Objects;
Expand All @@ -30,6 +32,14 @@ public class ServerHistogramView {
private final List<HistogramView> agentHistogramList;
private final ServerGroupList serverGroupList;

public static ServerHistogramView view(NodeHistogramSummary summary) {
Application application = summary.getApplication();
String key = NodeName.toNodeName(application.getName(), application.getServiceType());
List<HistogramView> agentHistogramList = summary.getNodeHistogram().createAgentHistogramViewList();
ServerGroupList serverGroupList = summary.getServerGroupList();
return new ServerHistogramView(key, agentHistogramList, serverGroupList);
}

public ServerHistogramView(String key, List<HistogramView> agentHistogramList, ServerGroupList serverGroupList) {
this.key = Objects.requireNonNull(key, "key");
this.agentHistogramList = Objects.requireNonNull(agentHistogramList, "agentHistogramList");
Expand Down

0 comments on commit 4ab1dc2

Please sign in to comment.