Skip to content

Commit eed02a2

Browse files
authored
Merge pull request #63 from ErnestOrt/61-running-process
61 running process
2 parents 4a529aa + d78676e commit eed02a2

File tree

20 files changed

+564
-291
lines changed

20 files changed

+564
-291
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
*.gz
3+
*.log
4+
*.log

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Are you Admin Spring Boot locally? Are you **tired of that set of scripts**? Rel
1313

1414
The aim is to **help during the course of developing an application based on the paradigm of microservices with _Spring Boot_**. How? Easy, thanks to a **comfortable interface** you can **declare new microservices**, **start instances**, **restart** and **kill them**.
1515

16-
![Alt text](https://github.com/ErnestOrt/Trampoline/blob/master/TrampolineUI_3_12.png)
16+
![Alt text](https://github.com/ErnestOrt/Trampoline/blob/master/TrampolineUI_3_13.png)
1717

1818
Also you will be able to:
1919

@@ -25,6 +25,7 @@ Also you will be able to:
2525
* See Git branch and last commit on instances
2626
* Checkout branch, pull code and restart instances with a single mouse click
2727
* Define microservices groups and launch them all with one click
28+
* Monitor microservies deployed on other machines.
2829

2930
### Requirements
3031

TrampolineUI_3_13.png

1.39 MB
Loading

microservice-example-gradle-v2x/service.log

+51-100
Large diffs are not rendered by default.

microservice-example-maven-v2x/service.log

+153-149
Large diffs are not rendered by default.

trampoline/src/main/java/org/ernest/applications/trampoline/collectors/InstanceInfoCollector.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public InstanceGitInfo getInfo(String idInstance) {
3232
info.setCommitOwner("-");
3333
info.setCommitDate("-");
3434
try {
35-
String url = "http://127.0.0.1:" + instance.getPort() + instance.getActuatorPrefix() + "/info";
35+
String url = "http://"+instance.getIp()+":" + instance.getPort() + instance.getActuatorPrefix() + "/info";
3636

3737
log.info("Reading GIT info Spring Boot 1.x for instance id: [{}] using url: [{}]", idInstance, url);
3838
JSONObject infoJson = new JSONObject(new RestTemplate().getForObject(url, String.class));

trampoline/src/main/java/org/ernest/applications/trampoline/collectors/MetricsCollector.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ private void removeNotActiveInstances() {
8080
private Metrics buildMetricsFromJsonResponseV1x(Instance instance) throws JSONException {
8181
Metrics metrics = new Metrics();
8282

83-
String url = "http://127.0.0.1:" + instance.getPort() + instance.getActuatorPrefix() + "/metrics";
83+
String url = "http://"+instance.getIp()+":" + instance.getPort() + instance.getActuatorPrefix() + "/metrics";
8484
log.info("Reading metrics Spring Boot 1.x for instance id: [{}] using url: [{}]", instance.getId(), url);
8585

8686
JSONObject metricsJson = new JSONObject(new RestTemplate().getForObject(url, String.class));
@@ -109,7 +109,7 @@ private Metrics buildMetricsFromJsonResponseV2x(Instance instance) throws JSONEx
109109
}
110110

111111
private Long getValueMetric(Instance instance, String key) throws JSONException {
112-
JSONObject metricsJson = new JSONObject(new RestTemplate().getForObject("http://127.0.0.1:" + instance.getPort() + instance.getActuatorPrefix() + "/metrics/"+key, String.class));
112+
JSONObject metricsJson = new JSONObject(new RestTemplate().getForObject("http://"+instance.getIp()+":" + instance.getPort() + instance.getActuatorPrefix() + "/metrics/"+key, String.class));
113113
return Long.valueOf(metricsJson.getJSONArray("measurements").getJSONObject(0).getInt("value"));
114114
}
115115
}

trampoline/src/main/java/org/ernest/applications/trampoline/collectors/TraceCollector.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ public List<TraceActuator> getTraces(String idInstance) throws CreatingSettingsF
3434

3535
String url;
3636
try {
37-
url = "http://127.0.0.1:" + instance.getPort() + instance.getActuatorPrefix() + "/trace";
37+
url = "http://"+instance.getIp()+":" + instance.getPort() + instance.getActuatorPrefix() + "/trace";
3838
log.info("Reading traces Spring Boot 1.x for instance id: [{}] using url: [{}]", idInstance, url);
3939
traceArrayJson = new JSONArray(new RestTemplate().getForObject(url, String.class));
4040
buildTracesV1x(traces, traceArrayJson);
4141
}catch (Exception e){
42-
url = "http://127.0.0.1:" + instance.getPort() + instance.getActuatorPrefix() + "/httptrace";
42+
url = "http://"+instance.getIp()+":" + instance.getPort() + instance.getActuatorPrefix() + "/httptrace";
4343
log.info("Reading traces Spring Boot 2.x for instance id: [{}] using url: [{}]", idInstance, url);
4444
traceArrayJson = new JSONObject(new RestTemplate().getForObject(url, String.class)).getJSONArray("traces");
4545
buildTracesV2x(traces, traceArrayJson);
@@ -56,7 +56,7 @@ private void buildTracesV2x(List<TraceActuator> traces, JSONArray traceArrayJson
5656
traceActuator.setDate(traceJson.getString("timestamp"));
5757
traceActuator.setMethod(traceJson.getJSONObject("request").getString("method"));
5858
traceActuator.setPath(traceJson.getJSONObject("request").getString("uri"));
59-
traceActuator.setStatus(traceJson.getJSONObject("response").getString("status"));
59+
traceActuator.setStatus(String.valueOf(traceJson.getJSONObject("response").getInt("status")));
6060
traces.add(traceActuator);
6161
}
6262

trampoline/src/main/java/org/ernest/applications/trampoline/controller/InstancesController.java

+8
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class InstancesController {
4141
public String getInstanceView(Model model) {
4242
Ecosystem ecosystem = ecosystemManager.getEcosystem();
4343
model.addAttribute("microservices", ecosystem.getMicroservices());
44+
model.addAttribute("externalInstances", ecosystem.getExternalInstances());
4445
model.addAttribute("instances", ecosystem.getInstances());
4546
model.addAttribute("microservicesgroups", ecosystem.getMicroservicesGroups());
4647

@@ -108,5 +109,12 @@ public boolean checkPort(@RequestParam(value="port") int port) throws CreatingSe
108109
public void startGroup(@RequestParam(value="id") String id) {
109110
ecosystemManager.startGroup(id);
110111
}
112+
113+
@RequestMapping(value= "/addexternalinstance", method = RequestMethod.POST)
114+
@ResponseBody
115+
public void addExternalInstance(@RequestParam(value="id") String id) {
116+
ecosystemManager.addExternalInstance(id);
117+
}
118+
111119
}
112120

trampoline/src/main/java/org/ernest/applications/trampoline/controller/SettingsController.java

+17
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public String getSettingsView(Model model) {
4242

4343
model.addAttribute("microservices", ecosystem.getMicroservices());
4444
model.addAttribute("microservicesgroups", ecosystem.getMicroservicesGroups());
45+
model.addAttribute("externalInstances", ecosystem.getExternalInstances());
4546
model.addAttribute("mavenHomeLocation", ecosystem.getMavenHomeLocation());
4647
model.addAttribute("mavenBinaryLocationMessage", ecosystem.getMavenBinaryLocation() == null ? "Set Maven Binary Location if necessary. Otherwise it will automatically be searched in a bin folder inside your Maven Home Location" : ecosystem.getMavenBinaryLocation());
4748
model.addAttribute("mavenHomeLocationMessage", ecosystem.getMavenHomeLocation() == null ? "Please set maven Home Location. Ex: /Users/ernest/Documents/workspace/tools/apache-maven-3.2.1" : ecosystem.getMavenHomeLocation());
@@ -154,4 +155,20 @@ public void saveGitCred(@RequestParam(value="user") String user,@RequestParam(va
154155
public void cleanGitCred() {
155156
gitManager.cleanCred();
156157
}
158+
159+
@RequestMapping(value= "/setexternalinstance", method = RequestMethod.POST)
160+
@ResponseBody
161+
public void setExternalInstance(@RequestParam(value="name") String name, @RequestParam(value="port") String port,
162+
@RequestParam(value="actuatorPrefix") String actuatorPrefix, @RequestParam(value="ip") String ip) throws CreatingSettingsFolderException, ReadingEcosystemException, CreatingMicroserviceScriptException, SavingEcosystemException {
163+
ecosystemManager.setNewExternalInstance(name, port, actuatorPrefix, ip);
164+
}
165+
166+
@RequestMapping(value= "/removeexternalinstance", method = RequestMethod.POST)
167+
@ResponseBody
168+
public void removeExternalInstance(@RequestParam(value="id") String id) throws CreatingSettingsFolderException, ReadingEcosystemException, SavingEcosystemException{
169+
ecosystemManager.removeExternalInstance(id);
170+
}
171+
172+
173+
157174
}

trampoline/src/main/java/org/ernest/applications/trampoline/entities/Ecosystem.java

+10
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ public class Ecosystem {
99
private String mavenBinaryLocation;
1010
private String mavenHomeLocation;
1111
private List<Microservice> microservices;
12+
private List<ExternalInstance> externalInstances;
1213
private List<Instance> instances;
1314
private List<MicroservicesGroup> microservicesGroups;
1415

1516
public Ecosystem() {
1617
microservices = new ArrayList<>();
1718
instances = new ArrayList<>();
1819
microservicesGroups = new ArrayList<>();
20+
externalInstances = new ArrayList<>();
1921
}
2022

2123
public String getMavenBinaryLocation() {
@@ -65,4 +67,12 @@ public GitCredentials getGitCredentials() {
6567
public void setGitCredentials(GitCredentials gitCredentials) {
6668
this.gitCredentials = gitCredentials;
6769
}
70+
71+
public List<ExternalInstance> getExternalInstances() {
72+
return externalInstances;
73+
}
74+
75+
public void setExternalInstances(List<ExternalInstance> externalInstances) {
76+
this.externalInstances = externalInstances;
77+
}
6878
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.ernest.applications.trampoline.entities;
2+
3+
public class ExternalInstance {
4+
5+
private String id;
6+
private String ip;
7+
private String name;
8+
private String port;
9+
private String actuatorPrefix;
10+
11+
public String getId() {
12+
return id;
13+
}
14+
15+
public void setId(String id) {
16+
this.id = id;
17+
}
18+
19+
public String getIp() {
20+
return ip;
21+
}
22+
23+
public void setIp(String ip) {
24+
this.ip = ip;
25+
}
26+
27+
public String getName() {
28+
return name;
29+
}
30+
31+
public void setName(String name) {
32+
this.name = name;
33+
}
34+
35+
public String getPort() {
36+
return port;
37+
}
38+
39+
public void setPort(String port) {
40+
this.port = port;
41+
}
42+
43+
public String getActuatorPrefix() {
44+
return actuatorPrefix;
45+
}
46+
47+
public void setActuatorPrefix(String actuatorPrefix) {
48+
this.actuatorPrefix = actuatorPrefix;
49+
}
50+
51+
@Override
52+
public String toString() {
53+
return "ExternalInstance{" +
54+
"id='" + id + '\'' +
55+
", ip='" + ip + '\'' +
56+
", name='" + name + '\'' +
57+
", port='" + port + '\'' +
58+
", actuatorPrefix='" + actuatorPrefix + '\'' +
59+
'}';
60+
}
61+
}

trampoline/src/main/java/org/ernest/applications/trampoline/entities/Instance.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,27 @@
33
public class Instance {
44

55
private String id;
6+
private String ip;
67
private String name;
78
private String pomLocation;
89
private String port;
910
private String actuatorPrefix;
1011
private String vmArguments;
1112
private String microserviceId;
12-
13+
1314
public String getId() {
1415
return id;
1516
}
1617
public void setId(String id) {
1718
this.id = id;
1819
}
20+
public String getIp() {
21+
return ip;
22+
}
23+
24+
public void setIp(String ip) {
25+
this.ip = ip;
26+
}
1927
public String getName() {
2028
return name;
2129
}
@@ -59,6 +67,7 @@ public void setMicroserviceId(String microserviceId) {
5967
public String toString() {
6068
return "Instance{" +
6169
"id='" + id + '\'' +
70+
", ip='" + ip + '\'' +
6271
", name='" + name + '\'' +
6372
", pomLocation='" + pomLocation + '\'' +
6473
", port='" + port + '\'' +

trampoline/src/main/java/org/ernest/applications/trampoline/services/EcosystemManager.java

+52-8
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public void startInstance(String id, String port, String vmArguments) throws Cre
101101

102102
Instance instance = new Instance();
103103
instance.setId(UUID.randomUUID().toString());
104+
instance.setIp("127.0.0.1");
104105
instance.setPort(port);
105106
instance.setName(microservice.getName());
106107
instance.setPomLocation(microservice.getPomLocation());
@@ -112,17 +113,20 @@ public void startInstance(String id, String port, String vmArguments) throws Cre
112113
}
113114

114115
public void killInstance(String id) throws CreatingSettingsFolderException, ReadingEcosystemException, SavingEcosystemException, ShuttingDownInstanceException {
115-
log.info("Stopping instances id: [{}]", id);
116+
log.info("Removing instance id: [{}]", id);
116117

117118
Ecosystem ecosystem = fileManager.getEcosystem();
118119
Instance instance = ecosystem.getInstances().stream().filter(i -> i.getId().equals(id)).collect(Collectors.toList()).get(0);
119-
120-
try {
121-
new ClientRequest("http://localhost:" + instance.getPort() + instance.getActuatorPrefix() + "/shutdown").post(String.class);
122-
} catch (Exception e) {
123-
log.error("Stopping instances id: [{}]", id);
120+
121+
if (instance.getIp().equals("127.0.0.1")) {
122+
log.info("Stopping instance id: [{}]", id);
123+
try {
124+
new ClientRequest("http://"+instance.getIp()+":" + instance.getPort() + instance.getActuatorPrefix() + "/shutdown").post(String.class);
125+
} catch (Exception e) {
126+
log.error("Stopping instance id: [{}]", id);
127+
}
124128
}
125-
129+
126130
ecosystem.setInstances(ecosystem.getInstances().stream().filter(i -> !i.getId().equals(id)).collect(Collectors.toList()));
127131
fileManager.saveEcosystem(ecosystem);
128132
}
@@ -139,7 +143,7 @@ public String getStatusInstance(String id) throws CreatingSettingsFolderExceptio
139143

140144
private boolean isDeployed(Instance instance) {
141145
try{
142-
new ClientRequest("http://localhost:" + instance.getPort() + instance.getActuatorPrefix() + "/env").get(String.class);
146+
new ClientRequest("http://"+instance.getIp()+":" + instance.getPort() + instance.getActuatorPrefix() + "/env").get(String.class);
143147
}catch(Exception e){
144148
return false;
145149
}
@@ -209,4 +213,44 @@ public void cleanGitCred() {
209213
ecosystem.setGitCredentials(null);
210214
fileManager.saveEcosystem(ecosystem);
211215
}
216+
217+
public void setNewExternalInstance(String name, String port, String actuatorPrefix, String ip) {
218+
Ecosystem ecosystem = fileManager.getEcosystem();
219+
220+
log.info("Creating new external instance: [{}]", name);
221+
ExternalInstance externalInstance = new ExternalInstance();
222+
externalInstance.setId(UUID.randomUUID().toString());
223+
externalInstance.setName(name);
224+
externalInstance.setIp(ip);
225+
externalInstance.setActuatorPrefix(actuatorPrefix);
226+
externalInstance.setPort(port);
227+
228+
log.info("Saving external instance: [{}]", externalInstance.toString());
229+
ecosystem.getExternalInstances().add(externalInstance);
230+
fileManager.saveEcosystem(ecosystem);
231+
}
232+
233+
public void removeExternalInstance(String idToBeDeleted) {
234+
log.info("Removing microservice id: [{}]", idToBeDeleted);
235+
Ecosystem ecosystem = fileManager.getEcosystem();
236+
ecosystem.setExternalInstances(ecosystem.getExternalInstances().stream().filter(i -> !i.getId().equals(idToBeDeleted)).collect(Collectors.toList()));
237+
fileManager.saveEcosystem(ecosystem);
238+
}
239+
240+
public void addExternalInstance(String id) {
241+
log.info("Adding external instance id: [{}]", id);
242+
Ecosystem ecosystem = fileManager.getEcosystem();
243+
244+
ExternalInstance externalInstance = ecosystem.getExternalInstances().stream().filter(i -> i.getId().equals(id)).findAny().get();
245+
246+
Instance instance = new Instance();
247+
instance.setId(UUID.randomUUID().toString());
248+
instance.setIp(externalInstance.getIp());
249+
instance.setPort(externalInstance.getPort());
250+
instance.setName(externalInstance.getName());
251+
instance.setActuatorPrefix(externalInstance.getActuatorPrefix());
252+
instance.setMicroserviceId(id);
253+
ecosystem.getInstances().add(instance);
254+
fileManager.saveEcosystem(ecosystem);
255+
}
212256
}

0 commit comments

Comments
 (0)