-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathnattrmon.js
More file actions
89 lines (75 loc) · 2.77 KB
/
nattrmon.js
File metadata and controls
89 lines (75 loc) · 2.77 KB
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
// nAttrMon startup script
// Copyright 2023 Nuno Aguiar
// check version
af.getVersion() >= "20170101" || (print("Version " + af.getVersion() + ". You need OpenAF version 20170101 to run.")) || exit(-1);
var params = processExpr();
var NATTRMON_HOME = getEnv("NATTRMON_HOME");
if (isUnDef(NATTRMON_HOME)) NATTRMON_HOME = getOPackPath("nAttrMon") || ".";
var NATTRMON_SUBHOME = getEnv("NATTRMON_DIR");
if (isUnDef(NATTRMON_SUBHOME)) NATTRMON_SUBHOME = params.withHome || NATTRMON_HOME;
loadLib(NATTRMON_HOME + "/lib/nmain.js");
// ----------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------
var nattrmon;
if (isUnDef(params.withDirectory)) {
nattrmon = new nAttrMon(NATTRMON_SUBHOME + "/config", params.__NAM_DEBUG || __NAM_DEBUG);
} else {
nattrmon = new nAttrMon(params.withDirectory, params.__NAM_DEBUG || __NAM_DEBUG);
}
var __sleepperiod = 60000; // less aggressive
var __stuckfactor = 500;
// Option stop
if (isDef(params.stop)) {
pidKill(ow.server.getPid(NATTRMON_SUBHOME + "/nattrmon.pid"));
exit(1);
}
ow.server.checkIn(NATTRMON_SUBHOME + "/nattrmon.pid", function(aPid) {
if (isDef(params.restart)) {
log("Killing process " + ow.server.getPid(aPid));
if (!pidKill(ow.server.getPid(aPid), false))
pidKill(ow.server.getPid(aPid), true);
return true;
} else {
if (isDef(params.stop)) {
exit(0);
}
if (isDef(params.status)) {
var pid = ow.server.getPid(aPid);
if (isDef(pid)) log("Running on pid = " + pid);
}
return false;
}
}, function() {
nattrmon.stop();
log("nAttrMon stopped.");
});
if (isDef(params.status)) {
log("Not running");
exit(0);
}
nattrmon.start();
log("nAttrMon started (main=" + NATTRMON_HOME + "; home=" + NATTRMON_SUBHOME + ").");
ow.server.daemon(__sleepperiod, function() {
// Check main health
if ( (now() - nattrmon.count) >= (nattrmon.countCheck * __stuckfactor) ) {
log("nAttrmon seems to be stuck.");
log("nAttrMon restarting process!!");
nattrmon.stop();
restartOpenAF();
}
// Check all threads
for(var uuid in nattrmon.threadsSessions) {
if ( isUnDef(nattrmon.threadsSessions[uuid].entry.getCron()) &&
nattrmon.threadsSessions[uuid].entry.aTime > 0 &&
(now() - nattrmon.threadsSessions[uuid].count) >= (nattrmon.threadsSessions[uuid].entry.aTime * __stuckfactor) ) {
log("nAttrmon found a stuck thread (" + uuid + " for '" + nattrmon.threadsSessions[uuid].entry.getName() + "')");
log("nAttrMon restarting process!!");
nattrmon.stop();
restartOpenAF();
}
}
});
nattrmon.stop();
log("nAttrMon stopped.");
print(new Date() + " | Stopping.");