Skip to content

Commit 9131b76

Browse files
committed
feat: improve notifiers
1 parent 0d1a8ec commit 9131b76

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

@@ -28,7 +29,8 @@
2829
import org.springframework.expression.Expression;
2930
import org.springframework.expression.ParserContext;
3031
import org.springframework.expression.spel.standard.SpelExpressionParser;
31-
import org.springframework.expression.spel.support.StandardEvaluationContext;
32+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
33+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
3234
import org.springframework.http.HttpEntity;
3335
import org.springframework.http.HttpHeaders;
3436
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
@@ -24,7 +24,8 @@
2424
import org.springframework.expression.Expression;
2525
import org.springframework.expression.ParserContext;
2626
import org.springframework.expression.spel.standard.SpelExpressionParser;
27-
import org.springframework.expression.spel.support.StandardEvaluationContext;
27+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
28+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
2829
import org.springframework.http.HttpEntity;
2930
import org.springframework.http.HttpHeaders;
3031
import org.springframework.http.MediaType;
@@ -116,8 +117,9 @@ protected String createContent(InstanceEvent event, Instance instance) {
116117
root.put("event", event);
117118
root.put("instance", instance);
118119
root.put("lastStatus", getLastStatus(event.getInstance()));
119-
StandardEvaluationContext context = new StandardEvaluationContext(root);
120-
context.addPropertyAccessor(new MapAccessor());
120+
SimpleEvaluationContext context = SimpleEvaluationContext
121+
.forPropertyAccessors(DataBindingPropertyAccessor.forReadOnlyAccess(), new MapAccessor())
122+
.withRootObject(root).build();
121123
return message.getValue(context, String.class);
122124
}
123125

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
@@ -24,7 +24,8 @@
2424
import org.springframework.expression.Expression;
2525
import org.springframework.expression.ParserContext;
2626
import org.springframework.expression.spel.standard.SpelExpressionParser;
27-
import org.springframework.expression.spel.support.StandardEvaluationContext;
27+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
28+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
2829
import org.springframework.http.HttpEntity;
2930
import org.springframework.http.HttpHeaders;
3031
import org.springframework.http.MediaType;
@@ -95,7 +96,7 @@ protected String buildUrl() {
9596
if (url == null) {
9697
throw new IllegalStateException("'url' must not be null.");
9798
}
98-
return String.format("%s/room/%s/notification?auth_token=%s", url.toString(), roomId, authToken);
99+
return String.format("%s/room/%s/notification?auth_token=%s", url, roomId, authToken);
99100
}
100101

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

@@ -135,49 +137,49 @@ protected String getColor(InstanceEvent event) {
135137
}
136138
}
137139

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

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

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

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

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

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

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

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

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

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

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
@@ -25,7 +25,8 @@
2525
import org.springframework.expression.Expression;
2626
import org.springframework.expression.ParserContext;
2727
import org.springframework.expression.spel.standard.SpelExpressionParser;
28-
import org.springframework.expression.spel.support.StandardEvaluationContext;
28+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
29+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
2930
import org.springframework.http.HttpEntity;
3031
import org.springframework.http.HttpHeaders;
3132
import org.springframework.http.HttpMethod;
@@ -118,56 +119,57 @@ protected String getText(InstanceEvent event, Instance instance) {
118119
root.put("event", event);
119120
root.put("instance", instance);
120121
root.put("lastStatus", getLastStatus(event.getInstance()));
121-
StandardEvaluationContext context = new StandardEvaluationContext(root);
122-
context.addPropertyAccessor(new MapAccessor());
122+
SimpleEvaluationContext context = SimpleEvaluationContext
123+
.forPropertyAccessors(DataBindingPropertyAccessor.forReadOnlyAccess(), new MapAccessor())
124+
.withRootObject(root).build();
123125
return message.getValue(context, String.class);
124126
}
125127

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

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

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

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

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

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

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

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

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

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

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

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
@@ -28,10 +28,12 @@
2828
import org.slf4j.Logger;
2929
import org.slf4j.LoggerFactory;
3030
import org.springframework.context.expression.MapAccessor;
31+
import org.springframework.expression.EvaluationContext;
3132
import org.springframework.expression.Expression;
3233
import org.springframework.expression.ParserContext;
3334
import org.springframework.expression.spel.standard.SpelExpressionParser;
34-
import org.springframework.expression.spel.support.StandardEvaluationContext;
35+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
36+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
3537
import org.springframework.http.HttpEntity;
3638
import org.springframework.http.HttpHeaders;
3739
import org.springframework.http.MediaType;
@@ -140,7 +142,7 @@ public MicrosoftTeamsNotifier(InstanceRepository repository, RestTemplate restTe
140142
@Override
141143
protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
142144
Message message;
143-
StandardEvaluationContext context = createEvaluationContext(event, instance);
145+
EvaluationContext context = createEvaluationContext(event, instance);
144146
if (event instanceof InstanceRegisteredEvent) {
145147
message = getRegisteredMessage(instance, context);
146148
}
@@ -171,23 +173,23 @@ protected boolean shouldNotify(InstanceEvent event, Instance instance) {
171173
|| super.shouldNotify(event, instance);
172174
}
173175

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

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

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

189191
protected Message createMessage(Instance instance, String registeredTitle, String activitySubtitle,
190-
StandardEvaluationContext context) {
192+
EvaluationContext context) {
191193
List<Fact> facts = new ArrayList<>();
192194
facts.add(new Fact(STATUS_KEY, instance.getStatusInfo().getStatus()));
193195
facts.add(new Fact(SERVICE_URL_KEY, instance.getRegistration().getServiceUrl()));
@@ -202,18 +204,18 @@ protected Message createMessage(Instance instance, String registeredTitle, Strin
202204
.themeColor(evaluateExpression(context, themeColor)).sections(singletonList(section)).build();
203205
}
204206

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

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

219221
@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
@@ -24,7 +24,8 @@
2424
import org.springframework.expression.Expression;
2525
import org.springframework.expression.ParserContext;
2626
import org.springframework.expression.spel.standard.SpelExpressionParser;
27-
import org.springframework.expression.spel.support.StandardEvaluationContext;
27+
import org.springframework.expression.spel.support.DataBindingPropertyAccessor;
28+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
2829
import org.springframework.http.HttpEntity;
2930
import org.springframework.http.HttpHeaders;
3031
import org.springframework.http.HttpMethod;
@@ -117,7 +118,7 @@ protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
117118
protected String buildUrl(InstanceEvent event, Instance instance) {
118119
if ((event instanceof InstanceStatusChangedEvent)
119120
&& (StatusInfo.STATUS_UP.equals(((InstanceStatusChangedEvent) event).getStatusInfo().getStatus()))) {
120-
return String.format("%s/%s/close", url.toString(), generateAlias(instance));
121+
return String.format("%s/%s/close", url, generateAlias(instance));
121122
}
122123
return url.toString();
123124
}
@@ -171,8 +172,9 @@ protected String getMessage(InstanceEvent event, Instance instance) {
171172
root.put("event", event);
172173
root.put("instance", instance);
173174
root.put("lastStatus", getLastStatus(event.getInstance()));
174-
StandardEvaluationContext context = new StandardEvaluationContext(root);
175-
context.addPropertyAccessor(new MapAccessor());
175+
SimpleEvaluationContext context = SimpleEvaluationContext
176+
.forPropertyAccessors(DataBindingPropertyAccessor.forReadOnlyAccess(), new MapAccessor())
177+
.withRootObject(root).build();
176178
return description.getValue(context, String.class);
177179
}
178180

@@ -182,15 +184,15 @@ protected String getDescription(InstanceEvent event, Instance instance) {
182184
((InstanceStatusChangedEvent) event).getStatusInfo().getStatus());
183185
}
184186

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

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

0 commit comments

Comments
 (0)