Skip to content

Commit ea5578f

Browse files
authored
Merge pull request #6 from hidapple/bugfix/support-stream_url
Support stream_url when GraylogURL is specified
2 parents 3b539bd + 5e732eb commit ea5578f

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>org.graylog.plugins</groupId>
88
<artifactId>graylog-plugin-teams</artifactId>
9-
<version>1.1.0</version>
9+
<version>1.1.1</version>
1010
<packaging>jar</packaging>
1111

1212
<name>${project.artifactId}</name>

src/main/java/org/graylog/plugins/teams/alerts/TeamsNotification.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22

33
import com.floreysoft.jmte.Engine;
44
import com.google.common.collect.Lists;
5+
import java.text.MessageFormat;
6+
import org.apache.commons.lang.StringUtils;
57
import org.graylog.plugins.teams.client.TeamsClient;
68
import org.graylog.plugins.teams.client.TeamsClientException;
79
import org.graylog.plugins.teams.client.TeamsMessageCard;
810
import org.graylog2.plugin.Message;
911
import org.graylog2.plugin.MessageSummary;
12+
import org.graylog2.plugin.Tools;
1013
import org.graylog2.plugin.alarms.AlertCondition;
1114
import org.graylog2.plugin.alarms.callbacks.AlarmCallback;
1215
import org.graylog2.plugin.alarms.callbacks.AlarmCallbackConfigurationException;
@@ -18,6 +21,7 @@
1821
import org.graylog2.plugin.configuration.fields.TextField;
1922
import org.graylog2.plugin.configuration.fields.TextField.Attribute;
2023
import org.graylog2.plugin.streams.Stream;
24+
import org.joda.time.DateTime;
2125
import org.slf4j.Logger;
2226
import org.slf4j.LoggerFactory;
2327

@@ -180,9 +184,32 @@ private Map<String, Object> getModel(Stream stream, AlertCondition.CheckResult r
180184
model.put("alert_condition", result.getTriggeredCondition());
181185
model.put("backlog", backlog);
182186
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+
}
183192
return model;
184193
}
185194

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+
186213
private void validateURI(Configuration config, String field) throws ConfigurationException {
187214
if (!config.stringIsSet(field)) return;
188215

0 commit comments

Comments
 (0)