@contrast/agent 4.5.2 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/assess/policy/propagators.json +20 -0
- package/lib/assess/policy/signatures.json +10 -0
- package/lib/core/config/options.js +3 -2
- package/lib/core/stacktrace.js +2 -1
- package/lib/hooks/frameworks/base.js +8 -2
- package/lib/hooks/frameworks/http.js +23 -16
- package/lib/hooks/frameworks/http2.js +73 -0
- package/lib/hooks/frameworks/index.js +8 -3
- package/lib/hooks/http.js +112 -128
- package/lib/hooks/require.js +16 -22
- package/lib/instrumentation.js +0 -3
- package/package.json +12 -15
- package/lib/hooks/frameworks/https.js +0 -42
- package/node_modules/bindings/LICENSE.md +0 -22
- package/node_modules/bindings/README.md +0 -98
- package/node_modules/bindings/bindings.js +0 -221
- package/node_modules/bindings/package.json +0 -32
- package/node_modules/file-uri-to-path/.npmignore +0 -1
- package/node_modules/file-uri-to-path/.travis.yml +0 -30
- package/node_modules/file-uri-to-path/History.md +0 -21
- package/node_modules/file-uri-to-path/LICENSE +0 -20
- package/node_modules/file-uri-to-path/README.md +0 -74
- package/node_modules/file-uri-to-path/index.d.ts +0 -2
- package/node_modules/file-uri-to-path/index.js +0 -66
- package/node_modules/file-uri-to-path/package.json +0 -36
- package/node_modules/file-uri-to-path/test/test.js +0 -24
- package/node_modules/file-uri-to-path/test/tests.json +0 -13
- package/node_modules/glossy/LICENSE +0 -19
- package/node_modules/glossy/README.md +0 -129
- package/node_modules/glossy/index.js +0 -12
- package/node_modules/glossy/lib/glossy/parse.js +0 -520
- package/node_modules/glossy/lib/glossy/produce.js +0 -459
- package/node_modules/glossy/package.json +0 -47
- package/node_modules/glossy/test/decide.js +0 -7
- package/node_modules/glossy/test/decode_pri.js +0 -24
- package/node_modules/glossy/test/parse_3164.js +0 -104
- package/node_modules/glossy/test/parse_5424.js +0 -106
- package/node_modules/glossy/test/parse_5848.js +0 -40
- package/node_modules/glossy/test/parse_8601.js +0 -14
- package/node_modules/glossy/test/parse_rfc3339.js +0 -9
- package/node_modules/glossy/test/produce.js +0 -162
- package/node_modules/glossy/test/runner.js +0 -40
- package/node_modules/glossy/test/structure_data.js +0 -24
- package/node_modules/nan/CHANGELOG.md +0 -537
- package/node_modules/nan/LICENSE.md +0 -13
- package/node_modules/nan/README.md +0 -455
- package/node_modules/nan/doc/asyncworker.md +0 -146
- package/node_modules/nan/doc/buffers.md +0 -54
- package/node_modules/nan/doc/callback.md +0 -76
- package/node_modules/nan/doc/converters.md +0 -41
- package/node_modules/nan/doc/errors.md +0 -226
- package/node_modules/nan/doc/json.md +0 -62
- package/node_modules/nan/doc/maybe_types.md +0 -583
- package/node_modules/nan/doc/methods.md +0 -664
- package/node_modules/nan/doc/new.md +0 -147
- package/node_modules/nan/doc/node_misc.md +0 -123
- package/node_modules/nan/doc/object_wrappers.md +0 -263
- package/node_modules/nan/doc/persistent.md +0 -296
- package/node_modules/nan/doc/scopes.md +0 -73
- package/node_modules/nan/doc/script.md +0 -38
- package/node_modules/nan/doc/string_bytes.md +0 -62
- package/node_modules/nan/doc/v8_internals.md +0 -199
- package/node_modules/nan/doc/v8_misc.md +0 -85
- package/node_modules/nan/include_dirs.js +0 -1
- package/node_modules/nan/nan.h +0 -2898
- package/node_modules/nan/nan_callbacks.h +0 -88
- package/node_modules/nan/nan_callbacks_12_inl.h +0 -514
- package/node_modules/nan/nan_callbacks_pre_12_inl.h +0 -520
- package/node_modules/nan/nan_converters.h +0 -72
- package/node_modules/nan/nan_converters_43_inl.h +0 -68
- package/node_modules/nan/nan_converters_pre_43_inl.h +0 -42
- package/node_modules/nan/nan_define_own_property_helper.h +0 -29
- package/node_modules/nan/nan_implementation_12_inl.h +0 -430
- package/node_modules/nan/nan_implementation_pre_12_inl.h +0 -263
- package/node_modules/nan/nan_json.h +0 -166
- package/node_modules/nan/nan_maybe_43_inl.h +0 -356
- package/node_modules/nan/nan_maybe_pre_43_inl.h +0 -268
- package/node_modules/nan/nan_new.h +0 -340
- package/node_modules/nan/nan_object_wrap.h +0 -156
- package/node_modules/nan/nan_persistent_12_inl.h +0 -132
- package/node_modules/nan/nan_persistent_pre_12_inl.h +0 -242
- package/node_modules/nan/nan_private.h +0 -73
- package/node_modules/nan/nan_string_bytes.h +0 -305
- package/node_modules/nan/nan_typedarray_contents.h +0 -96
- package/node_modules/nan/nan_weak.h +0 -437
- package/node_modules/nan/package.json +0 -41
- package/node_modules/nan/tools/1to2.js +0 -412
- package/node_modules/nan/tools/README.md +0 -14
- package/node_modules/nan/tools/package.json +0 -19
- package/node_modules/unix-dgram/LICENSE +0 -13
- package/node_modules/unix-dgram/README.md +0 -107
- package/node_modules/unix-dgram/binding.gyp +0 -20
- package/node_modules/unix-dgram/build/Makefile +0 -324
- package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram/src/unix_dgram.o.d +0 -58
- package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram.node.d +0 -1
- package/node_modules/unix-dgram/build/Release/.deps/Release/unix_dgram.node.d +0 -1
- package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram/src/unix_dgram.o +0 -0
- package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram.node +0 -0
- package/node_modules/unix-dgram/build/Release/unix_dgram.node +0 -0
- package/node_modules/unix-dgram/build/binding.Makefile +0 -6
- package/node_modules/unix-dgram/build/config.gypi +0 -213
- package/node_modules/unix-dgram/build/unix_dgram.target.mk +0 -159
- package/node_modules/unix-dgram/lib/unix_dgram.js +0 -168
- package/node_modules/unix-dgram/package.json +0 -36
- package/node_modules/unix-dgram/src/unix_dgram.cc +0 -404
- package/node_modules/unix-dgram/src/win_dummy.cc +0 -7
- package/node_modules/unix-dgram/test/test-connect-callback.js +0 -68
- package/node_modules/unix-dgram/test/test-connect.js +0 -53
- package/node_modules/unix-dgram/test/test-dgram-unix.js +0 -58
- package/node_modules/unix-dgram/test/test-send-error.js +0 -26
- package/node_modules/winston-syslog/.eslintrc +0 -7
- package/node_modules/winston-syslog/.travis.yml +0 -14
- package/node_modules/winston-syslog/CHANGELOG.md +0 -9
- package/node_modules/winston-syslog/LICENSE +0 -20
- package/node_modules/winston-syslog/README.md +0 -135
- package/node_modules/winston-syslog/lib/utils.js +0 -26
- package/node_modules/winston-syslog/lib/winston-syslog.js +0 -385
- package/node_modules/winston-syslog/package.json +0 -56
- package/node_modules/winston-syslog/test/format-test.js +0 -122
- package/node_modules/winston-syslog/test/syslog-test.js +0 -95
- package/node_modules/winston-syslog/test/unix-connect-test.js +0 -133
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
# winston-syslog
|
|
2
|
-
|
|
3
|
-
A Syslog transport for [winston][0].
|
|
4
|
-
|
|
5
|
-
[](https://www.npmjs.com/package/winston-syslog)[](https://npmcharts.com/compare/winston-syslog?minimal=true)[](https://travis-ci.org/winstonjs/winston-syslog)[](https://david-dm.org/winstonjs/winston-syslog)
|
|
8
|
-
|
|
9
|
-
[](https://nodei.co/npm/winston-syslog/)
|
|
10
|
-
|
|
11
|
-
## Requirements
|
|
12
|
-
|
|
13
|
-
* winston >= 3.0.0
|
|
14
|
-
|
|
15
|
-
## Installation
|
|
16
|
-
|
|
17
|
-
### Installing npm (node package manager)
|
|
18
|
-
|
|
19
|
-
``` bash
|
|
20
|
-
$ curl http://npmjs.org/install.sh | sh
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
### Installing winston-syslog
|
|
24
|
-
|
|
25
|
-
``` bash
|
|
26
|
-
$ npm install winston
|
|
27
|
-
$ npm install winston-syslog
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## Motivation
|
|
31
|
-
`tldr;?`: To break the [winston][0] codebase into small modules that work together.
|
|
32
|
-
|
|
33
|
-
The [winston][0] codebase has been growing significantly with contributions and other logging transports. This is **awesome**. However, taking a ton of additional dependencies just to do something simple like logging to the Console and a File is overkill.
|
|
34
|
-
|
|
35
|
-
## Usage
|
|
36
|
-
To use the Syslog transport in [winston][0], you simply need to require it and then either add it to an existing [winston][0] logger or pass an instance to a new [winston][0] logger:
|
|
37
|
-
|
|
38
|
-
``` js
|
|
39
|
-
const winston = require('winston');
|
|
40
|
-
|
|
41
|
-
//
|
|
42
|
-
// Requiring `winston-syslog` will expose
|
|
43
|
-
// `winston.transports.Syslog`
|
|
44
|
-
//
|
|
45
|
-
require('winston-syslog').Syslog;
|
|
46
|
-
|
|
47
|
-
winston.add(new winston.transports.Syslog(options));
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
In addition to the options accepted by the syslog (compliant with [RFC 3164][1] and [RFC 5424][2]), the Riak transport also accepts the following options. It is worth noting that the riak-js debug option is set to *false* by default:
|
|
51
|
-
|
|
52
|
-
* __host:__ The host running syslogd, defaults to localhost.
|
|
53
|
-
* __port:__ The port on the host that syslog is running on, defaults to syslogd's default port.
|
|
54
|
-
* __protocol:__ The network protocol to log over (e.g. `tcp4`, `udp4`, `unix`, `unix-connect`, etc).
|
|
55
|
-
* __path:__ The path to the syslog dgram socket (i.e. `/dev/log` or `/var/run/syslog` for OS X).
|
|
56
|
-
* __pid:__ PID of the process that log messages are coming from (Default `process.pid`).
|
|
57
|
-
* __facility:__ Syslog facility to use (Default: `local0`).
|
|
58
|
-
* __localhost:__ Host to indicate that log messages are coming from (Default: `localhost`).
|
|
59
|
-
* __type:__ The type of the syslog protocol to use (Default: `BSD`, also valid: `5424`).
|
|
60
|
-
* __app_name:__ The name of the application (Default: `process.title`).
|
|
61
|
-
* __eol:__ The end of line character to be added to the end of the message (Default: Message without modifications).
|
|
62
|
-
|
|
63
|
-
*Metadata:* Logged as string compiled by [glossy][3].
|
|
64
|
-
|
|
65
|
-
## Log Levels
|
|
66
|
-
Because syslog only allows a subset of the levels available in [winston][0], levels that do not match will be ignored. Therefore, in order to use `winston-syslog` effectively, you should indicate to [winston][0] that you want to use the syslog levels:
|
|
67
|
-
|
|
68
|
-
``` js
|
|
69
|
-
const winston = require('winston');
|
|
70
|
-
const logger = winston.createLogger({
|
|
71
|
-
levels: winston.config.syslog.levels,
|
|
72
|
-
transports: [
|
|
73
|
-
new winston.transports.Syslog()
|
|
74
|
-
]
|
|
75
|
-
});
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
The `Syslog` transport will only log to the level that are available in the syslog protocol. These are (in increasing order of severity):
|
|
79
|
-
|
|
80
|
-
* debug
|
|
81
|
-
* info
|
|
82
|
-
* notice
|
|
83
|
-
* warning
|
|
84
|
-
* error
|
|
85
|
-
* crit
|
|
86
|
-
* alert
|
|
87
|
-
* emerg
|
|
88
|
-
|
|
89
|
-
## Syslog Configuration
|
|
90
|
-
|
|
91
|
-
You will have to configure your syslog server to accept TCP connections.
|
|
92
|
-
This is usually done in `/etc/syslog-ng.conf`. Let's say you have an app called `fnord`,
|
|
93
|
-
the configuration would look something like this:
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
source tcp_s {
|
|
97
|
-
tcp(ip(0.0.0.0) port(514) max-connections(256));
|
|
98
|
-
};
|
|
99
|
-
destination fnord_d {
|
|
100
|
-
file("/var/log/fnord.log");
|
|
101
|
-
};
|
|
102
|
-
log { source(tcp_s); destination(fnord_d); };
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
If you have multiple apps which need to log via TCP, you can specify filters, as such:
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
filter fnord_f { program("fnord"); };
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Then modify the log statement to read:
|
|
112
|
-
|
|
113
|
-
```
|
|
114
|
-
log { source(tcp_s); filter(fnord_f); destination(fnord_d); };
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Now if you have another app, called `bnord`, create similar `destination` and `filter` configurations for it, and specify a new log statement, with the same `source`:
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
log { source(tcp_s); filter(bnord_f); destination(bnord_d); };
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
For this to work, you have to make sure you set the `process.title` variable in your node app.
|
|
124
|
-
|
|
125
|
-
``` js
|
|
126
|
-
process.title = 'fnord';
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
#### Author: [Charlie Robbins](http://blog.nodejitsu.com)
|
|
130
|
-
#### Contributors: [Squeeks](https://github.com/squeeks)
|
|
131
|
-
|
|
132
|
-
[0]: https://github.com/indexzero/winston
|
|
133
|
-
[1]: http://www.ietf.org/rfc/rfc3164.txt
|
|
134
|
-
[2]: http://tools.ietf.org/html/rfc5424
|
|
135
|
-
[3]: https://github.com/squeeks/glossy
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
exports.parseProtocol = function parseProtocol(protocol) {
|
|
4
|
-
switch (protocol) {
|
|
5
|
-
case 'unix':
|
|
6
|
-
case 'unix-connect':
|
|
7
|
-
return { type: 'unix', family: null, isDgram: true };
|
|
8
|
-
|
|
9
|
-
case 'udp':
|
|
10
|
-
case 'udp4':
|
|
11
|
-
return { type: 'udp', family: 4, isDgram: true };
|
|
12
|
-
|
|
13
|
-
case 'udp6':
|
|
14
|
-
return { type: 'udp', family: 6, isDgram: true };
|
|
15
|
-
|
|
16
|
-
case 'tcp':
|
|
17
|
-
case 'tcp4':
|
|
18
|
-
return { type: 'tcp', family: 4 };
|
|
19
|
-
|
|
20
|
-
case 'tcp6':
|
|
21
|
-
return { type: 'tcp', family: 6 };
|
|
22
|
-
|
|
23
|
-
default:
|
|
24
|
-
throw new Error('Invalid syslog protocol: ' + protocol);
|
|
25
|
-
}
|
|
26
|
-
};
|
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* syslog.js: Transport for logging to a remote syslog consumer
|
|
3
|
-
*
|
|
4
|
-
* (C) 2011 Squeeks and Charlie Robbins
|
|
5
|
-
* MIT LICENCE
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const dgram = require('dgram');
|
|
10
|
-
const net = require('net');
|
|
11
|
-
const utils = require('./utils');
|
|
12
|
-
const glossy = require('glossy');
|
|
13
|
-
const winston = require('winston');
|
|
14
|
-
const Transport = require('winston-transport');
|
|
15
|
-
const { MESSAGE, LEVEL } = require('triple-beam');
|
|
16
|
-
|
|
17
|
-
// Ensure we have the correct winston here.
|
|
18
|
-
if (Number(winston.version.split('.')[0]) < 3) {
|
|
19
|
-
throw new Error('Winston-syslog requires winston >= 3.0.0');
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const levels = Object.keys({
|
|
23
|
-
debug: 0,
|
|
24
|
-
info: 1,
|
|
25
|
-
notice: 2,
|
|
26
|
-
warning: 3,
|
|
27
|
-
error: 4,
|
|
28
|
-
crit: 5,
|
|
29
|
-
alert: 6,
|
|
30
|
-
emerg: 7
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
//
|
|
34
|
-
// ### function Syslog (options)
|
|
35
|
-
// #### @options {Object} Options for this instance.
|
|
36
|
-
// Constructor function for the Syslog Transport capable of sending
|
|
37
|
-
// RFC 3164 and RFC 5424 compliant messages.
|
|
38
|
-
//
|
|
39
|
-
class Syslog extends Transport {
|
|
40
|
-
//
|
|
41
|
-
// Expose the name of this Transport on the prototype
|
|
42
|
-
//
|
|
43
|
-
get name() {
|
|
44
|
-
return 'syslog';
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
constructor(options = {}) {
|
|
48
|
-
//
|
|
49
|
-
// Inherit from `winston-transport`.
|
|
50
|
-
//
|
|
51
|
-
super(options);
|
|
52
|
-
|
|
53
|
-
//
|
|
54
|
-
// Setup connection state
|
|
55
|
-
//
|
|
56
|
-
this.connected = false;
|
|
57
|
-
this.congested = false;
|
|
58
|
-
this.retries = 0;
|
|
59
|
-
this.queue = [];
|
|
60
|
-
this.inFlight = 0;
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
-
// Merge the options for the target Syslog server.
|
|
64
|
-
//
|
|
65
|
-
this.setOptions(options);
|
|
66
|
-
|
|
67
|
-
//
|
|
68
|
-
// Setup our Syslog and network members for later use.
|
|
69
|
-
//
|
|
70
|
-
this.socket = null;
|
|
71
|
-
this.producer = new glossy.Produce({
|
|
72
|
-
type: this.type,
|
|
73
|
-
appName: this.appName,
|
|
74
|
-
pid: this.pid,
|
|
75
|
-
facility: this.facility
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
setOptions(options) {
|
|
80
|
-
this.host = options.host || 'localhost';
|
|
81
|
-
this.port = options.port || 514;
|
|
82
|
-
this.path = options.path || null;
|
|
83
|
-
this.protocol = options.protocol || 'udp4';
|
|
84
|
-
this.endOfLine = options.eol;
|
|
85
|
-
|
|
86
|
-
this.parseProtocol(this.protocol);
|
|
87
|
-
|
|
88
|
-
//
|
|
89
|
-
// Merge the default message options.
|
|
90
|
-
//
|
|
91
|
-
this.localhost = typeof options.localhost !== 'undefined' ? options.localhost : 'localhost';
|
|
92
|
-
this.type = options.type || 'BSD';
|
|
93
|
-
this.facility = options.facility || 'local0';
|
|
94
|
-
this.pid = options.pid || process.pid;
|
|
95
|
-
this.appName = options.appName || options.app_name || process.title;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
parseProtocol(protocol = this.protocol) {
|
|
99
|
-
const parsedProtocol = utils.parseProtocol(protocol);
|
|
100
|
-
|
|
101
|
-
this.protocolType = parsedProtocol.type;
|
|
102
|
-
this.protocolFamily = parsedProtocol.family;
|
|
103
|
-
this.isDgram = parsedProtocol.isDgram;
|
|
104
|
-
|
|
105
|
-
if (this.protocolType === 'unix' && !this.path) {
|
|
106
|
-
throw new Error('`options.path` is required on unix dgram sockets.');
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
//
|
|
111
|
-
// ### function log (info, callback)
|
|
112
|
-
// #### @info {object} All relevant log information
|
|
113
|
-
// #### @callback {function} Continuation to respond to when complete.
|
|
114
|
-
// Core logging method exposed to Winston. Logs the `msg` and optional
|
|
115
|
-
// metadata, `meta`, to the specified `level`.
|
|
116
|
-
//
|
|
117
|
-
log(info, callback) {
|
|
118
|
-
if (!~levels.indexOf(info[LEVEL])) {
|
|
119
|
-
return callback(new Error('Cannot log unknown syslog level: ' + info[LEVEL]));
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const output = info[MESSAGE];
|
|
123
|
-
|
|
124
|
-
const syslogMsg = this.producer.produce({
|
|
125
|
-
severity: info[LEVEL],
|
|
126
|
-
host: this.localhost,
|
|
127
|
-
date: new Date(),
|
|
128
|
-
message: this.endOfLine ? output + this.endOfLine : output
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
// Attempt to connect to the socket
|
|
133
|
-
//
|
|
134
|
-
this.connect((err) => {
|
|
135
|
-
if (err) {
|
|
136
|
-
//
|
|
137
|
-
// If there was an error enqueue the message
|
|
138
|
-
//
|
|
139
|
-
this.queue.push(syslogMsg);
|
|
140
|
-
|
|
141
|
-
return callback(err);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
//
|
|
145
|
-
// On any error writing to the socket, enqueue the message
|
|
146
|
-
//
|
|
147
|
-
const onError = (logErr) => {
|
|
148
|
-
if (logErr) {
|
|
149
|
-
this.queue.push(syslogMsg);
|
|
150
|
-
this.emit('error', logErr);
|
|
151
|
-
}
|
|
152
|
-
this.emit('logged', info);
|
|
153
|
-
this.inFlight--;
|
|
154
|
-
};
|
|
155
|
-
|
|
156
|
-
const onCongestion = () => {
|
|
157
|
-
onError(new Error('Congestion Error'));
|
|
158
|
-
};
|
|
159
|
-
|
|
160
|
-
const sendDgram = () => {
|
|
161
|
-
const buffer = new Buffer(syslogMsg);
|
|
162
|
-
|
|
163
|
-
if (this.protocolType === 'udp') {
|
|
164
|
-
this.inFlight++;
|
|
165
|
-
this.socket.send(buffer, 0, buffer.length, this.port, this.host, onError);
|
|
166
|
-
} else if (this.protocol === 'unix') {
|
|
167
|
-
this.inFlight++;
|
|
168
|
-
this.socket.send(buffer, 0, buffer.length, this.path, onError);
|
|
169
|
-
} else if (this.congested) {
|
|
170
|
-
this.queue.push(syslogMsg);
|
|
171
|
-
} else {
|
|
172
|
-
this.socket.once('congestion', onCongestion);
|
|
173
|
-
this.inFlight++;
|
|
174
|
-
this.socket.send(buffer, (e) => {
|
|
175
|
-
this.socket.removeListener('congestion', onCongestion);
|
|
176
|
-
onError(e);
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
//
|
|
182
|
-
// Write to the `tcp*`, `udp*`, or `unix` socket.
|
|
183
|
-
//
|
|
184
|
-
if (this.isDgram) {
|
|
185
|
-
sendDgram();
|
|
186
|
-
} else {
|
|
187
|
-
this.socket.write(syslogMsg, 'utf8', onError);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
callback(null, true);
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
//
|
|
195
|
-
// ### function close ()
|
|
196
|
-
// Closes the socket used by this transport freeing the resource.
|
|
197
|
-
//
|
|
198
|
-
close() {
|
|
199
|
-
const max = 6;
|
|
200
|
-
let attempt = 0;
|
|
201
|
-
|
|
202
|
-
const _close = () => {
|
|
203
|
-
if (attempt >= max || (this.queue.length === 0 && this.inFlight <= 0)) {
|
|
204
|
-
if (this.socket) {
|
|
205
|
-
this.socket.close();
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
this.emit('closed', this.socket);
|
|
209
|
-
} else {
|
|
210
|
-
attempt++;
|
|
211
|
-
setTimeout(_close, 200 * attempt);
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
_close();
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
connectDgram(callback) {
|
|
218
|
-
if (this.protocol === 'unix-connect') {
|
|
219
|
-
return this._unixDgramConnect(callback);
|
|
220
|
-
} else if (this.protocol === 'unix') {
|
|
221
|
-
this.socket = require('unix-dgram').createSocket('unix_dgram');
|
|
222
|
-
} else {
|
|
223
|
-
// UDP protocol
|
|
224
|
-
this.socket = new dgram.Socket(this.protocol);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
return callback(null);
|
|
228
|
-
}
|
|
229
|
-
//
|
|
230
|
-
// ### function connect (callback)
|
|
231
|
-
// #### @callback {function} Continuation to respond to when complete.
|
|
232
|
-
// Connects to the remote syslog server using `dgram` or `net` depending
|
|
233
|
-
// on the `protocol` for this instance.
|
|
234
|
-
//
|
|
235
|
-
connect(callback) {
|
|
236
|
-
//
|
|
237
|
-
// If the socket already exists then respond
|
|
238
|
-
//
|
|
239
|
-
if (this.socket) {
|
|
240
|
-
return ((!this.socket.readyState) || (this.socket.readyState === 'open')) || this.socket.connected
|
|
241
|
-
? callback(null)
|
|
242
|
-
: callback(true);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
//
|
|
246
|
-
// Create the appropriate socket type.
|
|
247
|
-
//
|
|
248
|
-
if (this.isDgram) {
|
|
249
|
-
return this.connectDgram(callback);
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
this.socket = new net.Socket();
|
|
253
|
-
this.socket.setKeepAlive(true);
|
|
254
|
-
this.socket.setNoDelay();
|
|
255
|
-
|
|
256
|
-
this.setupEvents();
|
|
257
|
-
|
|
258
|
-
const connectConfig = {
|
|
259
|
-
host: this.host,
|
|
260
|
-
port: this.port
|
|
261
|
-
};
|
|
262
|
-
|
|
263
|
-
if (this.protocolFamily) {
|
|
264
|
-
connectConfig.family = this.protocolFamily;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
this.socket.connect(connectConfig);
|
|
268
|
-
|
|
269
|
-
//
|
|
270
|
-
// Indicate to the callee that the socket is not ready. This
|
|
271
|
-
// will enqueue the current message for later.
|
|
272
|
-
//
|
|
273
|
-
callback(true);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
setupEvents() {
|
|
277
|
-
const readyEvent = 'connect';
|
|
278
|
-
//
|
|
279
|
-
// On any error writing to the socket, emit the `logged` event
|
|
280
|
-
// and the `error` event.
|
|
281
|
-
//
|
|
282
|
-
const onError = (logErr) => {
|
|
283
|
-
if (logErr) { this.emit('error', logErr); }
|
|
284
|
-
this.emit('logged');
|
|
285
|
-
this.inFlight--;
|
|
286
|
-
};
|
|
287
|
-
|
|
288
|
-
//
|
|
289
|
-
// Listen to the appropriate events on the socket that
|
|
290
|
-
// was just created.
|
|
291
|
-
//
|
|
292
|
-
this.socket.on(readyEvent, () => {
|
|
293
|
-
//
|
|
294
|
-
// When the socket is ready, write the current queue
|
|
295
|
-
// to it.
|
|
296
|
-
//
|
|
297
|
-
this.socket.write(this.queue.join(''), 'utf8', onError);
|
|
298
|
-
|
|
299
|
-
this.emit('logged');
|
|
300
|
-
this.queue = [];
|
|
301
|
-
this.retries = 0;
|
|
302
|
-
this.connected = true;
|
|
303
|
-
}).on('error', function () {
|
|
304
|
-
//
|
|
305
|
-
// TODO: Pass this error back up
|
|
306
|
-
//
|
|
307
|
-
}).on('close', () => {
|
|
308
|
-
//
|
|
309
|
-
// Attempt to reconnect on lost connection(s), progressively
|
|
310
|
-
// increasing the amount of time between each try.
|
|
311
|
-
//
|
|
312
|
-
const interval = Math.pow(2, this.retries);
|
|
313
|
-
this.connected = false;
|
|
314
|
-
|
|
315
|
-
setTimeout(() => {
|
|
316
|
-
this.retries++;
|
|
317
|
-
this.socket.connect(this.port, this.host);
|
|
318
|
-
}, interval * 1000);
|
|
319
|
-
}).on('timeout', () => {
|
|
320
|
-
if (this.socket.readyState !== 'open') {
|
|
321
|
-
this.socket.destroy();
|
|
322
|
-
}
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
_unixDgramConnect(callback) {
|
|
327
|
-
const self = this;
|
|
328
|
-
|
|
329
|
-
const flushQueue = () => {
|
|
330
|
-
let sentMsgs = 0;
|
|
331
|
-
this.queue.forEach((msg) => {
|
|
332
|
-
const buffer = new Buffer(msg);
|
|
333
|
-
|
|
334
|
-
if (!this.congested) {
|
|
335
|
-
this.socket.send(buffer, function () {
|
|
336
|
-
++sentMsgs;
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
this.queue.splice(0, sentMsgs);
|
|
342
|
-
};
|
|
343
|
-
|
|
344
|
-
this.socket = require('unix-dgram').createSocket('unix_dgram');
|
|
345
|
-
this.socket.on('error', (err) => {
|
|
346
|
-
this.emit('error', err);
|
|
347
|
-
|
|
348
|
-
if (err.syscall === 'connect') {
|
|
349
|
-
this.socket.close();
|
|
350
|
-
this.socket = null;
|
|
351
|
-
return callback(err);
|
|
352
|
-
}
|
|
353
|
-
if (err.syscall === 'send') {
|
|
354
|
-
this.socket.close();
|
|
355
|
-
this.socket = null;
|
|
356
|
-
}
|
|
357
|
-
});
|
|
358
|
-
|
|
359
|
-
this.socket.on('connect', function () {
|
|
360
|
-
this.on('congestion', () => {
|
|
361
|
-
self.congested = true;
|
|
362
|
-
});
|
|
363
|
-
|
|
364
|
-
this.on('writable', () => {
|
|
365
|
-
self.congested = false;
|
|
366
|
-
flushQueue();
|
|
367
|
-
});
|
|
368
|
-
|
|
369
|
-
flushQueue();
|
|
370
|
-
callback();
|
|
371
|
-
});
|
|
372
|
-
|
|
373
|
-
this.socket.connect(this.path);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
//
|
|
378
|
-
// Define a getter so that `winston.transports.Syslog`
|
|
379
|
-
// is available and thus backwards compatible.
|
|
380
|
-
//
|
|
381
|
-
winston.transports.Syslog = Syslog;
|
|
382
|
-
|
|
383
|
-
module.exports = {
|
|
384
|
-
Syslog
|
|
385
|
-
};
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "winston-syslog",
|
|
3
|
-
"description": "A syslog transport for winston",
|
|
4
|
-
"version": "2.1.0",
|
|
5
|
-
"author": "Charlie Robbins <charlie.robbins@gmail.com>",
|
|
6
|
-
"contributors": [
|
|
7
|
-
{
|
|
8
|
-
"name": "Squeeks",
|
|
9
|
-
"email": "privacymyass@gmail.com"
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"name": "Mempf",
|
|
13
|
-
"email": "mempf.com@gmail.com"
|
|
14
|
-
}
|
|
15
|
-
],
|
|
16
|
-
"repository": {
|
|
17
|
-
"type": "git",
|
|
18
|
-
"url": "http://github.com/indexzero/winston-syslog.git"
|
|
19
|
-
},
|
|
20
|
-
"keywords": [
|
|
21
|
-
"logging",
|
|
22
|
-
"sysadmin",
|
|
23
|
-
"tools",
|
|
24
|
-
"winston",
|
|
25
|
-
"syslog"
|
|
26
|
-
],
|
|
27
|
-
"dependencies": {
|
|
28
|
-
"cycle": "^1.0.3",
|
|
29
|
-
"glossy": "^0.1.7"
|
|
30
|
-
},
|
|
31
|
-
"optionalDependencies": {
|
|
32
|
-
"unix-dgram": "^2.0.2"
|
|
33
|
-
},
|
|
34
|
-
"peerDependencies": {
|
|
35
|
-
"winston": "^3.0.0"
|
|
36
|
-
},
|
|
37
|
-
"devDependencies": {
|
|
38
|
-
"eslint-config-populist": "^4.1.0",
|
|
39
|
-
"vows": "^0.8.2",
|
|
40
|
-
"winston": "^3.0.0"
|
|
41
|
-
},
|
|
42
|
-
"main": "./lib/winston-syslog",
|
|
43
|
-
"scripts": {
|
|
44
|
-
"lint": "populist **/*.js",
|
|
45
|
-
"pretest": "npm run lint",
|
|
46
|
-
"test": "vows test/*-test.js --spec"
|
|
47
|
-
},
|
|
48
|
-
"engines": {
|
|
49
|
-
"node": ">= 4.2.2"
|
|
50
|
-
},
|
|
51
|
-
"license": "MIT"
|
|
52
|
-
|
|
53
|
-
,"_resolved": "https://registry.npmjs.org/winston-syslog/-/winston-syslog-2.1.0.tgz"
|
|
54
|
-
,"_integrity": "sha512-y6wHm7vd99tcpIar6fNM5Widx7Kemf2iguGLC9wty351wqQU9LewRaMraj3FvO2xPJF6P4a4BuSN3jGx/tnIqg=="
|
|
55
|
-
,"_from": "winston-syslog@2.1.0"
|
|
56
|
-
}
|