Commit 60988062 by Nepxion

增加图形化灰度发布功能

parent e57a7669
......@@ -17,6 +17,7 @@ import org.springframework.web.client.RestTemplate;
import com.fasterxml.jackson.core.type.TypeReference;
import com.nepxion.discovery.console.desktop.context.PropertiesContext;
import com.nepxion.discovery.console.desktop.entity.InstanceEntity;
import com.nepxion.discovery.console.desktop.entity.RouterEntity;
import com.nepxion.discovery.console.desktop.serializer.JacksonSerializer;
public class ServiceController {
......@@ -49,6 +50,12 @@ public class ServiceController {
return restTemplate.getForEntity(url, List.class).getBody();
}
public static RouterEntity routes(InstanceEntity instance, String routeServiceIds) {
String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/router/routes";
return restTemplate.postForEntity(url, routeServiceIds, RouterEntity.class).getBody();
}
public static String getUrl() {
String url = PropertiesContext.getProperties().getString("url");
if (!url.endsWith("/")) {
......
package com.nepxion.discovery.console.desktop.entity;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public class RouterEntity implements Serializable {
private static final long serialVersionUID = -4480475963615166799L;
private String serviceId;
private String version;
private String host;
private int port;
private List<RouterEntity> nexts = new ArrayList<RouterEntity>();
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public List<RouterEntity> getNexts() {
return nexts;
}
public void setNexts(List<RouterEntity> nexts) {
this.nexts = nexts;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object object) {
return EqualsBuilder.reflectionEquals(this, object);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
\ No newline at end of file
package com.nepxion.discovery.console.desktop.workspace;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import twaver.BlinkingRule;
import twaver.Element;
import twaver.Generator;
import twaver.TWaverConst;
import java.awt.Color;
import java.util.List;
import javax.swing.Box;
import javax.swing.JToolBar;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.nepxion.cots.twaver.element.TLink;
import com.nepxion.cots.twaver.element.TNode;
import com.nepxion.cots.twaver.graph.TGraphControlBar;
import com.nepxion.cots.twaver.graph.TGraphManager;
import com.nepxion.discovery.console.desktop.entity.RouterEntity;
import com.nepxion.discovery.console.desktop.workspace.topology.AbstractTopology;
import com.nepxion.discovery.console.desktop.workspace.topology.TopologyEntity;
import com.nepxion.discovery.console.desktop.workspace.topology.TopologyEntityType;
import com.nepxion.swing.button.ButtonManager;
import com.nepxion.swing.button.JBasicToggleButton;
public class RouterTopology extends AbstractTopology {
private static final long serialVersionUID = 1L;
private int nodeStartX = 300;
private int nodeStartY = 150;
private int nodeHorizontalGap = 200;
private int nodeVerticalGap = 0;
private TopologyEntity serviceNodeEntity = new TopologyEntity(TopologyEntityType.SERVICE, true, true);
public RouterTopology() {
initializeToolBar();
initializeTopology();
}
private void initializeToolBar() {
JToolBar toolBar = getGraph().getToolbar();
toolBar.addSeparator();
toolBar.add(Box.createHorizontalStrut(5));
ButtonManager.updateUI(toolBar);
}
private void initializeTopology() {
graph.setBlinkingRule(new BlinkingRule() {
public boolean isBodyBlinking(Element element) {
return element.getAlarmState().getHighestNativeAlarmSeverity() != null || element.getClientProperty(TWaverConst.PROPERTYNAME_RENDER_COLOR) != null;
}
public boolean isOutlineBlinking(Element element) {
return element.getAlarmState().getPropagateSeverity() != null || element.getClientProperty(TWaverConst.PROPERTYNAME_STATE_OUTLINE_COLOR) != null;
}
});
graph.setElementStateOutlineColorGenerator(new Generator() {
public Object generate(Object object) {
return null;
}
});
TGraphControlBar graphControlBar = (TGraphControlBar) graph.getControlBarInternalFrame().getContent();
JBasicToggleButton toggleButton = (JBasicToggleButton) graphControlBar.getViewToolBar().getViewOutlook().getComponent(10);
toggleButton.setSelected(true);
TGraphManager.layout(graph);
}
public void route(RouterEntity routerEntity) {
dataBox.clear();
int index = 0;
TNode node = addNode(routerEntity, index);
index++;
route(routerEntity, node, index);
}
private void route(RouterEntity routerEntity, TNode node, int index) {
List<RouterEntity> nexts = routerEntity.getNexts();
if (CollectionUtils.isNotEmpty(nexts)) {
for (RouterEntity next : nexts) {
TNode nextNode = addNode(next, index);
addLink(node, nextNode);
index++;
route(next, nextNode, index);
}
}
}
private String getNodeName(RouterEntity routerEntity) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(routerEntity.getServiceId()).append("\n");
stringBuilder.append(routerEntity.getHost()).append(":").append(routerEntity.getPort());
if (StringUtils.isNotEmpty(routerEntity.getVersion())) {
stringBuilder.append("\n [V").append(routerEntity.getVersion()).append("]");
}
return ButtonManager.getHtmlText(stringBuilder.toString());
}
private TNode addNode(RouterEntity routerEntity, int index) {
String nodeName = getNodeName(routerEntity);
TNode node = createNode(nodeName, serviceNodeEntity, index, nodeStartX, nodeStartY, nodeHorizontalGap, nodeVerticalGap);
node.setUserObject(routerEntity);
dataBox.addElement(node);
return node;
}
private void addLink(TNode fromNode, TNode toNode) {
TLink link = createLink(fromNode, toNode, true);
link.putLinkToArrowColor(Color.yellow);
dataBox.addElement(link);
}
}
\ No newline at end of file
......@@ -37,6 +37,7 @@ import com.nepxion.cots.twaver.element.TNode;
import com.nepxion.cots.twaver.graph.TGraphManager;
import com.nepxion.discovery.console.desktop.controller.ServiceController;
import com.nepxion.discovery.console.desktop.entity.InstanceEntity;
import com.nepxion.discovery.console.desktop.entity.RouterEntity;
import com.nepxion.discovery.console.desktop.icon.ConsoleIconFactory;
import com.nepxion.discovery.console.desktop.locale.ConsoleLocale;
import com.nepxion.discovery.console.desktop.workspace.common.UIUtil;
......@@ -79,6 +80,8 @@ public class ServiceTopology extends AbstractTopology {
private Map<String, List<InstanceEntity>> instanceMap;
private RouterTopology routerTopology;
public ServiceTopology() {
initializeToolBar();
initializeTopology();
......@@ -346,6 +349,19 @@ public class ServiceTopology extends AbstractTopology {
return;
}
InstanceEntity instance = (InstanceEntity) node.getUserObject();
RouterEntity routerEntity = ServiceController.routes(instance, "discovery-springcloud-example-a;discovery-springcloud-example-b;discovery-springcloud-example-c");
if (routerTopology == null) {
routerTopology = new RouterTopology();
routerTopology.setPreferredSize(new Dimension(1200, 900));
}
routerTopology.route(routerEntity);
JBasicOptionPane.showOptionDialog(HandleManager.getFrame(ServiceTopology.this), routerTopology, "路由信息", JBasicOptionPane.DEFAULT_OPTION, JBasicOptionPane.PLAIN_MESSAGE, ConsoleIconFactory.getSwingIcon("banner/navigator.png"), new Object[] { SwingLocale.getString("close") }, null, true);
}
};
......
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