This repository has been archived by the owner on Feb 12, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
go.js
73 lines (66 loc) · 1.7 KB
/
go.js
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
'use strict'
const ctl = require('ipfsd-ctl')
const waterfall = require('async/waterfall')
class GoDaemon {
constructor (opts) {
opts = opts || {
disposable: true,
init: true
}
this.init = opts.init
this.path = opts.path
this.disposable = opts.disposable
this.node = null
this.api = null
this.config = opts.config || {}
this.flags = opts.flags || {}
}
start (callback) {
waterfall([
(cb) => {
if (this.disposable) {
const config = Object.assign({ init: this.init }, this.config)
ctl.disposable(config, cb)
} else if (this.init) {
ctl.local(this.path, (err, node) => {
if (err) {
return cb(err)
}
node.init((err) => cb(err, node))
})
} else {
ctl.local(this.path, cb)
}
},
(node, cb) => {
this.node = node
this.node.setConfig('Bootstrap', '[]', cb)
},
(res, cb) => this.node.startDaemon(this.flags, cb),
(api, cb) => {
this.api = api
if (process.env.DEBUG) {
this.api.log.tail((err, stream) => {
if (err) {
return console.error(err)
}
stream.on('data', (chunk) => {
console.log('go-log: %s.%s %s (%s)', chunk.system, chunk.subsystem || '', chunk.event, chunk.error)
})
})
this.node._run(
['log', 'level', 'all', 'debug'],
{env: this.node.env},
cb
)
} else {
cb()
}
}
], (err) => callback(err))
}
stop (callback) {
this.node.stopDaemon(callback)
}
}
module.exports = GoDaemon