From 9800a90eabd18711e9c241ea0cb5ab7c3bfabbe8 Mon Sep 17 00:00:00 2001
From: Dominik Sigmund <dominik.sigmund@br.de>
Date: Wed, 13 May 2020 10:22:56 +0200
Subject: [PATCH] udp-datagrams working locally. should woork

---
 README.md                  |  4 ----
 examples/log-to-graylog.js | 18 ++++++++++++++++++
 examples/udp-server.js     | 32 ++++++++++++++++++++++++++++++++
 index.js                   | 21 ++++++---------------
 4 files changed, 56 insertions(+), 19 deletions(-)
 create mode 100644 examples/log-to-graylog.js
 create mode 100644 examples/udp-server.js

diff --git a/README.md b/README.md
index a22814a..945bf0e 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,3 @@ Note: The options Part may be omitted, as all parts are optional, but using the
   loglevel: 'Minimal LogLevel. Default: WARN'
 }
 ```
-
-## Graylog
-
-To use graylog, your graylog-server needs to have an http-input setup.
diff --git a/examples/log-to-graylog.js b/examples/log-to-graylog.js
new file mode 100644
index 0000000..3c3f07f
--- /dev/null
+++ b/examples/log-to-graylog.js
@@ -0,0 +1,18 @@
+const Log = require('../index.js')
+
+let log = new Log({
+  name: 'Sample-Application',
+  hostname: 'test-server',
+  graylog: {
+    active: true,
+    server: 'localhost',
+    port: 9999
+  }
+})
+
+log.info('This is an Information')
+log.notice('This is a Notice')
+log.warn('This is a Warning')
+log.error('This is an Error')
+log.fatal('This is a Fatal Message')
+log.debug('This is a Debug Message')
diff --git a/examples/udp-server.js b/examples/udp-server.js
new file mode 100644
index 0000000..ab9d442
--- /dev/null
+++ b/examples/udp-server.js
@@ -0,0 +1,32 @@
+var udp = require('dgram')
+var server = udp.createSocket('udp4')
+
+// emits when any error occurs
+server.on('error',function(error){
+  console.log('Error: ' + error)
+  server.close()
+})
+
+// emits on new datagram msg
+server.on('message',function(msg,info){
+  console.log('Data received from client : ' + msg.toString())
+  console.log('Received %d bytes from %s:%d\n',msg.length, info.address, info.port)
+})
+
+//emits when socket is ready and listening for datagram msgs
+server.on('listening',function(){
+  var address = server.address()
+  var port = address.port
+  var family = address.family
+  var ipaddr = address.address
+  console.log('Server is listening at port' + port)
+  console.log('Server ip :' + ipaddr)
+  console.log('Server is IP4/IP6 : ' + family)
+});
+
+//emits after the socket is closed using socket.close()
+server.on('close',function(){
+  console.log('Socket is closed !')
+})
+
+server.bind(9999);
\ No newline at end of file
diff --git a/index.js b/index.js
index a74a12a..2565dfc 100644
--- a/index.js
+++ b/index.js
@@ -25,7 +25,8 @@ function Log (options) {
     this.hostname = os.hostname()
   }
   if (this.options.graylog && this.options.graylog.active) {
-    this.http = require('http')
+    this.udp = require('dgram')
+    this.udpclient = this.udp.createSocket('udp4')
   }
   if (this.options.file) {
     this.fs = require('fs')
@@ -126,21 +127,11 @@ function Log (options) {
         facility: this.name,
         level: tag
         })
-      let options = {
-          hostname: this.options.graylog.server,
-          port: this.options.graylog.port,
-          path: '/gelf',
-          method: 'POST',
-          headers: {
-            'Content-Type': 'application/json',
-            'Content-Length': data.length
-          }
+      this.udpclient.send(Buffer.from(data),this.options.graylog.port,this.options.graylog.server,function(error){
+        if(error){
+          console.error(error)
         }
-      var post = this.http.request(options)
-    
-      // post the data
-      post.write(data)
-      post.end()
+      })
     }
     return msg
   }
-- 
GitLab