mirror of
https://github.com/lubosz/overte.git
synced 2025-08-19 04:26:56 +02:00
Add ac monitor status monitoring
This commit is contained in:
parent
e0acaacc65
commit
9c4e0d5b19
1 changed files with 85 additions and 3 deletions
|
@ -1,5 +1,6 @@
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
|
var request = require('request');
|
||||||
var extend = require('extend');
|
var extend = require('extend');
|
||||||
var util = require('util');
|
var util = require('util');
|
||||||
var events = require('events');
|
var events = require('events');
|
||||||
|
@ -19,6 +20,8 @@ const ProcessStates = {
|
||||||
STOPPING: 'stopping'
|
STOPPING: 'stopping'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function ProcessGroup(name, processes) {
|
function ProcessGroup(name, processes) {
|
||||||
events.EventEmitter.call(this);
|
events.EventEmitter.call(this);
|
||||||
|
|
||||||
|
@ -230,13 +233,92 @@ Process.prototype = extend(Process.prototype, {
|
||||||
this.emit('state-update', this);
|
this.emit('state-update', this);
|
||||||
},
|
},
|
||||||
onChildClose: function(code) {
|
onChildClose: function(code) {
|
||||||
console.log("Child process closed with code ", code);
|
console.log("Child process closed with code ", code, this.name);
|
||||||
this.state = ProcessStates.STOPPED;
|
if (this.stoppingTimeoutID) {
|
||||||
this.emit('state-update', this);
|
clearTimeout(this.stoppingTimeoutID);
|
||||||
|
this.stoppingTimeoutID = null;
|
||||||
|
}
|
||||||
|
this.updateState(ProcessStates.STOPPED);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// ACMonitorProcess is an extension of Process that keeps track of the AC Montior's
|
||||||
|
// children status and log locations.
|
||||||
|
const CHECK_AC_STATUS_INTERVAL = 5000;
|
||||||
|
function ACMonitorProcess(name, path, args, httpStatusPort, logPath) {
|
||||||
|
Process.call(this, name, path, args, logPath);
|
||||||
|
|
||||||
|
this.httpStatusPort = httpStatusPort;
|
||||||
|
|
||||||
|
this.requestTimeoutID = null;
|
||||||
|
this.pendingRequest = null;
|
||||||
|
this.childServers = {};
|
||||||
|
};
|
||||||
|
util.inherits(ACMonitorProcess, Process);
|
||||||
|
ACMonitorProcess.prototype = extend(ACMonitorProcess.prototype, {
|
||||||
|
updateState: function(newState) {
|
||||||
|
if (ACMonitorProcess.super_.prototype.updateState.call(this, newState)) {
|
||||||
|
if (this.state == ProcessStates.STARTED) {
|
||||||
|
this._updateACMonitorStatus();
|
||||||
|
} else {
|
||||||
|
if (this.requestTimeoutID) {
|
||||||
|
clearTimeout(this.requestTimeoutID);
|
||||||
|
this.requestTimeoutID = null;
|
||||||
|
}
|
||||||
|
if (this.pendingRequest) {
|
||||||
|
this.pendingRequest.destroy();
|
||||||
|
this.pendingRequest = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getLogs: function() {
|
||||||
|
var logs = {};
|
||||||
|
logs[this.child.pid] = {
|
||||||
|
stdout: this.logStdout == 'ignore' ? null : this.logStdout,
|
||||||
|
stderr: this.logStderr == 'ignore' ? null : this.logStderr
|
||||||
|
};
|
||||||
|
for (var pid in this.childServers) {
|
||||||
|
logs[pid] = {
|
||||||
|
stdout: this.childServers[pid].logStdout,
|
||||||
|
stderr: this.childServers[pid].logStderr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(logs);
|
||||||
|
return logs;
|
||||||
|
},
|
||||||
|
_updateACMonitorStatus: function() {
|
||||||
|
if (this.state != ProcessStates.STARTED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there is a pending request, return
|
||||||
|
if (this.pendingRequest) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Checking AC Monitor status");
|
||||||
|
var options = {
|
||||||
|
url: "http://localhost:" + this.httpStatusPort + "/status",
|
||||||
|
json: true
|
||||||
|
};
|
||||||
|
this.pendingRequest = request(options, function(error, response, body) {
|
||||||
|
if (error) {
|
||||||
|
console.error('ERROR Getting AC Monitor status', error);
|
||||||
|
} else {
|
||||||
|
this.childServers = body.servers;
|
||||||
|
}
|
||||||
|
console.log(body);
|
||||||
|
|
||||||
|
this.emit('logs-updated');
|
||||||
|
|
||||||
|
this.requestTimeoutID = setTimeout(this._updateACMonitorStatus.bind(this), CHECK_AC_STATUS_INTERVAL);
|
||||||
|
}.bind(this));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports.Process = Process;
|
module.exports.Process = Process;
|
||||||
|
module.exports.ACMonitorProcess = ACMonitorProcess;
|
||||||
module.exports.ProcessGroup = ProcessGroup;
|
module.exports.ProcessGroup = ProcessGroup;
|
||||||
module.exports.ProcessGroupStates = ProcessGroupStates;
|
module.exports.ProcessGroupStates = ProcessGroupStates;
|
||||||
module.exports.ProcessStates = ProcessStates;
|
module.exports.ProcessStates = ProcessStates;
|
||||||
|
|
Loading…
Reference in a new issue