|
2 | 2 |
|
3 | 3 | import com.floreysoft.jmte.Engine; |
4 | 4 | import com.google.common.collect.Lists; |
| 5 | +import java.text.MessageFormat; |
| 6 | +import org.apache.commons.lang.StringUtils; |
5 | 7 | import org.graylog.plugins.teams.client.TeamsClient; |
6 | 8 | import org.graylog.plugins.teams.client.TeamsClientException; |
7 | 9 | import org.graylog.plugins.teams.client.TeamsMessageCard; |
8 | 10 | import org.graylog2.plugin.Message; |
9 | 11 | import org.graylog2.plugin.MessageSummary; |
| 12 | +import org.graylog2.plugin.Tools; |
10 | 13 | import org.graylog2.plugin.alarms.AlertCondition; |
11 | 14 | import org.graylog2.plugin.alarms.callbacks.AlarmCallback; |
12 | 15 | import org.graylog2.plugin.alarms.callbacks.AlarmCallbackConfigurationException; |
|
18 | 21 | import org.graylog2.plugin.configuration.fields.TextField; |
19 | 22 | import org.graylog2.plugin.configuration.fields.TextField.Attribute; |
20 | 23 | import org.graylog2.plugin.streams.Stream; |
| 24 | +import org.joda.time.DateTime; |
21 | 25 | import org.slf4j.Logger; |
22 | 26 | import org.slf4j.LoggerFactory; |
23 | 27 |
|
@@ -180,9 +184,32 @@ private Map<String, Object> getModel(Stream stream, AlertCondition.CheckResult r |
180 | 184 | model.put("alert_condition", result.getTriggeredCondition()); |
181 | 185 | model.put("backlog", backlog); |
182 | 186 | model.put("backlog_size", backlog.size()); |
| 187 | + |
| 188 | + String graylogURL = configuration.getString(TeamsNotificationConfig.GRAYLOG_URL); |
| 189 | + if (!StringUtils.isEmpty(graylogURL)) { |
| 190 | + model.put("stream_url", buildStreamURL(graylogURL, result, stream)); |
| 191 | + } |
183 | 192 | return model; |
184 | 193 | } |
185 | 194 |
|
| 195 | + private String buildStreamURL(String graylogURL, AlertCondition.CheckResult result , Stream stream) { |
| 196 | + if (graylogURL.endsWith("/")) { |
| 197 | + graylogURL = graylogURL.substring(0, graylogURL.length() - 1); |
| 198 | + } |
| 199 | + int timeRange = 5; // default time range (minutes) |
| 200 | + if (Objects.nonNull(result.getTriggeredCondition().getParameters().get("time"))) { |
| 201 | + timeRange = (int) result.getTriggeredCondition().getParameters().get("time"); |
| 202 | + } |
| 203 | + DateTime alertTriggeredAt = result.getTriggeredAt(); |
| 204 | + DateTime alertScanStartAt = alertTriggeredAt.minusMinutes(timeRange); |
| 205 | + String streamURL = MessageFormat.format("{0}/streams/{1}/search?q=%2A&rangetype=absolute&from={2}&to={3}", |
| 206 | + graylogURL, |
| 207 | + stream.getId(), |
| 208 | + Tools.getISO8601String(alertScanStartAt), |
| 209 | + Tools.getISO8601String(alertTriggeredAt)); |
| 210 | + return MessageFormat.format("[{0}]({1})", streamURL, streamURL); |
| 211 | + } |
| 212 | + |
186 | 213 | private void validateURI(Configuration config, String field) throws ConfigurationException { |
187 | 214 | if (!config.stringIsSet(field)) return; |
188 | 215 |
|
|
0 commit comments