Skip to content

Commit

Permalink
[#noissue] Cleanup ResponseTimeHistogramService
Browse files Browse the repository at this point in the history
  • Loading branch information
emeroad committed Jun 11, 2024
1 parent 06e48d7 commit 0235e19
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class StatisticsServerGroupListFactory implements ServerGroupListFactory
private final ServerGroupListDataSource serverGroupListDataSource;

public StatisticsServerGroupListFactory(ServerGroupListDataSource serverGroupListDataSource) {
this.serverGroupListDataSource = serverGroupListDataSource;
this.serverGroupListDataSource = Objects.requireNonNull(serverGroupListDataSource, "serverGroupListDataSource");
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,9 @@ public ResponseTimeHistogramServiceImpl(LinkSelectorFactory linkSelectorFactory,
this.mapResponseDao = Objects.requireNonNull(mapResponseDao, "mapResponseDao");
}

private ServerGroupListFactory createServerGroupListFactory(ResponseTimeHistogramServiceOption option) {
private ServerGroupListFactory createServerGroupListFactory(boolean isUseStatisticsAgentState) {
ServerGroupListDataSource serverGroupListDataSource = serverInstanceDatasourceService.getServerGroupListDataSource();
if (option.isUseStatisticsAgentState()) {
if (isUseStatisticsAgentState) {
return new StatisticsServerGroupListFactory(serverGroupListDataSource);
}
return new DefaultServerGroupListFactory(serverGroupListDataSource);
Expand All @@ -104,72 +104,117 @@ public AgentHistogramList selectResponseTimeHistogramData(Application applicatio

@Override
public NodeHistogramSummary selectNodeHistogramData(ResponseTimeHistogramServiceOption option) {
Node node = new Node(option.getApplication());

Application application = option.getApplication();
ServiceType applicationServiceType = application.getServiceType();

List<Application> sourceApplications = option.getFromApplications();
List<Application> destinationApplications = option.getToApplications();

final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory();
final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option);

if (applicationServiceType.isWas()) {
NodeHistogram nodeHistogram = nodeHistogramFactory.createWasNodeHistogram(option.getApplication(), option.getRange());
node.setNodeHistogram(nodeHistogram);
ServerGroupList serverGroupList = serverGroupListFactory.createWasNodeInstanceList(node, option.getRange().getToInstant());
return new NodeHistogramSummary(application, serverGroupList, nodeHistogram);
return getWasNodeHistogramSummary(option);
} else if (isTerminal(applicationServiceType)) {
if (sourceApplications.isEmpty()) {
return createEmptyNodeHistogramSummary(serverGroupListFactory, option.getApplication(), option.getRange());
}
LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(option.getApplication());
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, option.getRange(), 1, 0);

ServerGroupList serverGroupList = serverGroupListFactory.createEmptyNodeInstanceList();
if (applicationServiceType.isTerminal() || applicationServiceType.isAlias()) {
serverGroupList = serverGroupListFactory.createTerminalNodeInstanceList(node, linkDataDuplexMap);
}

NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, option.getRange());
NodeHistogram nodeHistogram = nodeHistogramFactory.createTerminalNodeHistogram(option.getApplication(), option.getRange(), linkList);
return new NodeHistogramSummary(application, serverGroupList, nodeHistogram);
return getTerminalNodeHistogramSummary(option);
} else if (applicationServiceType.isQueue()) {
if (sourceApplications.isEmpty()) {
//scan callee from queue node to find sourceApplication out of serverMap search bound is possible
return createEmptyNodeHistogramSummary(serverGroupListFactory, option.getApplication(), option.getRange());
}
LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(option.getApplication());
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, option.getRange(), 1, 0);

ServerGroupList serverGroupList = serverGroupListFactory.createQueueNodeInstanceList(node, linkDataDuplexMap);

NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, option.getRange());
NodeHistogram nodeHistogram = nodeHistogramFactory.createQueueNodeHistogram(option.getApplication(), option.getRange(), linkList);
return new NodeHistogramSummary(application, serverGroupList, nodeHistogram);
return getQueueNodeHistogramSummary(option);
} else if (applicationServiceType.isUser()) {
if (destinationApplications.isEmpty()) {
return createEmptyNodeHistogramSummary(serverGroupListFactory, option.getApplication(), option.getRange());
}
LinkDataMapProcessor sourceApplicationFilter = new SourceApplicationFilter(option.getApplication());
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, LinkDataMapProcessor.NO_OP, sourceApplicationFilter);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(destinationApplications, option.getRange(), 0, 1);
return getUserNodeHistogramSummary(option);
} else {
final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState());
Range range = option.getRange();
return createEmptyNodeHistogramSummary(serverGroupListFactory, application, range);
}
}

ServerGroupList serverGroupList = serverGroupListFactory.createUserNodeInstanceList();
private NodeHistogramSummary getUserNodeHistogramSummary(ResponseTimeHistogramServiceOption option) {
Application application = option.getApplication();
Range range = option.getRange();
List<Application> destinationApplications = option.getToApplications();

NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, option.getRange());
NodeHistogram nodeHistogram = nodeHistogramFactory.createUserNodeHistogram(option.getApplication(), option.getRange(), linkList);
return new NodeHistogramSummary(application, serverGroupList, nodeHistogram);
} else {
return createEmptyNodeHistogramSummary(serverGroupListFactory, option.getApplication(), option.getRange());
final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState());
if (destinationApplications.isEmpty()) {
return createEmptyNodeHistogramSummary(serverGroupListFactory, application, range);
}
LinkDataMapProcessor sourceApplicationFilter = new SourceApplicationFilter(application);
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, LinkDataMapProcessor.NO_OP, sourceApplicationFilter);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(destinationApplications, range, 0, 1);

ServerGroupList serverGroupList = serverGroupListFactory.createUserNodeInstanceList();

NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, range);

final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory();
NodeHistogram nodeHistogram = nodeHistogramFactory.createUserNodeHistogram(application, range, linkList);
return new NodeHistogramSummary(application, serverGroupList, nodeHistogram);
}

private NodeHistogramSummary getWasNodeHistogramSummary(ResponseTimeHistogramServiceOption option) {
Application application = option.getApplication();
Range range = option.getRange();

Node node = new Node(application);
final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory();
NodeHistogram nodeHistogram = nodeHistogramFactory.createWasNodeHistogram(application, range);
node.setNodeHistogram(nodeHistogram);
final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState());
ServerGroupList serverGroupList = serverGroupListFactory.createWasNodeInstanceList(node, range.getToInstant());
return new NodeHistogramSummary(application, serverGroupList, nodeHistogram);
}

private NodeHistogramSummary getTerminalNodeHistogramSummary(ResponseTimeHistogramServiceOption option) {
Application application = option.getApplication();
Range range = option.getRange();
ServiceType applicationServiceType = application.getServiceType();

final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState());
List<Application> sourceApplications = option.getFromApplications();
if (sourceApplications.isEmpty()) {
return createEmptyNodeHistogramSummary(serverGroupListFactory, application, range);
}
LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(application);
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, range, 1, 0);

ServerGroupList serverGroupList = serverGroupListFactory.createEmptyNodeInstanceList();
if (applicationServiceType.isTerminal() || applicationServiceType.isAlias()) {
Node node = new Node(application);
serverGroupList = serverGroupListFactory.createTerminalNodeInstanceList(node, linkDataDuplexMap);
}

NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, range);

final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory();
NodeHistogram nodeHistogram = nodeHistogramFactory.createTerminalNodeHistogram(application, range, linkList);
return new NodeHistogramSummary(application, serverGroupList, nodeHistogram);
}


private NodeHistogramSummary getQueueNodeHistogramSummary(ResponseTimeHistogramServiceOption option) {

Application application = option.getApplication();
Range range = option.getRange();

final ServerGroupListFactory serverGroupListFactory = createServerGroupListFactory(option.isUseStatisticsAgentState());
List<Application> sourceApplications = option.getFromApplications();
if (sourceApplications.isEmpty()) {
//scan callee from queue node to find sourceApplication out of serverMap search bound is possible
return createEmptyNodeHistogramSummary(serverGroupListFactory, application, range);
}
LinkDataMapProcessor destinationApplicationFilter = new DestinationApplicationFilter(application);
LinkSelector linkSelector = linkSelectorFactory.createLinkSelector(LinkSelectorType.UNIDIRECTIONAL, destinationApplicationFilter, LinkDataMapProcessor.NO_OP);
LinkDataDuplexMap linkDataDuplexMap = linkSelector.select(sourceApplications, range, 1, 0);

Node node = new Node(application);
ServerGroupList serverGroupList = serverGroupListFactory.createQueueNodeInstanceList(node, linkDataDuplexMap);

NodeList nodeList = NodeListFactory.createNodeList(linkDataDuplexMap);
LinkList linkList = LinkListFactory.createLinkList(nodeList, linkDataDuplexMap, range);

final NodeHistogramFactory nodeHistogramFactory = createNodeHistogramFactory();
NodeHistogram nodeHistogram = nodeHistogramFactory.createQueueNodeHistogram(application, range, linkList);
return new NodeHistogramSummary(application, serverGroupList, nodeHistogram);
}


private boolean isTerminal(ServiceType applicationServiceType) {
return applicationServiceType.isTerminal() || applicationServiceType.isUnknown() || applicationServiceType.isAlias();
}
Expand Down

0 comments on commit 0235e19

Please # to comment.