-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
113 lines (92 loc) · 3.69 KB
/
index.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
var osu = require('node-os-utils')
const mqtt = require('mqtt')
var options = require('./config.js').options
var values = require('./config').values
var broker = require('./config').broker
console.log('Started')
var connectString = broker.protocol + '://' + broker.host + ":" + broker.port
const client = mqtt.connect(broker)
client.on('connect', function(err) {
console.log('Connected to ' + connectString)
})
client.on('error', function(err) {
console.error(err)
})
setInterval(function() {
if (client.connected) {
var hostname = osu.os.hostname();
getStats().then(systemData => {
options.logMessages ? console.log(systemData) : null
options.rootTopic = options.rootTopic ? options.rootTopic : 'SystemMQTT';
options.idTopic = options.hostTopic ? hostname : broker.clientId;
if (options.messageType === 'json') {
client.publish(options.rootTopic + '/' + options.idTopic, JSON.stringify(systemData))
// client.publish('SystemMQTT', 'test')
} else {
for (const key in systemData) {
if (typeof(systemData[key]) == 'object') {
for (const i in systemData[key]) {
if (typeof(systemData[key][i]) == 'object') {
for (const j in systemData[key][i]) {
if (typeof(systemData[key][i][j]) == 'object') {
for (const k in systemData[key][i][j]) {
client.publish(options.rootTopic + '/' + options.idTopic + '/' + key + '/' + i + '/' + j + '/' + k, JSON.stringify(systemData[key][i][j][k]))
}
} else {
client.publish(options.rootTopic + '/' + options.idTopic + '/' + key + '/' + i + '/' + j, JSON.stringify(systemData[key][i][j]))
}
}
} else {
client.publish(options.rootTopic + '/' + options.idTopic + '/' + key + '/' + i, JSON.stringify(systemData[key][i]))
}
}
} else {
client.publish(options.rootTopic + '/' + options.idTopic + '/' + key, JSON.stringify(systemData[key]))
}
}
}
});
}
}, options.interval)
client.on('message', function(topic, message) {
// message is Buffer
console.log(message.toString())
client.end()
})
client.on('disconnect', function() {
console.log('disconnected')
})
async function getStats() {
var stats = {};
var calls = [];
for (cat in values) {
if (cat != 'parameters') {
var category = values[cat];
for (cmd in category) {
if (category[cmd]) {
if (category[cmd] !== true) {
calls.push(osu[cat][cmd](category[cmd]))
} else {
calls.push(osu[cat][cmd]())
}
}
}
}
}
await Promise.all(calls).then(res => {
var count = 0;
for (cat in values) {
if (cat != 'parameters') {
var category = values[cat];
for (cmd in category) {
if (category[cmd]) {
stats[cat] ? null : stats[cat] = {}
stats[cat][cmd] = res[count];
count++;
}
}
}
}
})
return stats;
}