From 918d3c0b7467d873f48694bbb72079eba3323042 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sat, 23 Jul 2022 15:08:02 +0200 Subject: [PATCH] Monitoring message triggers basic webhook #30 --- .../MobSOSDataProcessingService.java | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/i5/las2peer/services/mobsos/dataProcessing/MobSOSDataProcessingService.java b/app/src/main/java/i5/las2peer/services/mobsos/dataProcessing/MobSOSDataProcessingService.java index 9933237..ce5a838 100644 --- a/app/src/main/java/i5/las2peer/services/mobsos/dataProcessing/MobSOSDataProcessingService.java +++ b/app/src/main/java/i5/las2peer/services/mobsos/dataProcessing/MobSOSDataProcessingService.java @@ -1,6 +1,10 @@ package i5.las2peer.services.mobsos.dataProcessing; import java.io.Serializable; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -129,6 +133,7 @@ private boolean processMessages(MonitoringMessage[] messages) { boolean returnStatement = true; int counter = 0; botMessages = new ArrayList(); + HashMap webhookCalls = new HashMap<>(); for (MonitoringMessage message : messages) { // Happens when a node has sent its last messages if (message == null) { @@ -272,9 +277,19 @@ else if (Math.abs(message.getEvent().getCode()) >= 7000 //} JSONParser p = new JSONParser(JSONParser.MODE_PERMISSIVE); try { - Object jo = p.parse(message.getRemarks()); - if (jo instanceof JSONObject) { - String function = ((JSONObject) jo).getAsString("functionName"); + Object obj = p.parse(message.getRemarks()); + if (obj instanceof JSONObject) { + JSONObject jsonObj = (JSONObject) obj; + + // check if the monitoring message should trigger a webhook call + if(jsonObj.containsKey("webhook")) { + JSONObject webhook = (JSONObject) jsonObj.get("webhook"); + String url = webhook.getAsString("url"); + JSONObject payload = (JSONObject) webhook.get("payload"); + webhookCalls.put(url, payload); + } + + String function = jsonObj.getAsString("functionName"); if (function != null && hasBot() && triggerFunctions.contains(function.toLowerCase())) { BotMessage m = new BotMessage(message.getTimestamp(), message.getEvent(), message.getSourceNode(), message.getSourceAgentId(), @@ -361,6 +376,28 @@ else if (Math.abs(message.getEvent().getCode()) >= 7000 e.printStackTrace(); } } + + // perform webhook calls + if(!webhookCalls.isEmpty()) { + HttpClient client = HttpClient.newHttpClient(); + for (Map.Entry entry : webhookCalls.entrySet()) { + String url = entry.getKey(); + JSONObject payload = entry.getValue(); + + HttpRequest request = HttpRequest.newBuilder() + .uri(URI.create(url)) + .POST(HttpRequest.BodyPublishers.ofString(payload.toJSONString())) + .build(); + + try { + client.send(request, + HttpResponse.BodyHandlers.ofString()); + } catch (Exception e) { + System.out.println("Unable to call webhook"); + } + } + } + System.out.println((messages.length - counter) + "/" + messageCount + " messages were handled."); return returnStatement; }