Skip to content

Commit 224d148

Browse files
committed
feat: improve notifiers
1 parent 21357ee commit 224d148

File tree

9 files changed

+100
-80
lines changed

9 files changed

+100
-80
lines changed

spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/DingTalkNotifier.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package de.codecentric.boot.admin.server.notify;
1818

1919
import java.net.URLEncoder;
20+
import java.nio.charset.StandardCharsets;
2021
import java.util.HashMap;
2122
import java.util.Map;
2223

@@ -29,7 +30,8 @@
2930
import org.springframework.expression.Expression;
3031
import org.springframework.expression.ParserContext;
3132
import org.springframework.expression.spel.standard.SpelExpressionParser;
32-
import org.springframework.expression.spel.support.StandardEvaluationContext;
33+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
34+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
3335
import org.springframework.http.HttpEntity;
3436
import org.springframework.http.HttpHeaders;
3537
import org.springframework.http.MediaType;
@@ -101,17 +103,18 @@ private Object getText(InstanceEvent event, Instance instance) {
101103
root.put("event", event);
102104
root.put("instance", instance);
103105
root.put("lastStatus", getLastStatus(event.getInstance()));
104-
StandardEvaluationContext context = new StandardEvaluationContext(root);
105-
context.addPropertyAccessor(new MapAccessor());
106+
SimpleEvaluationContext context = SimpleEvaluationContext
107+
.forPropertyAccessors(DataBindingPropertyAccessor.forReadOnlyAccess(), new MapAccessor())
108+
.withRootObject(root).build();
106109
return message.getValue(context, String.class);
107110
}
108111

109112
private String getSign(Long timestamp) {
110113
try {
111114
String stringToSign = timestamp + "\n" + secret;
112115
Mac mac = Mac.getInstance("HmacSHA256");
113-
mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
114-
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
116+
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
117+
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
115118
return URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
116119
}
117120
catch (Exception ex) {

spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/DiscordNotifier.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
import org.springframework.expression.Expression;
2727
import org.springframework.expression.ParserContext;
2828
import org.springframework.expression.spel.standard.SpelExpressionParser;
29-
import org.springframework.expression.spel.support.StandardEvaluationContext;
29+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
30+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
3031
import org.springframework.http.HttpEntity;
3132
import org.springframework.http.HttpHeaders;
3233
import org.springframework.http.MediaType;
@@ -117,8 +118,9 @@ protected String createContent(InstanceEvent event, Instance instance) {
117118
root.put("event", event);
118119
root.put("instance", instance);
119120
root.put("lastStatus", getLastStatus(event.getInstance()));
120-
StandardEvaluationContext context = new StandardEvaluationContext(root);
121-
context.addPropertyAccessor(new MapAccessor());
121+
SimpleEvaluationContext context = SimpleEvaluationContext
122+
.forPropertyAccessors(DataBindingPropertyAccessor.forReadOnlyAccess(), new MapAccessor())
123+
.withRootObject(root).build();
122124
return message.getValue(context, String.class);
123125
}
124126

spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/HipchatNotifier.java

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
import org.springframework.expression.Expression;
2727
import org.springframework.expression.ParserContext;
2828
import org.springframework.expression.spel.standard.SpelExpressionParser;
29-
import org.springframework.expression.spel.support.StandardEvaluationContext;
29+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
30+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
3031
import org.springframework.http.HttpEntity;
3132
import org.springframework.http.HttpHeaders;
3233
import org.springframework.http.MediaType;
@@ -96,7 +97,7 @@ protected String buildUrl() {
9697
if (url == null) {
9798
throw new IllegalStateException("'url' must not be null.");
9899
}
99-
return String.format("%s/room/%s/notification?auth_token=%s", url.toString(), roomId, authToken);
100+
return String.format("%s/room/%s/notification?auth_token=%s", url, roomId, authToken);
100101
}
101102

102103
protected HttpEntity<Map<String, Object>> createHipChatNotification(InstanceEvent event, Instance instance) {
@@ -121,8 +122,9 @@ protected String getMessage(InstanceEvent event, Instance instance) {
121122
root.put("event", event);
122123
root.put("instance", instance);
123124
root.put("lastStatus", getLastStatus(event.getInstance()));
124-
StandardEvaluationContext context = new StandardEvaluationContext(root);
125-
context.addPropertyAccessor(new MapAccessor());
125+
SimpleEvaluationContext context = SimpleEvaluationContext
126+
.forPropertyAccessors(DataBindingPropertyAccessor.forReadOnlyAccess(), new MapAccessor())
127+
.withRootObject(root).build();
126128
return description.getValue(context, String.class);
127129
}
128130

@@ -136,49 +138,49 @@ protected String getColor(InstanceEvent event) {
136138
}
137139
}
138140

139-
public void setUrl(@Nullable URI url) {
140-
this.url = url;
141-
}
142-
143141
@Nullable
144142
public URI getUrl() {
145143
return url;
146144
}
147145

148-
public void setAuthToken(@Nullable String authToken) {
149-
this.authToken = authToken;
146+
public void setUrl(@Nullable URI url) {
147+
this.url = url;
150148
}
151149

152150
@Nullable
153151
public String getAuthToken() {
154152
return authToken;
155153
}
156154

157-
public void setRoomId(@Nullable String roomId) {
158-
this.roomId = roomId;
155+
public void setAuthToken(@Nullable String authToken) {
156+
this.authToken = authToken;
159157
}
160158

161159
@Nullable
162160
public String getRoomId() {
163161
return roomId;
164162
}
165163

166-
public void setNotify(boolean notify) {
167-
this.notify = notify;
164+
public void setRoomId(@Nullable String roomId) {
165+
this.roomId = roomId;
168166
}
169167

170168
public boolean isNotify() {
171169
return notify;
172170
}
173171

174-
public void setDescription(String description) {
175-
this.description = parser.parseExpression(description, ParserContext.TEMPLATE_EXPRESSION);
172+
public void setNotify(boolean notify) {
173+
this.notify = notify;
176174
}
177175

178176
public String getDescription() {
179177
return description.getExpressionString();
180178
}
181179

180+
public void setDescription(String description) {
181+
this.description = parser.parseExpression(description, ParserContext.TEMPLATE_EXPRESSION);
182+
}
183+
182184
public void setRestTemplate(RestTemplate restTemplate) {
183185
this.restTemplate = restTemplate;
184186
}

spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/LetsChatNotifier.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
import org.springframework.expression.Expression;
2828
import org.springframework.expression.ParserContext;
2929
import org.springframework.expression.spel.standard.SpelExpressionParser;
30-
import org.springframework.expression.spel.support.StandardEvaluationContext;
30+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
31+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
3132
import org.springframework.http.HttpEntity;
3233
import org.springframework.http.HttpHeaders;
3334
import org.springframework.http.HttpMethod;
@@ -119,56 +120,57 @@ protected String getText(InstanceEvent event, Instance instance) {
119120
root.put("event", event);
120121
root.put("instance", instance);
121122
root.put("lastStatus", getLastStatus(event.getInstance()));
122-
StandardEvaluationContext context = new StandardEvaluationContext(root);
123-
context.addPropertyAccessor(new MapAccessor());
123+
SimpleEvaluationContext context = SimpleEvaluationContext
124+
.forPropertyAccessors(DataBindingPropertyAccessor.forReadOnlyAccess(), new MapAccessor())
125+
.withRootObject(root).build();
124126
return message.getValue(context, String.class);
125127
}
126128

127129
public void setRestTemplate(RestTemplate restTemplate) {
128130
this.restTemplate = restTemplate;
129131
}
130132

131-
public void setUrl(@Nullable URI url) {
132-
this.url = url;
133-
}
134-
135133
@Nullable
136134
public URI getUrl() {
137135
return url;
138136
}
139137

140-
public void setUsername(String username) {
141-
this.username = username;
138+
public void setUrl(@Nullable URI url) {
139+
this.url = url;
142140
}
143141

144142
public String getUsername() {
145143
return username;
146144
}
147145

148-
public void setRoom(@Nullable String room) {
149-
this.room = room;
146+
public void setUsername(String username) {
147+
this.username = username;
150148
}
151149

152150
@Nullable
153151
public String getRoom() {
154152
return room;
155153
}
156154

157-
public void setToken(@Nullable String token) {
158-
this.token = token;
155+
public void setRoom(@Nullable String room) {
156+
this.room = room;
159157
}
160158

161159
@Nullable
162160
public String getToken() {
163161
return token;
164162
}
165163

166-
public void setMessage(String message) {
167-
this.message = parser.parseExpression(message, ParserContext.TEMPLATE_EXPRESSION);
164+
public void setToken(@Nullable String token) {
165+
this.token = token;
168166
}
169167

170168
public String getMessage() {
171169
return message.getExpressionString();
172170
}
173171

172+
public void setMessage(String message) {
173+
this.message = parser.parseExpression(message, ParserContext.TEMPLATE_EXPRESSION);
174+
}
175+
174176
}

spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/MicrosoftTeamsNotifier.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@
3030
import org.slf4j.Logger;
3131
import org.slf4j.LoggerFactory;
3232
import org.springframework.context.expression.MapAccessor;
33+
import org.springframework.expression.EvaluationContext;
3334
import org.springframework.expression.Expression;
3435
import org.springframework.expression.ParserContext;
3536
import org.springframework.expression.spel.standard.SpelExpressionParser;
36-
import org.springframework.expression.spel.support.StandardEvaluationContext;
37+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
38+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
3739
import org.springframework.http.HttpEntity;
3840
import org.springframework.http.HttpHeaders;
3941
import org.springframework.http.MediaType;
@@ -141,7 +143,7 @@ public MicrosoftTeamsNotifier(InstanceRepository repository, RestTemplate restTe
141143
@Override
142144
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
143145
Message message;
144-
StandardEvaluationContext context = createEvaluationContext(event, instance);
146+
EvaluationContext context = createEvaluationContext(event, instance);
145147
if (event instanceof InstanceRegisteredEvent) {
146148
message = getRegisteredMessage(instance, context);
147149
}
@@ -172,23 +174,23 @@ protected boolean shouldNotify(InstanceEvent event, Instance instance) {
172174
|| super.shouldNotify(event, instance);
173175
}
174176

175-
protected Message getDeregisteredMessage(Instance instance, StandardEvaluationContext context) {
177+
protected Message getDeregisteredMessage(Instance instance, EvaluationContext context) {
176178
String activitySubtitle = evaluateExpression(context, deregisterActivitySubtitle);
177179
return createMessage(instance, deRegisteredTitle, activitySubtitle, context);
178180
}
179181

180-
protected Message getRegisteredMessage(Instance instance, StandardEvaluationContext context) {
182+
protected Message getRegisteredMessage(Instance instance, EvaluationContext context) {
181183
String activitySubtitle = evaluateExpression(context, registerActivitySubtitle);
182184
return createMessage(instance, registeredTitle, activitySubtitle, context);
183185
}
184186

185-
protected Message getStatusChangedMessage(Instance instance, StandardEvaluationContext context) {
187+
protected Message getStatusChangedMessage(Instance instance, EvaluationContext context) {
186188
String activitySubtitle = evaluateExpression(context, statusActivitySubtitle);
187189
return createMessage(instance, statusChangedTitle, activitySubtitle, context);
188190
}
189191

190192
protected Message createMessage(Instance instance, String registeredTitle, String activitySubtitle,
191-
StandardEvaluationContext context) {
193+
EvaluationContext context) {
192194
List<Fact> facts = new ArrayList<>();
193195
facts.add(new Fact(STATUS_KEY, instance.getStatusInfo().getStatus()));
194196
facts.add(new Fact(SERVICE_URL_KEY, instance.getRegistration().getServiceUrl()));
@@ -203,18 +205,18 @@ protected Message createMessage(Instance instance, String registeredTitle, Strin
203205
.themeColor(evaluateExpression(context, themeColor)).sections(singletonList(section)).build();
204206
}
205207

206-
protected String evaluateExpression(StandardEvaluationContext context, Expression expression) {
208+
protected String evaluateExpression(EvaluationContext context, Expression expression) {
207209
return Objects.requireNonNull(expression.getValue(context, String.class));
208210
}
209211

210-
protected StandardEvaluationContext createEvaluationContext(InstanceEvent event, Instance instance) {
212+
protected EvaluationContext createEvaluationContext(InstanceEvent event, Instance instance) {
211213
Map<String, Object> root = new HashMap<>();
212214
root.put("event", event);
213215
root.put("instance", instance);
214216
root.put("lastStatus", getLastStatus(event.getInstance()));
215-
StandardEvaluationContext context = new StandardEvaluationContext(root);
216-
context.addPropertyAccessor(new MapAccessor());
217-
return context;
217+
return SimpleEvaluationContext
218+
.forPropertyAccessors(DataBindingPropertyAccessor.forReadOnlyAccess(), new MapAccessor())
219+
.withRootObject(root).build();
218220
}
219221

220222
@Nullable

spring-boot-admin-server/src/main/java/de/codecentric/boot/admin/server/notify/OpsGenieNotifier.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
import org.springframework.expression.Expression;
2727
import org.springframework.expression.ParserContext;
2828
import org.springframework.expression.spel.standard.SpelExpressionParser;
29-
import org.springframework.expression.spel.support.StandardEvaluationContext;
29+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
30+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
3031
import org.springframework.http.HttpEntity;
3132
import org.springframework.http.HttpHeaders;
3233
import org.springframework.http.HttpMethod;
@@ -118,7 +119,7 @@ protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
118119
protected String buildUrl(InstanceEvent event, Instance instance) {
119120
if ((event instanceof InstanceStatusChangedEvent)
120121
&& (StatusInfo.STATUS_UP.equals(((InstanceStatusChangedEvent) event).getStatusInfo().getStatus()))) {
121-
return String.format("%s/%s/close", url.toString(), generateAlias(instance));
122+
return String.format("%s/%s/close", url, generateAlias(instance));
122123
}
123124
return url.toString();
124125
}
@@ -172,8 +173,9 @@ protected String getMessage(InstanceEvent event, Instance instance) {
172173
root.put("event", event);
173174
root.put("instance", instance);
174175
root.put("lastStatus", getLastStatus(event.getInstance()));
175-
StandardEvaluationContext context = new StandardEvaluationContext(root);
176-
context.addPropertyAccessor(new MapAccessor());
176+
SimpleEvaluationContext context = SimpleEvaluationContext
177+
.forPropertyAccessors(DataBindingPropertyAccessor.forReadOnlyAccess(), new MapAccessor())
178+
.withRootObject(root).build();
177179
return description.getValue(context, String.class);
178180
}
179181

@@ -183,15 +185,15 @@ protected String getDescription(InstanceEvent event, Instance instance) {
183185
((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
184186
}
185187

186-
public void setApiKey(@Nullable String apiKey) {
187-
this.apiKey = apiKey;
188-
}
189-
190188
@Nullable
191189
public String getApiKey() {
192190
return apiKey;
193191
}
194192

193+
public void setApiKey(@Nullable String apiKey) {
194+
this.apiKey = apiKey;
195+
}
196+
195197
public void setDescription(String description) {
196198
this.description = parser.parseExpression(description, ParserContext.TEMPLATE_EXPRESSION);
197199
}

0 commit comments

Comments
 (0)