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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy