Skip to content

Commit feeb0a8

Browse files
author
胡贵
committed
lts admin: 完成 WEB 管理后台 节点的subscribe ,展示 搜索
1 parent cb03a8e commit feeb0a8

32 files changed

+1097
-338
lines changed

lts-admin/pom.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,13 @@
8282
<version>3.1.0</version>
8383
<scope>provided</scope>
8484
</dependency>
85+
86+
<dependency>
87+
<groupId>javax.servlet</groupId>
88+
<artifactId>jstl</artifactId>
89+
<version>1.2</version>
90+
</dependency>
91+
8592
<!-- Just the annotations; use this dependency if you want to attach annotations
8693
to classes without connecting them to the code. -->
8794
<dependency>
@@ -120,5 +127,13 @@
120127
<artifactId>jackson-core</artifactId>
121128
<version>${jackson-2-version}</version>
122129
</dependency>
130+
<dependency>
131+
<groupId>commons-dbutils</groupId>
132+
<artifactId>commons-dbutils</artifactId>
133+
</dependency>
134+
<dependency>
135+
<groupId>org.hsqldb</groupId>
136+
<artifactId>hsqldb</artifactId>
137+
</dependency>
123138
</dependencies>
124139
</project>

lts-admin/src/main/java/com/lts/job/web/cluster/RegistryService.java

Lines changed: 17 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,39 @@
44
import com.lts.job.core.cluster.Config;
55
import com.lts.job.core.cluster.Node;
66
import com.lts.job.core.cluster.NodeType;
7-
import com.lts.job.core.cluster.SubscribedNodeManager;
87
import com.lts.job.core.registry.NotifyEvent;
98
import com.lts.job.core.registry.NotifyListener;
109
import com.lts.job.core.registry.Registry;
1110
import com.lts.job.core.registry.RegistryFactory;
1211
import com.lts.job.core.util.CollectionUtils;
13-
import com.lts.job.core.util.Holder;
12+
import com.lts.job.core.util.ConcurrentHashSet;
1413
import com.lts.job.core.util.StringUtils;
14+
import com.lts.job.web.request.NodeRequest;
1515
import com.lts.job.web.support.AppConfigurer;
16+
import com.lts.job.web.support.db.NodeMemDB;
1617
import org.springframework.stereotype.Component;
1718

1819
import java.util.ArrayList;
19-
import java.util.Collection;
2020
import java.util.List;
21-
import java.util.concurrent.ConcurrentHashMap;
2221

2322
/**
2423
* Robert HG (254963746@qq.com) on 6/5/15.
2524
*/
2625
@Component
2726
public class RegistryService {
2827

29-
private final ConcurrentHashMap<String/*clusterName*/, SubscribedNodeManager> NODE_MANAGER_MAP;
28+
private final ConcurrentHashSet<String/*clusterName*/> map;
29+
30+
private NodeMemDB nodeMemDB;
3031

3132
public RegistryService() {
32-
this.NODE_MANAGER_MAP = new ConcurrentHashMap<String, SubscribedNodeManager>();
33+
this.map = new ConcurrentHashSet<String>();
34+
this.nodeMemDB = new NodeMemDB();
3335
}
3436

3537
public synchronized void register(String clusterName) {
36-
SubscribedNodeManager subscribedNodeManager = NODE_MANAGER_MAP.get(clusterName);
37-
if (subscribedNodeManager != null) {
38-
// already registered
38+
39+
if (map.contains(clusterName)) {
3940
return;
4041
}
4142

@@ -44,7 +45,6 @@ public synchronized void register(String clusterName) {
4445
node.addListenNodeType(NodeType.JOB_CLIENT);
4546
node.addListenNodeType(NodeType.TASK_TRACKER);
4647
node.addListenNodeType(NodeType.JOB_TRACKER);
47-
node.setNodeType(NodeType.JOB_ADMIN);
4848

4949
Config config = new Config();
5050
config.setIdentity(node.getIdentity());
@@ -54,13 +54,9 @@ public synchronized void register(String clusterName) {
5454

5555
Application application = new AdminApplication();
5656
application.setConfig(config);
57-
subscribedNodeManager = new SubscribedNodeManager(application);
5857

5958
Registry registry = RegistryFactory.getRegistry(config);
6059

61-
final Holder<SubscribedNodeManager> subscribedNodeManagerHolder =
62-
new Holder<SubscribedNodeManager>(subscribedNodeManager);
63-
6460
registry.subscribe(node, new NotifyListener() {
6561
@Override
6662
public void notify(NotifyEvent event, List<Node> nodes) {
@@ -69,37 +65,23 @@ public void notify(NotifyEvent event, List<Node> nodes) {
6965
}
7066
switch (event) {
7167
case ADD:
72-
subscribedNodeManagerHolder.get().addNodes(nodes);
68+
nodeMemDB.addNode(nodes);
7369
break;
7470
case REMOVE:
75-
subscribedNodeManagerHolder.get().removeNodes(nodes);
71+
nodeMemDB.removeNode(nodes);
7672
break;
7773
}
7874
}
7975
});
8076

81-
NODE_MANAGER_MAP.put(clusterName, subscribedNodeManagerHolder.get());
77+
map.add(clusterName);
8278
}
8379

84-
public List<Node> getAllNodes(String clusterName) {
85-
SubscribedNodeManager subscribedNodeManager = NODE_MANAGER_MAP.get(clusterName);
86-
if (subscribedNodeManager == null) {
87-
return new ArrayList<Node>(0);
88-
}
89-
return subscribedNodeManager.getNodeList();
80+
public List<String> getAllClusterNames() {
81+
return new ArrayList<String>(map.list());
9082
}
9183

92-
public List<Node> getAllNodes() {
93-
List<Node> result = new ArrayList<Node>();
94-
Collection<SubscribedNodeManager> subscribedNodeManagers = NODE_MANAGER_MAP.values();
95-
if (CollectionUtils.isNotEmpty(subscribedNodeManagers)) {
96-
for (SubscribedNodeManager subscribedNodeManager : subscribedNodeManagers) {
97-
List<Node> nodes = subscribedNodeManager.getNodeList();
98-
if (CollectionUtils.isNotEmpty(nodes)) {
99-
result.addAll(nodes);
100-
}
101-
}
102-
}
103-
return result;
84+
public List<Node> getNodes(NodeRequest request) {
85+
return nodeMemDB.search(request);
10486
}
10587
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,22 @@
11
package com.lts.job.web.controller;
22

3+
import com.lts.job.web.support.DateEditor;
4+
import org.springframework.web.bind.ServletRequestDataBinder;
5+
import org.springframework.web.bind.annotation.InitBinder;
6+
7+
import javax.servlet.http.HttpServletRequest;
8+
import java.util.Date;
9+
310
/**
411
* @author Robert HG (254963746@qq.com) on 5/9/15.
512
*/
613
public class AbstractController {
714

15+
@InitBinder
16+
protected void initBinder(HttpServletRequest request,
17+
ServletRequestDataBinder binder) throws Exception {
18+
//对于需要转换为Date类型的属性,使用DateEditor进行处理
19+
binder.registerCustomEditor(Date.class, new DateEditor());
20+
}
821

922
}

lts-admin/src/main/java/com/lts/job/web/controller/NodeController.java

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.lts.job.web.controller.api;
2+
3+
import com.lts.job.core.cluster.Node;
4+
import com.lts.job.core.util.CollectionUtils;
5+
import com.lts.job.core.util.StringUtils;
6+
import com.lts.job.web.cluster.RegistryService;
7+
import com.lts.job.web.controller.AbstractController;
8+
import com.lts.job.web.request.NodeRequest;
9+
import com.lts.job.web.vo.RestfulResponse;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.web.bind.annotation.RequestMapping;
12+
import org.springframework.web.bind.annotation.RestController;
13+
14+
import java.util.List;
15+
16+
/**
17+
* @author Robert HG (254963746@qq.com) on 5/11/15.
18+
*/
19+
@RestController
20+
@RequestMapping("/node")
21+
public class NodeApiController extends AbstractController {
22+
23+
@Autowired
24+
RegistryService registryService;
25+
26+
@RequestMapping("node-list-get")
27+
public RestfulResponse getNodeList(NodeRequest request) {
28+
RestfulResponse response = new RestfulResponse();
29+
30+
List<Node> nodes = registryService.getNodes(request);
31+
32+
response.setSuccess(true);
33+
response.setResults(CollectionUtils.sizeOf(nodes));
34+
response.setRows(nodes);
35+
36+
return response;
37+
}
38+
39+
@RequestMapping("node-cluster-register")
40+
public RestfulResponse registerClusterNameSub(NodeRequest request) {
41+
RestfulResponse response = new RestfulResponse();
42+
43+
if (StringUtils.isEmpty(request.getClusterName())) {
44+
response.setSuccess(false);
45+
response.setMsg("clusterName can not be null");
46+
return response;
47+
}
48+
registryService.register(request.getClusterName());
49+
response.setSuccess(true);
50+
return response;
51+
}
52+
53+
@RequestMapping("node-cluster-register-get")
54+
public RestfulResponse getAllRegisterClusterName() {
55+
RestfulResponse response = new RestfulResponse();
56+
List<String> clusterNames = registryService.getAllClusterNames();
57+
response.setSuccess(true);
58+
response.setResults(CollectionUtils.sizeOf(clusterNames));
59+
response.setRows(clusterNames);
60+
return response;
61+
}
62+
63+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.lts.job.web.controller.ui;
2+
3+
import com.lts.job.web.cluster.RegistryService;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.stereotype.Controller;
6+
import org.springframework.ui.Model;
7+
import org.springframework.web.bind.annotation.RequestMapping;
8+
9+
import java.util.List;
10+
11+
/**
12+
* @author Robert HG (254963746@qq.com) on 6/6/15.
13+
*/
14+
@Controller
15+
public class UIController {
16+
17+
@Autowired
18+
RegistryService registryService;
19+
20+
@RequestMapping("node/node-manager")
21+
public String nodeManagerUI(Model model) {
22+
List<String> clusterNames = registryService.getAllClusterNames();
23+
model.addAttribute("clusterNames", clusterNames);
24+
return "node-manager";
25+
}
26+
27+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package com.lts.job.web.request;
2+
3+
import com.lts.job.core.cluster.NodeType;
4+
5+
import java.util.Date;
6+
7+
/**
8+
* @author Robert HG (254963746@qq.com) on 6/6/15.
9+
*/
10+
public class NodeRequest extends PageRequest {
11+
12+
private String clusterName;
13+
private String identity;
14+
private String ip;
15+
private String nodeGroup;
16+
private NodeType nodeType;
17+
private Boolean available;
18+
private Date startDate;
19+
private Date endDate;
20+
21+
public String getNodeGroup() {
22+
return nodeGroup;
23+
}
24+
25+
public void setNodeGroup(String nodeGroup) {
26+
this.nodeGroup = nodeGroup;
27+
}
28+
29+
public String getClusterName() {
30+
return clusterName;
31+
}
32+
33+
public void setClusterName(String clusterName) {
34+
this.clusterName = clusterName;
35+
}
36+
37+
public String getIdentity() {
38+
return identity;
39+
}
40+
41+
public void setIdentity(String identity) {
42+
this.identity = identity;
43+
}
44+
45+
public String getIp() {
46+
return ip;
47+
}
48+
49+
public void setIp(String ip) {
50+
this.ip = ip;
51+
}
52+
53+
public NodeType getNodeType() {
54+
return nodeType;
55+
}
56+
57+
public void setNodeType(NodeType nodeType) {
58+
this.nodeType = nodeType;
59+
}
60+
61+
public Boolean getAvailable() {
62+
return available;
63+
}
64+
65+
public void setAvailable(Boolean available) {
66+
this.available = available;
67+
}
68+
69+
public Date getStartDate() {
70+
return startDate;
71+
}
72+
73+
public void setStartDate(Date startDate) {
74+
this.startDate = startDate;
75+
}
76+
77+
public Date getEndDate() {
78+
return endDate;
79+
}
80+
81+
public void setEndDate(Date endDate) {
82+
this.endDate = endDate;
83+
}
84+
}

0 commit comments

Comments
 (0)