1 | 'use strict'
|
2 |
|
3 | const fs = require('fs')
|
4 | const makeDir = require('mkdirp')
|
5 | const systemInfo = require('../collect/system-info.js')
|
6 | const ProcessStat = require('../collect/process-stat.js')
|
7 | const getLoggingPaths = require('@nearform/clinic-common').getLoggingPaths('doctor')
|
8 | const ProcessStatEncoder = require('../format/process-stat-encoder.js')
|
9 |
|
10 |
|
11 | const paths = getLoggingPaths({ path: process.env.NODE_CLINIC_DOCTOR_DATA_PATH, identifier: process.pid })
|
12 |
|
13 | makeDir.sync(paths['/'])
|
14 |
|
15 |
|
16 | fs.writeFileSync(paths['/systeminfo'], JSON.stringify(systemInfo(), null, 2))
|
17 |
|
18 | const processStatEncoder = new ProcessStatEncoder()
|
19 | const out = processStatEncoder.pipe(fs.createWriteStream(paths['/processstat']))
|
20 |
|
21 |
|
22 | const processStat = new ProcessStat(parseInt(
|
23 | process.env.NODE_CLINIC_DOCTOR_SAMPLE_INTERVAL, 10
|
24 | ))
|
25 |
|
26 |
|
27 | let timer = null
|
28 | function scheduleSample () {
|
29 | timer = setTimeout(saveSample, processStat.sampleInterval)
|
30 | timer.unref()
|
31 | }
|
32 |
|
33 | function saveSample () {
|
34 | const sample = processStat.sample()
|
35 | processStatEncoder.write(sample)
|
36 | processStat.refresh()
|
37 |
|
38 | scheduleSample()
|
39 | }
|
40 |
|
41 |
|
42 | setTimeout(() => {
|
43 | processStat.refresh()
|
44 | scheduleSample()
|
45 | }, process.env.NODE_CLINIC_DOCTOR_TIMEOUT_DELAY)
|
46 |
|
47 |
|
48 | process.once('beforeExit', function () {
|
49 | clearTimeout(timer)
|
50 | processStatEncoder.end()
|
51 | out.on('close', function () {
|
52 | process.exit()
|
53 | })
|
54 | })
|
55 |
|
56 |
|
57 | process.on('SIGINT', function () {
|
58 | if (process.listenerCount('SIGINT') === 1) process.emit('beforeExit')
|
59 | })
|
60 |
|
61 | process.on('SIGUSR2', function () {
|
62 |
|
63 | })
|
64 |
|
65 | process.on('SIGUSR1', function () {
|
66 |
|
67 | })
|