forever init script
[iotcc-server-monitoring.git] / 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
var mqtt = require('mqtt');
var CR = require('command_runner');
 
var appOptions = require('./config.js');
var client  = mqtt.connect(appOptions.mqtt);
 
function run() {
   CR.exec("/bin/df | grep '^/dev/*'").then(function (res) {
        var lines = res.stdout.split("\n");
        for (line in lines) {
            var lineContent = lines[line];
            if (lineContent == "") {continue;}
            var hdd = lineContent.replace(/[ ]+/g, " ").replace(/G/g, "").split(' ');
            var used = parseInt(hdd[2] / 1024 / 1024),
                free = parseInt(hdd[3] / 1024 / 1024);
            var message = {
                "pageName": appOptions.pageName,
                "pageId": appOptions.pageId,
                "widget": "chart.js",
                "chart": "pie",
                "title": hdd[0],
                "topic": appOptions.prefix + appOptions.device + "/hdd" + line,
                "value": {"labels": ["GB Used", "GB Free"], "datasets": [{"data": [used, free], "backgroundColor": ["#d80f26", "#0eb722"], "hoverBackgroundColor": ["#d80f26", "#0eb722"]}]},
                "valuedescription": "",
                "template": "template-3",
                "icon": "fa fa-server",
                "class": "bg-green",
                "order": 100
            };
            client.publish(appOptions.prefix + appOptions.device + "/hdd" + line + "/config", JSON.stringify(message), {qos: 1, retain: 0});
        }
    });
 
    CR.exec("free -b | grep 'Mem'").then(function (res) {
        var mem = res.stdout.replace(/[ ]+/g, " ").split(' ');
        var used = parseInt(mem[2]  / 1024 / 1024),
            free = parseInt(mem[2]  / 1024 / 1024),
            cache = parseInt(mem[5]  / 1024 / 1024);
        var message = {
            "pageName": appOptions.pageName,
            "pageId": appOptions.pageId,
            "widget": "chart.js",
            "chart": "pie",
            "title": "Memory usage",
            "topic": appOptions.prefix + appOptions.device + "/ram",
            "value": {"labels": ["MB Used", "MB Free", "MB Cache"], "datasets": [{"data": [used, free, cache], "backgroundColor": ["#d80f26", "#0eb722", "#e09108"], "hoverBackgroundColor": [ "#d80f26", "#0eb722", "#e09108"]}]},
            "valuedescription": "",
            "template": "template-3",
            "icon": "fa fa-server",
            "class": "bg-green",
            "order": 300
        };
        client.publish(appOptions.prefix + appOptions.device + "/ram/config", JSON.stringify(message), {qos: 1, retain: 0});
    });
 
    CR.exec("free -b | grep 'Swap'").then(function (res) {
        var mem = res.stdout.replace(/[ ]+/g, " ").replace(/[\n]+/g, " ").split(' ');
        var used = parseInt(mem[2]  / 1024 / 1024),
            free = parseInt(mem[3]  / 1024 / 1024);
        var message = {
            "pageName": appOptions.pageName,
            "pageId": appOptions.pageId,
            "widget": "chart.js",
            "chart": "pie",
            "title": "Swap usage",
            "topic": appOptions.prefix + appOptions.device + "/swap",
            "value": {"labels": ["MB Used", "MB Free"], "datasets": [{"data": [used, free], "backgroundColor": ["#d80f26", "#0eb722"], "hoverBackgroundColor": [ "#d80f26", "#0eb722"]}]},
            "valuedescription": "",
            "template": "template-3",
            "icon": "fa fa-server",
            "class": "bg-green",
            "order": 400
        };
        client.publish(appOptions.prefix + appOptions.device + "/swap/config", JSON.stringify(message), {qos: 1, retain: 0});
    });
 
    CR.exec('uptime | awk -F\'( |,|:)+\' \'{print $6,$7",",$8,"hours,",$9,"minutes."}\'').then(function (res) {
        var message = {
            "pageName": appOptions.pageName,
            "pageId": appOptions.pageId,
            "widget": "data",
            "title": "Uptime",
            "topic": appOptions.prefix + appOptions.device + "/uptime",
            "value": res.stdout,
            "valuedescription": "",
            "template": "template-3",
            "icon": "fa fa-server",
            "class": "bg-green",
            "order": 20
        };
        client.publish(appOptions.prefix + appOptions.device + "/uptime/config", JSON.stringify(message), {qos: 1, retain: 0});
    });
 
    CR.exec('cat /proc/loadavg').then(function (res) {
        var load = parseFloat(res.stdout.split(' ')[0]);
        if (load < 1) {
            var color = 'bg-green';
        } else if (load >= 1 && load <= 1.5) {
            var color = 'bg-orange';
        } else {
            var color = 'bg-red';
        }
        var message = {
            "pageName": appOptions.pageName,
            "pageId": appOptions.pageId,
            "widget": "data",
            "title": "System load",
            "topic": appOptions.prefix + appOptions.device + "/sysload",
            "value": res.stdout,
            "valuedescription": "",
            "template": "template-3",
            "icon": "fa fa-server",
            "class": color,
            "order": 10
        };
        client.publish(appOptions.prefix + appOptions.device + "/sysload/config", JSON.stringify(message), {qos: 1, retain: 0});
    });
 
    CR.exec('mailq | grep -c "^[A-F0-9]"').then(function (res) {
        var emails = parseInt(res.stdout);
        if (emails < 100) {
            var color = 'bg-green';
        } else if (load >= 100 && load <= 200) {
            var color = 'bg-orange';
        } else {
            var color = 'bg-red';
        }
        var message = {
            "pageName": appOptions.pageName,
            "pageId": appOptions.pageId,
            "widget": "data",
            "title": "Postqueue emails",
            "topic": appOptions.prefix + appOptions.device + "/postqueue",
            "value": res.stdout,
            "valuedescription": "",
            "template": "template-3",
            "icon": "fa fa-server",
            "class": color,
            "order": 30
        };
        client.publish(appOptions.prefix + appOptions.device + "/postqueue/config", JSON.stringify(message), {qos: 1, retain: 0});
    });
 
    CR.exec("who").then(function (res) {
        var message = {
            "pageName": appOptions.pageName,
            "pageId": appOptions.pageId,
            "widget": "data",
            "title": "Logged in users",
            "topic": appOptions.prefix + appOptions.device + "/users",
            "value": res.stdout.replace(/\n/g, "<br />"),
            "valuedescription": "",
            "template": "template-3",
            "icon": "fa fa-server",
            "class": "bg-green",
            "order": 60
        };
        client.publish(appOptions.prefix + appOptions.device + "/users/config", JSON.stringify(message), {qos: 1, retain: 0});
    });
}
client.on('connect', () => {
        setInterval(function() {
        run();
    }, appOptions.interval);
    run();
});
 
comments