openvidu-server: send webhook events in the background

pull/508/head
pabloFuente 2020-06-08 23:19:15 +02:00
parent 1e03af3ea3
commit 5c4b9c7997
2 changed files with 16 additions and 13 deletions

View File

@ -17,11 +17,6 @@
package io.openvidu.server.webhook; package io.openvidu.server.webhook;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.openvidu.server.cdr.CDREvent; import io.openvidu.server.cdr.CDREvent;
import io.openvidu.server.cdr.CDRLogger; import io.openvidu.server.cdr.CDRLogger;
import io.openvidu.server.config.OpenviduConfig; import io.openvidu.server.config.OpenviduConfig;
@ -30,8 +25,6 @@ import io.openvidu.server.summary.SessionSummary;
public class CDRLoggerWebhook implements CDRLogger { public class CDRLoggerWebhook implements CDRLogger {
private Logger log = LoggerFactory.getLogger(CDRLoggerWebhook.class);
private HttpWebhookSender webhookSender; private HttpWebhookSender webhookSender;
public CDRLoggerWebhook(OpenviduConfig openviduConfig) { public CDRLoggerWebhook(OpenviduConfig openviduConfig) {
@ -41,11 +34,7 @@ public class CDRLoggerWebhook implements CDRLogger {
@Override @Override
public void log(CDREvent event) { public void log(CDREvent event) {
try { this.webhookSender.sendHttpPostCallbackAsync(event);
this.webhookSender.sendHttpPostCallback(event);
} catch (IOException e) {
log.error("Error sending webhook event: {}", e.getMessage());
}
} }
@Override @Override

View File

@ -26,6 +26,8 @@ import java.security.cert.CertificateException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.net.ssl.SSLContext; import javax.net.ssl.SSLContext;
@ -61,6 +63,8 @@ public class HttpWebhookSender {
private List<Header> customHeaders; private List<Header> customHeaders;
private List<CDREventName> events; private List<CDREventName> events;
private ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
public HttpWebhookSender(String httpEndpoint, List<Header> headers, List<CDREventName> events) { public HttpWebhookSender(String httpEndpoint, List<Header> headers, List<CDREventName> events) {
this.httpEndpoint = httpEndpoint; this.httpEndpoint = httpEndpoint;
this.events = events; this.events = events;
@ -102,12 +106,22 @@ public class HttpWebhookSender {
.setSSLContext(sslContext).build(); .setSSLContext(sslContext).build();
} }
public void sendHttpPostCallbackAsync(CDREvent event) {
executor.execute(() -> {
try {
this.sendHttpPostCallbackBlocking(event);
} catch (IOException e) {
log.error("Error sending webhook event: {}", e.getMessage());
}
});
}
/** /**
* @throws IOException If: A) The HTTP connection cannot be established to the * @throws IOException If: A) The HTTP connection cannot be established to the
* endpoint B) The response received from the endpoint is * endpoint B) The response received from the endpoint is
* not 200 * not 200
*/ */
public void sendHttpPostCallback(CDREvent event) throws IOException { public void sendHttpPostCallbackBlocking(CDREvent event) throws IOException {
if (!this.events.contains(event.getEventName())) { if (!this.events.contains(event.getEventName())) {
return; return;