-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmongoose-control.js
More file actions
88 lines (77 loc) · 2.39 KB
/
mongoose-control.js
File metadata and controls
88 lines (77 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
'use strict'
var assign = require('101/assign')
var fs = require('fs')
var noop = require('101/noop')
var mongoose = require('mongoose')
var log = require('middlewares/logger')(__filename).log
var mongooseControl = module.exports = {}
mongooseControl.start = function (cb) {
cb = cb || noop
var ssl
if (process.env.MONGO_CACERT &&
process.env.MONGO_CERT &&
process.env.MONGO_KEY
) {
try {
log.info('loading mongodb certificates')
var ca = fs.readFileSync(process.env.MONGO_CACERT, 'utf-8')
var key = fs.readFileSync(process.env.MONGO_KEY, 'utf-8')
var cert = fs.readFileSync(process.env.MONGO_CERT, 'utf-8')
ssl = {
ssl: true,
sslValidate: true,
sslCA: [ ca ],
sslKey: key,
sslCert: cert
}
} catch (err) {
log.fatal({
err: err
}, 'could not read provided mongo certificates')
return cb(err)
}
}
var mongooseOptions = {}
if (process.env.MONGO_REPLSET_NAME) {
mongooseOptions.replset = {
rs_name: process.env.MONGO_REPLSET_NAME
}
if (ssl) {
mongooseOptions = assign(mongooseOptions, { replset: ssl })
log.trace('mongodb connecting to replset with ssl')
}
} else if (ssl) {
mongooseOptions = assign(mongooseOptions, { server: ssl })
log.trace('mongodb connecting to server with ssl')
}
mongoose.connect(process.env.MONGO, mongooseOptions, cb)
mongoose.connection.on('disconnected', function () {
if (!mongoose.connection._hasOpened) {
mongooseControl._exitIfFailedToOpen()
} else {
mongooseControl._exitIfFailedToReconnect()
}
})
}
mongooseControl.stop = function (cb) {
cb = cb || noop
mongoose.disconnect(function (err) {
// this sometimes calls back in sync
process.nextTick(function () {
cb(err)
})
})
}
mongooseControl._exitIfFailedToOpen = function () {
log.fatal({message: 'Failed to connect to ' + process.env.MONGO + ' failed to establish a connection to mongodb'})
process.exit(1)
}
mongooseControl._exitIfFailedToReconnect = function () {
log.error({message: 'Failed to connect to ' + process.env.MONGO + ' failed to establish a connection to mongodb'})
setTimeout(function () {
if (!mongoose.connection.readyState) {
log.fatal({message: 'Exiting nodejs process due to mongodb connection failure'})
process.exit(1)
}
}, process.env.DB_CONNECTION_TIMEOUT)
}