blob: d5d9668985eebd163ad658633b64537a33134996 (
plain)
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
|
const { promisify } = require('util');
const { exec } = require('child_process');
const internals = {
kActiveIndicator: 'active',
kFieldSeparator: '\n',
kKeyValueSeparator: '=',
kBlockSeparator: '\n\n',
statusCommand: 'systemctl show --no-page -p Id -p ActiveState',
formatStatusOutput(systemctlText) {
const blocks = systemctlText.trim().split(internals.kBlockSeparator);
return blocks
.map((block) => {
const fields = block.split(internals.kFieldSeparator);
return fields.reduce((fieldObject, field) => {
const [key, value] = field.split(internals.kKeyValueSeparator);
return {
...fieldObject,
[key]: value
}
}, {})
})
.reduce((statusObject, service) => {
return {
...statusObject,
[service.Id]: service.ActiveState === internals.kActiveIndicator
}
}, {});
},
exec: promisify(exec)
};
module.exports = async (services) => {
const { stdout } = await internals.exec(`${internals.statusCommand} ${services.join(' ')}`);
return internals.formatStatusOutput(stdout);
};
|