Commit 5653336b by Nepxion

修改界面

parent 552c8c13
......@@ -54,10 +54,10 @@ public class ServiceController {
});
}
public static Map<String, List<Instance>> getInstanceMap() {
public static Map<String, List<Instance>> getInstanceMap(List<String> groups) {
String url = getUrl() + "console/instance-map";
String result = restTemplate.getForEntity(url, String.class).getBody();
String result = restTemplate.postForEntity(url, groups, String.class).getBody();
return RestUtil.fromJson(restTemplate, result, new TypeReference<Map<String, List<Instance>>>() {
});
......
......@@ -32,12 +32,12 @@ import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.nepxion.cots.twaver.element.TElement;
......@@ -64,9 +64,9 @@ import com.nepxion.swing.action.JSecurityAction;
import com.nepxion.swing.button.ButtonManager;
import com.nepxion.swing.button.JClassicButton;
import com.nepxion.swing.button.JClassicMenuButton;
import com.nepxion.swing.combobox.JBasicComboBox;
import com.nepxion.swing.dialog.JExceptionDialog;
import com.nepxion.swing.dialog.JOptionDialog;
import com.nepxion.swing.element.ElementNode;
import com.nepxion.swing.framework.dockable.JDockable;
import com.nepxion.swing.framework.dockable.JDockableView;
import com.nepxion.swing.handle.HandleManager;
......@@ -83,6 +83,7 @@ import com.nepxion.swing.optionpane.JBasicOptionPane;
import com.nepxion.swing.popupmenu.JBasicPopupMenu;
import com.nepxion.swing.query.JQueryHierarchy;
import com.nepxion.swing.scrollpane.JBasicScrollPane;
import com.nepxion.swing.selector.checkbox.JCheckBoxSelector;
import com.nepxion.swing.tabbedpane.JBasicTabbedPane;
import com.nepxion.swing.textarea.JBasicTextArea;
import com.nepxion.swing.textfield.JBasicTextField;
......@@ -91,8 +92,6 @@ import com.nepxion.swing.textfield.number.JNumberTextField;
public class ServiceTopology extends AbstractTopology {
private static final long serialVersionUID = 1L;
public static final String NO_FILTER = ConsoleLocale.getString("no_service_cluster_filter");
private LocationEntity groupLocationEntity = new LocationEntity(120, 250, 280, 0);
private LocationEntity nodeLocationEntity = new LocationEntity(0, 0, 120, 120);
private TopologyEntity serviceGroupEntity = new TopologyEntity(TopologyEntityType.SERVICE_GROUP, TopologyStyleType.LARGE, true);
......@@ -109,7 +108,6 @@ public class ServiceTopology extends AbstractTopology {
private JBasicRadioButtonMenuItem pushSyncModeRadioButtonMenuItem;
private JBasicRadioButtonMenuItem ruleToConfigCenterRadioButtonMenuItem;
private JBasicRadioButtonMenuItem ruleToServiceRadioButtonMenuItem;
private FilterPanel filterPanel;
private GlobalGrayPanel globalGrayPanel;
private GrayPanel grayPanel;
private JBasicTextArea resultTextArea;
......@@ -117,7 +115,6 @@ public class ServiceTopology extends AbstractTopology {
private LayoutDialog layoutDialog;
private Map<String, List<Instance>> globalInstanceMap;
private String globalFilter;
public ServiceTopology() {
initializeToolBar();
......@@ -243,16 +240,13 @@ public class ServiceTopology extends AbstractTopology {
for (Map.Entry<String, List<Instance>> entry : globalInstanceMap.entrySet()) {
String serviceId = entry.getKey();
List<Instance> instances = entry.getValue();
addService(globalFilter, serviceId, instances);
addService(serviceId, instances);
}
}
private void addService(String filterId, String serviceId, List<Instance> instances) {
private void addService(String serviceId, List<Instance> instances) {
String filter = getValidFilter(instances);
String plugin = getValidPlugin(instances);
if (!StringUtils.equals(filterId, NO_FILTER) && !StringUtils.equals(filterId, filter)) {
return;
}
int count = groupLocationMap.size();
String groupName = getGroupName(serviceId, instances.size(), filter);
......@@ -313,27 +307,6 @@ public class ServiceTopology extends AbstractTopology {
return StringUtils.EMPTY;
}
private Object[] filterInstances(Map<String, List<Instance>> instanceMap) {
List<String> filters = new ArrayList<String>();
for (Map.Entry<String, List<Instance>> entry : instanceMap.entrySet()) {
List<Instance> instances = entry.getValue();
for (Instance instance : instances) {
String plugin = InstanceEntityWrapper.getPlugin(instance);
String filter = InstanceEntityWrapper.getGroup(instance);
if (StringUtils.isNotEmpty(plugin) && !filters.contains(filter)) {
filters.add(filter);
}
}
}
if (filters.contains(StringUtils.EMPTY)) {
filters.remove(StringUtils.EMPTY);
}
filters.add(NO_FILTER);
return filters.toArray();
}
private Object[] filterServices(TNode node, Map<String, List<Instance>> instanceMap) {
Set<String> services = instanceMap.keySet();
List<String> filterServices = new ArrayList<String>();
......@@ -536,35 +509,46 @@ public class ServiceTopology extends AbstractTopology {
JSecurityAction action = new JSecurityAction(ConsoleLocale.getString("show_topology"), ConsoleIconFactory.getSwingIcon("component/ui_16.png"), ConsoleLocale.getString("show_topology")) {
private static final long serialVersionUID = 1L;
@SuppressWarnings("unchecked")
public void execute(ActionEvent e) {
Map<String, List<Instance>> instanceMap = null;
List<String> groups = null;
try {
instanceMap = ServiceController.getInstanceMap();
groups = ServiceController.getGroups();
} catch (Exception ex) {
JExceptionDialog.traceException(HandleManager.getFrame(ServiceTopology.this), ConsoleLocale.getString("get_service_instances_failure"), ex);
JExceptionDialog.traceException(HandleManager.getFrame(ServiceTopology.this), ConsoleLocale.getString("get_service_group_failure"), ex);
return;
}
Object[] filters = filterInstances(instanceMap);
if (filterPanel == null) {
filterPanel = new FilterPanel();
filterPanel.setPreferredSize(new Dimension(320, 60));
List<ElementNode> filterElementNodes = new ArrayList<ElementNode>();
for (String filter : groups) {
filterElementNodes.add(new ElementNode(filter, IconFactory.getSwingIcon("component/file_chooser_16.png"), filter));
}
JCheckBoxSelector checkBoxSelector = new JCheckBoxSelector(HandleManager.getFrame(ServiceTopology.this), ConsoleLocale.getString("service_cluster_filter"), new Dimension(400, 350), filterElementNodes);
checkBoxSelector.setVisible(true);
checkBoxSelector.dispose();
List<String> filters = new ArrayList<String>();
if (checkBoxSelector.isConfirmed()) {
List<ElementNode> selectedFilterElementNodes = checkBoxSelector.getSelectedElementNodes();
for (ElementNode selectedFilterElementNode : selectedFilterElementNodes) {
filters.add(selectedFilterElementNode.getText());
}
}
filterPanel.setFilters(filters);
int selectedValue = JBasicOptionPane.showOptionDialog(HandleManager.getFrame(ServiceTopology.this), filterPanel, ConsoleLocale.getString("service_cluster_filter"), JBasicOptionPane.DEFAULT_OPTION, JBasicOptionPane.PLAIN_MESSAGE, ConsoleIconFactory.getSwingIcon("banner/query.png"), new Object[] { SwingLocale.getString("yes"), SwingLocale.getString("no") }, null, true);
if (selectedValue != 0) {
Map<String, List<Instance>> instanceMap = null;
try {
instanceMap = ServiceController.getInstanceMap(filters);
} catch (Exception ex) {
JExceptionDialog.traceException(HandleManager.getFrame(ServiceTopology.this), ConsoleLocale.getString("get_service_instances_failure"), ex);
return;
}
globalInstanceMap = instanceMap;
globalFilter = filterPanel.getFilter();
String title = ConsoleLocale.getString("title_service_cluster_gray_release");
if (!StringUtils.equals(globalFilter, NO_FILTER)) {
title += " [" + globalFilter + "]";
}
String title = ConsoleLocale.getString("title_service_cluster_gray_release") + " " + (CollectionUtils.isNotEmpty(filters) ? filters : StringUtils.EMPTY);
background.setTitle(title);
showTopology();
......@@ -745,29 +729,6 @@ public class ServiceTopology extends AbstractTopology {
return action;
}
private class FilterPanel extends JPanel {
private static final long serialVersionUID = 1L;
private JBasicComboBox filterComboBox;
public FilterPanel() {
filterComboBox = new JBasicComboBox();
setLayout(new FiledLayout(FiledLayout.COLUMN, FiledLayout.FULL, 5));
add(filterComboBox);
add(new JLabel(NO_FILTER + " - " + ConsoleLocale.getString("description_no_service_cluster_filter")));
}
@SuppressWarnings("unchecked")
public void setFilters(Object[] filters) {
filterComboBox.setModel(new DefaultComboBoxModel<>(filters));
}
public String getFilter() {
return filterComboBox.getSelectedItem().toString();
}
}
private class GlobalGrayPanel extends JQueryHierarchy {
private static final long serialVersionUID = 1L;
......
......@@ -18,9 +18,7 @@ rule_to_config_center=规则推送到远程配置中心
rule_to_service=规则推送到服务或者服务集群
title_service_cluster_gray_release=服务集群灰度发布
service_cluster_filter=服务集群选取
no_service_cluster_filter=全部服务集群
description_no_service_cluster_filter=便于执行跨服务集群灰度发布
service_cluster_filter=服务集群组过滤
title_service_gray_router=服务灰度路由
service_list=服务列表
......
......@@ -18,9 +18,7 @@ rule_to_config_center=\u89c4\u5219\u63a8\u9001\u5230\u8fdc\u7a0b\u914d\u7f6e\u4e
rule_to_service=\u89c4\u5219\u63a8\u9001\u5230\u670d\u52a1\u6216\u8005\u670d\u52a1\u96c6\u7fa4
title_service_cluster_gray_release=\u670d\u52a1\u96c6\u7fa4\u7070\u5ea6\u53d1\u5e03
service_cluster_filter=\u670d\u52a1\u96c6\u7fa4\u9009\u53d6
no_service_cluster_filter=\u5168\u90e8\u670d\u52a1\u96c6\u7fa4
description_no_service_cluster_filter=\u4fbf\u4e8e\u6267\u884c\u8de8\u670d\u52a1\u96c6\u7fa4\u7070\u5ea6\u53d1\u5e03
service_cluster_filter=\u670d\u52a1\u96c6\u7fa4\u7ec4\u8fc7\u6ee4
title_service_gray_router=\u670d\u52a1\u7070\u5ea6\u8def\u7531
service_list=\u670d\u52a1\u5217\u8868
......
......@@ -18,6 +18,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -72,7 +73,7 @@ public class ConsoleEndpoint {
}
@RequestMapping(path = "/groups", method = RequestMethod.GET)
@ApiOperation(value = "获取服务注册中心的服务所在的组列表", notes = "", response = List.class, httpMethod = "GET")
@ApiOperation(value = "获取服务注册中心的服务组名列表", notes = "", response = List.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public List<String> groups() {
......@@ -80,7 +81,7 @@ public class ConsoleEndpoint {
}
@RequestMapping(path = "/services", method = RequestMethod.GET)
@ApiOperation(value = "获取服务注册中心的服务列表", notes = "", response = List.class, httpMethod = "GET")
@ApiOperation(value = "获取服务注册中心的服务列表", notes = "", response = List.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public List<String> services() {
......@@ -88,7 +89,7 @@ public class ConsoleEndpoint {
}
@RequestMapping(path = "/instances/{serviceId}", method = RequestMethod.GET)
@ApiOperation(value = "获取服务注册中心服务的实例列表", notes = "", response = List.class, httpMethod = "GET")
@ApiOperation(value = "获取服务注册中心的服务实例列表", notes = "", response = List.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public List<ServiceInstance> instances(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId) {
......@@ -96,19 +97,19 @@ public class ConsoleEndpoint {
}
@RequestMapping(path = "/instance-list/{serviceId}", method = RequestMethod.GET)
@ApiOperation(value = "获取服务注册中心服务的实例列表(精简数据)", notes = "", response = List.class, httpMethod = "GET")
@ApiOperation(value = "获取服务注册中心的服务实例列表(精简数据)", notes = "", response = List.class, httpMethod = "GET")
@ResponseBody
@ManagedOperation
public List<InstanceEntity> instanceList(@PathVariable(value = "serviceId") @ApiParam(value = "服务名", required = true) String serviceId) {
return getInstanceList(serviceId);
}
@RequestMapping(path = "/instance-map", method = RequestMethod.GET)
@ApiOperation(value = "获取服务注册中心的服务和实例的Map(精简数据)", notes = "", response = Map.class, httpMethod = "GET")
@RequestMapping(path = "/instance-map", method = RequestMethod.POST)
@ApiOperation(value = "获取服务注册中心的服务实例的Map(精简数据)", notes = "服务组名列表", response = Map.class, httpMethod = "POST")
@ResponseBody
@ManagedOperation
public Map<String, List<InstanceEntity>> instanceMap() {
return getInstanceMap();
public Map<String, List<InstanceEntity>> instanceMap(@RequestBody @ApiParam(value = "服务组名列表", required = true) List<String> groups) {
return getInstanceMap(groups);
}
@RequestMapping(path = "/remote-config/update/{group}/{serviceId}", method = RequestMethod.POST)
......@@ -262,12 +263,27 @@ public class ConsoleEndpoint {
return instanceEntityList;
}
public Map<String, List<InstanceEntity>> getInstanceMap() {
public Map<String, List<InstanceEntity>> getInstanceMap(List<String> groups) {
List<String> services = getServices();
Map<String, List<InstanceEntity>> instanceMap = new LinkedHashMap<String, List<InstanceEntity>>(services.size());
for (String service : services) {
List<InstanceEntity> instanceEntityList = getInstanceList(service);
instanceMap.put(service, instanceEntityList);
if (CollectionUtils.isNotEmpty(groups)) {
for (InstanceEntity instance : instanceEntityList) {
String plugin = InstanceEntityWrapper.getPlugin(instance);
String group = InstanceEntityWrapper.getGroup(instance);
if (StringUtils.isNotEmpty(plugin) && groups.contains(group)) {
List<InstanceEntity> instanceList = instanceMap.get(service);
if (instanceList == null) {
instanceList = new ArrayList<InstanceEntity>();
instanceMap.put(service, instanceList);
}
instanceList.add(instance);
}
}
} else {
instanceMap.put(service, instanceEntityList);
}
}
return instanceMap;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment