passenger 6.0.12 → 6.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +37 -1
  3. data/bin/passenger-install-nginx-module +1 -1
  4. data/dev/copy_boost_headers +30 -15
  5. data/resources/mime.types +1 -0
  6. data/resources/templates/standalone/server.erb +1 -0
  7. data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +1 -0
  8. data/src/agent/Core/ApplicationPool/Options.h +5 -0
  9. data/src/agent/Core/Config.h +1 -1
  10. data/src/agent/Core/Controller/Config.h +5 -2
  11. data/src/agent/Core/Controller/InitRequest.cpp +2 -0
  12. data/src/agent/Core/OptionParser.h +4 -0
  13. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h +7 -0
  14. data/src/agent/Core/SpawningKit/Config.h +13 -0
  15. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +4 -0
  16. data/src/agent/Core/SpawningKit/Spawner.h +1 -0
  17. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +4 -0
  18. data/src/agent/Watchdog/Config.h +1 -1
  19. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +5 -0
  20. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +5 -0
  21. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +18 -0
  22. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +3 -0
  23. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +3 -0
  24. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +11 -0
  25. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +7 -0
  26. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +17 -0
  27. data/src/apache2_module/Hooks.cpp +1 -0
  28. data/src/cxx_supportlib/Constants.h +1 -1
  29. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +19 -0
  30. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of.hpp +54 -0
  31. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of_forward.hpp +20 -0
  32. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +21 -0
  33. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc.hpp +52 -0
  34. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of.hpp +31 -0
  35. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of_cxx11.hpp +23 -0
  36. data/src/cxx_supportlib/vendor-modified/boost/align/detail/element_type.hpp +91 -0
  37. data/src/cxx_supportlib/vendor-modified/boost/align/detail/integral_constant.hpp +53 -0
  38. data/src/cxx_supportlib/vendor-modified/boost/align/detail/min_size.hpp +26 -0
  39. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +8 -0
  40. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +6 -0
  41. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +12 -0
  42. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +5 -0
  43. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +18 -0
  44. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +13 -0
  45. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +3 -0
  46. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +4 -0
  47. data/src/nginx_module/ngx_http_passenger_module.c +1 -0
  48. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/common.js +50 -29
  49. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/cli-config.js +20 -20
  50. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/npm-config.js +11 -11
  51. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config/syslog-config.js +3 -3
  52. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/config.js +8 -2
  53. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/container.js +2 -1
  54. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +174 -146
  55. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/console.js +4 -2
  56. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/file.js +15 -5
  57. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/http.js +14 -4
  58. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports.js +26 -24
  59. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston.js +5 -5
  60. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/async/package.json +4 -13
  61. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/colors/package.json +19 -33
  62. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/cycle/package.json +11 -29
  63. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/eyes/package.json +12 -40
  64. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/isstream/package.json +3 -12
  65. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/lib/stack-trace.js +49 -24
  66. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/stack-trace/package.json +4 -16
  67. data/src/nodejs_supportlib/vendor-copy/winston/package.json +11 -55
  68. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +6 -0
  69. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +6 -0
  70. data/src/ruby_supportlib/phusion_passenger/platform_info/linux.rb +2 -1
  71. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +18 -18
  72. data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +7 -1
  73. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -0
  74. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  75. metadata +12 -7
  76. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/daily-rotate-file.js +0 -601
  77. data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/transports/webhook.js +0 -146
  78. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/LICENSE +0 -19
  79. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/lib/pkginfo.js +0 -136
  80. data/src/nodejs_supportlib/vendor-copy/winston/node_modules/pkginfo/package.json +0 -56
@@ -1,601 +0,0 @@
1
- /*
2
- * daily-rotate-file.js: Transport for outputting to a local log file
3
- *
4
- * (C) 2010 Charlie Robbins
5
- * MIT LICENCE
6
- *
7
- */
8
-
9
- var events = require('events'),
10
- fs = require('fs'),
11
- path = require('path'),
12
- util = require('util'),
13
- common = require('../common'),
14
- Transport = require('./transport').Transport,
15
- Stream = require('stream').Stream,
16
- os = require('os');
17
-
18
- //
19
- // ### function DailyRotateFile (options)
20
- // #### @options {Object} Options for this instance.
21
- // Constructor function for the DailyRotateFile transport object responsible
22
- // for persisting log messages and metadata to one or more files.
23
- //
24
- var DailyRotateFile = exports.DailyRotateFile = function (options) {
25
- Transport.call(this, options);
26
-
27
- //
28
- // Helper function which throws an `Error` in the event
29
- // that any of the rest of the arguments is present in `options`.
30
- //
31
- function throwIf (target /*, illegal... */) {
32
- Array.prototype.slice.call(arguments, 1).forEach(function (name) {
33
- if (options[name]) {
34
- throw new Error('Cannot set ' + name + ' and ' + target + 'together');
35
- }
36
- });
37
- }
38
-
39
- if (options.filename || options.dirname) {
40
- throwIf('filename or dirname', 'stream');
41
- this._basename = this.filename = options.filename
42
- ? path.basename(options.filename)
43
- : 'winston.log';
44
-
45
- this.dirname = options.dirname || path.dirname(options.filename);
46
- this.options = options.options || { flags: 'a' };
47
-
48
- //
49
- // "24 bytes" is maybe a good value for logging lines.
50
- //
51
- this.options.highWaterMark = this.options.highWaterMark || 24;
52
- }
53
- else if (options.stream) {
54
- throwIf('stream', 'filename', 'maxsize');
55
- this._stream = options.stream;
56
- this._stream.on('error', function(error){
57
- self.emit('error', error);
58
- });
59
-
60
- //
61
- // We need to listen for drain events when
62
- // write() returns false. This can make node
63
- // mad at times.
64
- //
65
- this._stream.setMaxListeners(Infinity);
66
- }
67
- else {
68
- throw new Error('Cannot log to file without filename or stream.');
69
- }
70
-
71
- this.json = options.json !== false;
72
- this.colorize = options.colorize || false;
73
- this.maxsize = options.maxsize || null;
74
- this.maxFiles = options.maxFiles || null;
75
- this.label = options.label || null;
76
- this.prettyPrint = options.prettyPrint || false;
77
- this.showLevel = options.showLevel === undefined ? true : options.showLevel;
78
- this.timestamp = options.timestamp != null ? options.timestamp : true;
79
- this.datePattern = options.datePattern != null ? options.datePattern : '.yyyy-MM-dd';
80
- this.depth = options.depth || null;
81
- this.eol = options.eol || os.EOL;
82
- this.maxRetries = options.maxRetries || 2;
83
-
84
- if (this.json) {
85
- this.stringify = options.stringify;
86
- }
87
-
88
- //
89
- // Internal state variables representing the number
90
- // of files this instance has created and the current
91
- // size (in bytes) of the current logfile.
92
- //
93
- this._size = 0;
94
- this._created = 0;
95
- this._buffer = [];
96
- this._draining = false;
97
- this._failures = 0;
98
-
99
- var now = new Date();
100
- this._year = now.getFullYear();
101
- this._month = now.getMonth();
102
- this._date = now.getDate();
103
- this._hour = now.getHours();
104
- this._minute = now.getMinutes();
105
-
106
- var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhM])\1?/g,
107
- pad = function (val, len) {
108
- val = String(val);
109
- len = len || 2;
110
- while (val.length < len) val = "0" + val;
111
- return val;
112
- };
113
-
114
- this.getFormattedDate = function() {
115
- var flags = {
116
- yy: String(this._year).slice(2),
117
- yyyy: this._year,
118
- M: this._month + 1,
119
- MM: pad(this._month + 1),
120
- d: this._date,
121
- dd: pad(this._date),
122
- H: this._hour,
123
- HH: pad(this._hour),
124
- m: this._minute,
125
- mm: pad(this._minute)
126
- };
127
- return this.datePattern.replace(token, function ($0) {
128
- return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
129
- });
130
- };
131
- };
132
-
133
- //
134
- // Inherit from `winston.Transport`.
135
- //
136
- util.inherits(DailyRotateFile, Transport);
137
-
138
- //
139
- // Expose the name of this Transport on the prototype
140
- //
141
- DailyRotateFile.prototype.name = 'dailyRotateFile';
142
-
143
- //
144
- // ### function log (level, msg, [meta], callback)
145
- // #### @level {string} Level at which to log the message.
146
- // #### @msg {string} Message to log
147
- // #### @meta {Object} **Optional** Additional metadata to attach
148
- // #### @callback {function} Continuation to respond to when complete.
149
- // Core logging method exposed to Winston. Metadata is optional.
150
- //
151
- DailyRotateFile.prototype.log = function (level, msg, meta, callback) {
152
- if (this.silent) {
153
- return callback(null, true);
154
- }
155
-
156
- //
157
- // If failures exceeds maxRetries then we can't access the
158
- // stream. In this case we need to perform a noop and return
159
- // an error.
160
- //
161
- if (this._failures >= this.maxRetries) {
162
- return callback(new Error('Transport is in a failed state.'));
163
- }
164
-
165
- var self = this;
166
-
167
- var output = common.log({
168
- level: level,
169
- message: msg,
170
- meta: meta,
171
- json: this.json,
172
- colorize: this.colorize,
173
- prettyPrint: this.prettyPrint,
174
- timestamp: this.timestamp,
175
- label: this.label,
176
- stringify: this.stringify,
177
- showLevel: this.showLevel,
178
- depth: this.depth,
179
- formatter: this.formatter,
180
- humanReadableUnhandledException: this.humanReadableUnhandledException
181
- }) + this.eol;
182
-
183
- this._size += output.length;
184
-
185
- if (!this.filename) {
186
- //
187
- // If there is no `filename` on this instance then it was configured
188
- // with a raw `WriteableStream` instance and we should not perform any
189
- // size restrictions.
190
- //
191
- this._write(output, callback);
192
- this._lazyDrain();
193
- }
194
- else {
195
- this.open(function (err) {
196
- if (err) {
197
- //
198
- // If there was an error enqueue the message
199
- //
200
- return self._buffer.push([output, callback]);
201
- }
202
-
203
- self._write(output, callback);
204
- self._lazyDrain();
205
- });
206
- }
207
- };
208
-
209
- //
210
- // ### function _write (data, cb)
211
- // #### @data {String|Buffer} Data to write to the instance's stream.
212
- // #### @cb {function} Continuation to respond to when complete.
213
- // Write to the stream, ensure execution of a callback on completion.
214
- //
215
- DailyRotateFile.prototype._write = function(data, callback) {
216
- // If this is a file write stream, we could use the builtin
217
- // callback functionality, however, the stream is not guaranteed
218
- // to be an fs.WriteStream.
219
- var ret = this._stream.write(data);
220
- if (!callback) return;
221
- if (ret === false) {
222
- return this._stream.once('drain', function() {
223
- callback(null, true);
224
- });
225
- }
226
- callback(null, true);
227
- };
228
-
229
- //
230
- // ### function query (options, callback)
231
- // #### @options {Object} Loggly-like query options for this instance.
232
- // #### @callback {function} Continuation to respond to when complete.
233
- // Query the transport. Options object is optional.
234
- //
235
- DailyRotateFile.prototype.query = function (options, callback) {
236
- if (typeof options === 'function') {
237
- callback = options;
238
- options = {};
239
- }
240
-
241
- // TODO when maxfilesize rotate occurs
242
- var file = path.join(this.dirname, this._basename + this.getFormattedDate()),
243
- options = this.normalizeQuery(options),
244
- buff = '',
245
- results = [],
246
- row = 0;
247
-
248
- var stream = fs.createReadStream(file, {
249
- encoding: 'utf8'
250
- });
251
-
252
- stream.on('error', function (err) {
253
- if (stream.readable) {
254
- stream.destroy();
255
- }
256
- if (!callback) return;
257
- return err.code !== 'ENOENT'
258
- ? callback(err)
259
- : callback(null, results);
260
- });
261
-
262
- stream.on('data', function (data) {
263
- var data = (buff + data).split(/\n+/),
264
- l = data.length - 1,
265
- i = 0;
266
-
267
- for (; i < l; i++) {
268
- if (!options.start || row >= options.start) {
269
- add(data[i]);
270
- }
271
- row++;
272
- }
273
-
274
- buff = data[l];
275
- });
276
-
277
- stream.on('close', function () {
278
- if (buff) add(buff, true);
279
- if (options.order === 'desc') {
280
- results = results.reverse();
281
- }
282
- if (callback) callback(null, results);
283
- });
284
-
285
- function add(buff, attempt) {
286
- try {
287
- var log = JSON.parse(buff);
288
- if (check(log)) push(log);
289
- } catch (e) {
290
- if (!attempt) {
291
- stream.emit('error', e);
292
- }
293
- }
294
- }
295
-
296
- function push(log) {
297
- if (options.rows && results.length >= options.rows) {
298
- if (stream.readable) {
299
- stream.destroy();
300
- }
301
- return;
302
- }
303
-
304
- if (options.fields) {
305
- var obj = {};
306
- options.fields.forEach(function (key) {
307
- obj[key] = log[key];
308
- });
309
- log = obj;
310
- }
311
-
312
- results.push(log);
313
- }
314
-
315
- function check(log) {
316
- if (!log) return;
317
-
318
- if (typeof log !== 'object') return;
319
-
320
- var time = new Date(log.timestamp);
321
- if ((options.from && time < options.from)
322
- || (options.until && time > options.until)) {
323
- return;
324
- }
325
-
326
- return true;
327
- }
328
- };
329
-
330
- //
331
- // ### function stream (options)
332
- // #### @options {Object} Stream options for this instance.
333
- // Returns a log stream for this transport. Options object is optional.
334
- //
335
- DailyRotateFile.prototype.stream = function (options) {
336
- var file = path.join(this.dirname, this._basename + this.getFormattedDate()),
337
- options = options || {},
338
- stream = new Stream;
339
-
340
- var tail = {
341
- file: file,
342
- start: options.start
343
- };
344
-
345
- stream.destroy = common.tailFile(tail, function (err, line) {
346
-
347
- if(err){
348
- return stream.emit('error',err);
349
- }
350
-
351
- try {
352
- stream.emit('data', line);
353
- line = JSON.parse(line);
354
- stream.emit('log', line);
355
- } catch (e) {
356
- stream.emit('error', e);
357
- }
358
- });
359
-
360
- if(stream.resume){
361
- stream.resume();
362
- }
363
-
364
- return stream;
365
- };
366
-
367
- //
368
- // ### function open (callback)
369
- // #### @callback {function} Continuation to respond to when complete
370
- // Checks to see if a new file needs to be created based on the `maxsize`
371
- // (if any) and the current size of the file used.
372
- //
373
- DailyRotateFile.prototype.open = function (callback) {
374
- var now = new Date();
375
- if (this.opening) {
376
- //
377
- // If we are already attempting to open the next
378
- // available file then respond with a value indicating
379
- // that the message should be buffered.
380
- //
381
- return callback(true);
382
- }
383
- else if (!this._stream || (this.maxsize && this._size >= this.maxsize) ||
384
- (this._year < now.getFullYear() || this._month < now.getMonth() || this._date < now.getDate() || this._hour < now.getHours() || this._minute < now.getMinutes())) {
385
- //
386
- // If we dont have a stream or have exceeded our size, then create
387
- // the next stream and respond with a value indicating that
388
- // the message should be buffered.
389
- //
390
- callback(true);
391
- return this._createStream();
392
- }
393
-
394
- //
395
- // Otherwise we have a valid (and ready) stream.
396
- //
397
- callback();
398
- };
399
-
400
- //
401
- // ### function close ()
402
- // Closes the stream associated with this instance.
403
- //
404
- DailyRotateFile.prototype.close = function () {
405
- var self = this;
406
-
407
- if (this._stream) {
408
- this._stream.end();
409
- this._stream.destroySoon();
410
-
411
- this._stream.once('drain', function () {
412
- self.emit('flush');
413
- self.emit('closed');
414
- });
415
- }
416
- };
417
-
418
- //
419
- // ### function flush ()
420
- // Flushes any buffered messages to the current `stream`
421
- // used by this instance.
422
- //
423
- DailyRotateFile.prototype.flush = function () {
424
- var self = this;
425
-
426
- //
427
- // Iterate over the `_buffer` of enqueued messaged
428
- // and then write them to the newly created stream.
429
- //
430
- this._buffer.forEach(function (item) {
431
- var str = item[0],
432
- callback = item[1];
433
-
434
- process.nextTick(function () {
435
- self._write(str, callback);
436
- self._size += str.length;
437
- });
438
- });
439
-
440
- //
441
- // Quickly truncate the `_buffer` once the write operations
442
- // have been started
443
- //
444
- self._buffer.length = 0;
445
-
446
- //
447
- // When the stream has drained we have flushed
448
- // our buffer.
449
- //
450
- self._stream.once('drain', function () {
451
- self.emit('flush');
452
- self.emit('logged');
453
- });
454
- };
455
-
456
- //
457
- // ### @private function _createStream ()
458
- // Attempts to open the next appropriate file for this instance
459
- // based on the common state (such as `maxsize` and `_basename`).
460
- //
461
- DailyRotateFile.prototype._createStream = function () {
462
- var self = this;
463
- this.opening = true;
464
-
465
- (function checkFile (target) {
466
- var fullname = path.join(self.dirname, target);
467
-
468
- //
469
- // Creates the `WriteStream` and then flushes any
470
- // buffered messages.
471
- //
472
- function createAndFlush (size) {
473
- if (self._stream) {
474
- self._stream.end();
475
- self._stream.destroySoon();
476
- }
477
-
478
- self._size = size;
479
- self.filename = target;
480
- self._stream = fs.createWriteStream(fullname, self.options);
481
- self._stream.on('error', function(error){
482
- if (self._failures < self.maxRetries) {
483
- self._createStream();
484
- self._failures++;
485
- }
486
- else {
487
- self.emit('error', error);
488
- }
489
- });
490
-
491
- //
492
- // We need to listen for drain events when
493
- // write() returns false. This can make node
494
- // mad at times.
495
- //
496
- self._stream.setMaxListeners(Infinity);
497
-
498
- //
499
- // When the current stream has finished flushing
500
- // then we can be sure we have finished opening
501
- // and thus can emit the `open` event.
502
- //
503
- self.once('flush', function () {
504
- self.opening = false;
505
- self.emit('open', fullname);
506
- });
507
-
508
- //
509
- // Remark: It is possible that in the time it has taken to find the
510
- // next logfile to be written more data than `maxsize` has been buffered,
511
- // but for sensible limits (10s - 100s of MB) this seems unlikely in less
512
- // than one second.
513
- //
514
- self.flush();
515
- }
516
-
517
- fs.stat(fullname, function (err, stats) {
518
- if (err) {
519
- if (err.code !== 'ENOENT') {
520
- return self.emit('error', err);
521
- }
522
-
523
- return createAndFlush(0);
524
- }
525
-
526
- if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
527
- //
528
- // If `stats.size` is greater than the `maxsize` for
529
- // this instance then try again
530
- //
531
- return checkFile(self._getFile(true));
532
- }
533
-
534
- var now = new Date();
535
- if (self._year < now.getFullYear() || self._month < now.getMonth() || self._date < now.getDate() || self._hour < now.getHours() || self._minute < now.getMinutes()) {
536
- self._year = now.getFullYear();
537
- self._month = now.getMonth();
538
- self._date = now.getDate();
539
- self._hour = now.getHours();
540
- self._minute = now.getMinutes();
541
- self._created = 0;
542
- return checkFile(self._getFile());
543
- }
544
-
545
- createAndFlush(stats.size);
546
- });
547
- })(this._getFile());
548
- };
549
-
550
- //
551
- // ### @private function _getFile ()
552
- // Gets the next filename to use for this instance
553
- // in the case that log filesizes are being capped.
554
- //
555
- DailyRotateFile.prototype._getFile = function (inc) {
556
- var self = this,
557
- filename = this._basename + this.getFormattedDate(),
558
- remaining;
559
-
560
- if (inc) {
561
- //
562
- // Increment the number of files created or
563
- // checked by this instance.
564
- //
565
- // Check for maxFiles option and delete file
566
- if (this.maxFiles && (this._created >= (this.maxFiles - 1))) {
567
- remaining = this._created - (this.maxFiles - 1);
568
- if (remaining === 0) {
569
- fs.unlinkSync(path.join(this.dirname, filename));
570
- }
571
- else {
572
- fs.unlinkSync(path.join(this.dirname, filename + '.' + remaining));
573
- }
574
- }
575
-
576
- this._created += 1;
577
- }
578
-
579
- return this._created
580
- ? filename + '.' + this._created
581
- : filename;
582
- };
583
-
584
- //
585
- // ### @private function _lazyDrain ()
586
- // Lazily attempts to emit the `logged` event when `this.stream` has
587
- // drained. This is really just a simple mutex that only works because
588
- // Node.js is single-threaded.
589
- //
590
- DailyRotateFile.prototype._lazyDrain = function () {
591
- var self = this;
592
-
593
- if (!this._draining && this._stream) {
594
- this._draining = true;
595
-
596
- this._stream.once('drain', function () {
597
- this._draining = false;
598
- self.emit('logged');
599
- });
600
- }
601
- };