1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.openehealth.ipf.commons.audit.protocol;
18
19 import io.vertx.core.Vertx;
20 import io.vertx.core.buffer.Buffer;
21 import io.vertx.core.buffer.impl.BufferImpl;
22 import io.vertx.core.datagram.DatagramSocket;
23 import io.vertx.core.datagram.DatagramSocketOptions;
24 import org.openehealth.ipf.commons.audit.AuditContext;
25 import org.openehealth.ipf.commons.audit.utils.AuditUtils;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 import java.nio.charset.StandardCharsets;
30
31
32
33
34
35
36
37
38 public class VertxUDPSyslogSenderImpl extends RFC5424Protocol implements AuditTransmissionProtocol {
39
40 private static final Logger LOG = LoggerFactory.getLogger(VertxUDPSyslogSenderImpl.class);
41
42 private final Vertx vertx;
43
44 public VertxUDPSyslogSenderImpl() {
45 this(Vertx.vertx());
46 }
47
48 public VertxUDPSyslogSenderImpl(Vertx vertx) {
49 super(AuditUtils.getLocalHostName(), AuditUtils.getProcessId());
50 this.vertx = vertx;
51 }
52
53 @Override
54 public void send(AuditContext auditContext, String... auditMessages) {
55 DatagramSocketOptions options = new DatagramSocketOptions()
56 .setSendBufferSize(16384);
57 DatagramSocket socket = vertx.createDatagramSocket(options);
58 if (auditMessages != null) {
59 for (String auditMessage : auditMessages) {
60
61
62 byte[] msgBytes = getTransportPayload(auditContext.getSendingApplication(), auditMessage);
63 LOG.debug("Auditing to {}:{}",
64 auditContext.getAuditRepositoryAddress().getHostAddress(),
65 auditContext.getAuditRepositoryPort());
66 LOG.trace("{}", new String(msgBytes, StandardCharsets.UTF_8));
67 Buffer buffer = new BufferImpl().appendBytes(msgBytes);
68
69
70 socket.send(buffer,
71 auditContext.getAuditRepositoryPort(),
72 auditContext.getAuditRepositoryAddress().getHostAddress(),
73 event -> {
74 if (event.failed()) {
75 LOG.warn("Sending Audit Event via UDP failed");
76 }
77 });
78 }
79 }
80 }
81
82 @Override
83 public String getTransportName() {
84 return "NIO-UDP";
85 }
86
87 @Override
88 public void shutdown() {
89 vertx.close();
90 }
91
92
93 }