Skip to content

Commit 0a1fe67

Browse files
committed
Merge pull request #26 from qq254963746/develop
lts admin: node list on the website
2 parents 4d54ebe + cb03a8e commit 0a1fe67

File tree

94 files changed

+47488
-191
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+47488
-191
lines changed

lts-admin/pom.xml

Lines changed: 65 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,18 @@
1212
<artifactId>lts-admin</artifactId>
1313

1414
<properties>
15-
<spring.version>3.2.4.RELEASE</spring.version>
15+
<springframework.version>4.1.6.RELEASE</springframework.version>
16+
<jackson.version>1.9.13</jackson.version>
17+
<aspectj.version>1.7.2</aspectj.version>
18+
<jackson-2-version>2.2.3</jackson-2-version>
1619
</properties>
1720

1821
<build>
1922
<plugins>
2023
<plugin>
2124
<groupId>org.apache.tomcat.maven</groupId>
2225
<artifactId>tomcat7-maven-plugin</artifactId>
23-
<version>2.0</version>
26+
<version>2.2</version>
2427
<configuration>
2528
<path>/</path>
2629
<port>8080</port>
@@ -39,39 +42,83 @@
3942
<version>${project.version}</version>
4043
</dependency>
4144
<dependency>
42-
<groupId>org.springframework</groupId>
43-
<artifactId>spring-beans</artifactId>
44-
<version>${spring.version}</version>
45+
<groupId>log4j</groupId>
46+
<artifactId>log4j</artifactId>
4547
</dependency>
4648
<dependency>
47-
<groupId>org.springframework</groupId>
48-
<artifactId>spring-context</artifactId>
49-
<version>${spring.version}</version>
49+
<groupId>com.github.sgroschupf</groupId>
50+
<artifactId>zkclient</artifactId>
5051
</dependency>
52+
5153
<dependency>
52-
<groupId>org.springframework</groupId>
53-
<artifactId>spring-context-support</artifactId>
54-
<version>${spring.version}</version>
54+
<groupId>org.aspectj</groupId>
55+
<artifactId>aspectjrt</artifactId>
56+
<version>${aspectj.version}</version>
5557
</dependency>
5658
<dependency>
57-
<groupId>org.springframework</groupId>
58-
<artifactId>spring-core</artifactId>
59-
<version>${spring.version}</version>
59+
<groupId>org.aspectj</groupId>
60+
<artifactId>aspectjweaver</artifactId>
61+
<version>${aspectj.version}</version>
6062
</dependency>
6163
<dependency>
6264
<groupId>org.springframework</groupId>
63-
<artifactId>spring-aop</artifactId>
64-
<version>${spring.version}</version>
65+
<artifactId>spring-core</artifactId>
66+
<version>${springframework.version}</version>
6567
</dependency>
6668
<dependency>
6769
<groupId>org.springframework</groupId>
6870
<artifactId>spring-web</artifactId>
69-
<version>${spring.version}</version>
71+
<version>${springframework.version}</version>
7072
</dependency>
7173
<dependency>
7274
<groupId>org.springframework</groupId>
7375
<artifactId>spring-webmvc</artifactId>
74-
<version>${spring.version}</version>
76+
<version>${springframework.version}</version>
77+
</dependency>
78+
79+
<dependency>
80+
<groupId>javax.servlet</groupId>
81+
<artifactId>javax.servlet-api</artifactId>
82+
<version>3.1.0</version>
83+
<scope>provided</scope>
84+
</dependency>
85+
<!-- Just the annotations; use this dependency if you want to attach annotations
86+
to classes without connecting them to the code. -->
87+
<dependency>
88+
<groupId>com.fasterxml.jackson.core</groupId>
89+
<artifactId>jackson-annotations</artifactId>
90+
<version>${jackson-2-version}</version>
91+
</dependency>
92+
93+
<!-- databinding; ObjectMapper, JsonNode and related classes are here -->
94+
<dependency>
95+
<groupId>com.fasterxml.jackson.core</groupId>
96+
<artifactId>jackson-databind</artifactId>
97+
<version>${jackson-2-version}</version>
98+
</dependency>
99+
100+
<!-- smile (binary JSON). Other artifacts in this group do other formats. -->
101+
<dependency>
102+
<groupId>com.fasterxml.jackson.dataformat</groupId>
103+
<artifactId>jackson-dataformat-smile</artifactId>
104+
<version>${jackson-2-version}</version>
105+
</dependency>
106+
<!-- JAX-RS provider -->
107+
<dependency>
108+
<groupId>com.fasterxml.jackson.jaxrs</groupId>
109+
<artifactId>jackson-jaxrs-json-provider</artifactId>
110+
<version>${jackson-2-version}</version>
111+
</dependency>
112+
<!-- Support for JAX-B annotations as additional configuration -->
113+
<dependency>
114+
<groupId>com.fasterxml.jackson.module</groupId>
115+
<artifactId>jackson-module-jaxb-annotations</artifactId>
116+
<version>${jackson-2-version}</version>
117+
</dependency>
118+
<dependency>
119+
<groupId>com.fasterxml.jackson.core</groupId>
120+
<artifactId>jackson-core</artifactId>
121+
<version>${jackson-2-version}</version>
75122
</dependency>
76123
</dependencies>
77124
</project>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.lts.job.web.cluster;
2+
3+
import com.lts.job.core.Application;
4+
5+
/**
6+
* Robert HG (254963746@qq.com) on 6/5/15.
7+
*/
8+
public class AdminApplication extends Application{
9+
10+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package com.lts.job.web.cluster;
2+
3+
import com.lts.job.core.Application;
4+
import com.lts.job.core.cluster.Config;
5+
import com.lts.job.core.cluster.Node;
6+
import com.lts.job.core.cluster.NodeType;
7+
import com.lts.job.core.cluster.SubscribedNodeManager;
8+
import com.lts.job.core.registry.NotifyEvent;
9+
import com.lts.job.core.registry.NotifyListener;
10+
import com.lts.job.core.registry.Registry;
11+
import com.lts.job.core.registry.RegistryFactory;
12+
import com.lts.job.core.util.CollectionUtils;
13+
import com.lts.job.core.util.Holder;
14+
import com.lts.job.core.util.StringUtils;
15+
import com.lts.job.web.support.AppConfigurer;
16+
import org.springframework.stereotype.Component;
17+
18+
import java.util.ArrayList;
19+
import java.util.Collection;
20+
import java.util.List;
21+
import java.util.concurrent.ConcurrentHashMap;
22+
23+
/**
24+
* Robert HG (254963746@qq.com) on 6/5/15.
25+
*/
26+
@Component
27+
public class RegistryService {
28+
29+
private final ConcurrentHashMap<String/*clusterName*/, SubscribedNodeManager> NODE_MANAGER_MAP;
30+
31+
public RegistryService() {
32+
this.NODE_MANAGER_MAP = new ConcurrentHashMap<String, SubscribedNodeManager>();
33+
}
34+
35+
public synchronized void register(String clusterName) {
36+
SubscribedNodeManager subscribedNodeManager = NODE_MANAGER_MAP.get(clusterName);
37+
if (subscribedNodeManager != null) {
38+
// already registered
39+
return;
40+
}
41+
42+
final Node node = new Node();
43+
node.setIdentity("LTS_admin_" + StringUtils.generateUUID());
44+
node.addListenNodeType(NodeType.JOB_CLIENT);
45+
node.addListenNodeType(NodeType.TASK_TRACKER);
46+
node.addListenNodeType(NodeType.JOB_TRACKER);
47+
node.setNodeType(NodeType.JOB_ADMIN);
48+
49+
Config config = new Config();
50+
config.setIdentity(node.getIdentity());
51+
config.setNodeType(node.getNodeType());
52+
config.setRegistryAddress(AppConfigurer.getProperties("registry.address"));
53+
config.setClusterName(clusterName);
54+
55+
Application application = new AdminApplication();
56+
application.setConfig(config);
57+
subscribedNodeManager = new SubscribedNodeManager(application);
58+
59+
Registry registry = RegistryFactory.getRegistry(config);
60+
61+
final Holder<SubscribedNodeManager> subscribedNodeManagerHolder =
62+
new Holder<SubscribedNodeManager>(subscribedNodeManager);
63+
64+
registry.subscribe(node, new NotifyListener() {
65+
@Override
66+
public void notify(NotifyEvent event, List<Node> nodes) {
67+
if (CollectionUtils.isEmpty(nodes)) {
68+
return;
69+
}
70+
switch (event) {
71+
case ADD:
72+
subscribedNodeManagerHolder.get().addNodes(nodes);
73+
break;
74+
case REMOVE:
75+
subscribedNodeManagerHolder.get().removeNodes(nodes);
76+
break;
77+
}
78+
}
79+
});
80+
81+
NODE_MANAGER_MAP.put(clusterName, subscribedNodeManagerHolder.get());
82+
}
83+
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();
90+
}
91+
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;
104+
}
105+
}
Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,34 @@
11
package com.lts.job.web.controller;
22

3-
import org.springframework.stereotype.Controller;
3+
import com.lts.job.core.cluster.Node;
4+
import com.lts.job.core.util.CollectionUtils;
5+
import com.lts.job.web.service.NodeService;
6+
import com.lts.job.web.vo.RestfulResponse;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.web.bind.annotation.PathVariable;
9+
import org.springframework.web.bind.annotation.RequestMapping;
10+
import org.springframework.web.bind.annotation.RestController;
11+
12+
import java.util.List;
413

514
/**
615
* @author Robert HG (254963746@qq.com) on 5/11/15.
716
*/
8-
@Controller
9-
public class NodeController extends AbstractController{
17+
@RestController
18+
public class NodeController extends AbstractController {
19+
20+
@Autowired
21+
NodeService nodeService;
22+
23+
@RequestMapping("/node/node-list-get/{clusterName}")
24+
public RestfulResponse getNodeList(@PathVariable String clusterName) {
25+
RestfulResponse response = new RestfulResponse();
1026

27+
List<Node> nodes = nodeService.getNodeList(clusterName);
28+
response.setSuccess(true);
29+
response.setResults(CollectionUtils.sizeOf(nodes));
30+
response.setRows(nodes);
1131

32+
return response;
33+
}
1234
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.lts.job.web.service;
2+
3+
import com.lts.job.core.cluster.Node;
4+
import com.lts.job.core.util.StringUtils;
5+
import com.lts.job.web.cluster.RegistryService;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.stereotype.Component;
8+
9+
import java.util.List;
10+
11+
/**
12+
* Robert HG (254963746@qq.com) on 6/5/15.
13+
*/
14+
@Component
15+
public class NodeService {
16+
17+
@Autowired
18+
RegistryService registryService;
19+
20+
public List<Node> getNodeList(String clusterName) {
21+
22+
registryService.register(clusterName);
23+
24+
if (StringUtils.isNotEmpty(clusterName)) {
25+
return registryService.getAllNodes(clusterName);
26+
} else {
27+
return registryService.getAllNodes();
28+
}
29+
}
30+
31+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.lts.job.web.support;
2+
3+
4+
import com.fasterxml.jackson.annotation.JsonInclude;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
7+
/**
8+
* Robert HG (254963746@qq.com) on 6/5/15.
9+
*/
10+
public class NotNullObjectMapping extends ObjectMapper {
11+
12+
public NotNullObjectMapping() {
13+
super();
14+
setSerializationInclusion(JsonInclude.Include.NON_NULL);
15+
}
16+
}
17+

lts-admin/src/main/java/com/lts/job/web/support/node/NodeManager.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)