我尝试创建简单的监控工具来ping配置文件中的所有服务。为所有项目同时运行ping命令。目前,我可以按索引ping单个元素,我如何才能为每个人执行此操作?
config/host.yml
default:
server:
port: 3000
hosts:
type: 'CaP AC'
development:
hosts:
type: 'CaP AC'
model: 'RBcAPGi-5acD2nD'
location: 'Office'
list:
- host: '10.10.10.10'
user: 'admin'
password: 'password'
name: 'cap-1'
- host: '10.10.4.5'
user: 'admin'
password: 'password'
name: 'cap-2'控制器/update.js
const Hosts = require('./hosts');
const Monitor = require('ping-monitor');
module.exports = {
Ping: function (config) {
return new Promise(function (resolve, reject) {
config.hosts.list.forEach(cap => {
let pong = new Monitor({
website: "http://"+config.host,
interval: 1,
config: {
intervalUnits: "seconds"
},
ignoreSSL: true
})
pong.on('up', function (res, state) {
console.log('Service up!');
});
pong.on('error', function (error, res) {
console.error(error);
});
})
})
}控制器/hosts.js
var hosts = [];
module.exports = hosts;index.js
const config = yaml_config.load(__dirname + '/config/host.yml');
const Update = require('./controllers/update');
const Hosts = require('./controllers/hosts');
Update.Ping(config).then(result => {
result.forEach(cap => {
console.log(cap +result)
}).catch((err) => {
console.log(err)
});
})发布于 2021-02-04 22:13:01
您可以将每个显示器包装在promise中,并在打印接收状态之前等待所有这些promise。下面是一些示例代码,它们应该会对您有所帮助:
module.exports = {
Ping: function (config) {
const monitorPromises = config.hosts.list.map(currConfig => {
return new Promise((resolve) => {
const currMonitor = new Monitor({
website: "http://" + currConfig.host,
interval: 1,
config: {
intervalUnits: "seconds"
},
ignoreSSL: true
});
currMonitor.on('up', function (res, state) {
resolve(`${res.website}:${res.port} is up.`);
});
currMonitor.on('down', function (res) {
resolve(`${res.website} is down!, statusMessage: ${res.statusMessage}`);
});
currMonitor.on('stop', function (res, state) {
resolve(`${res.website} monitor has stopped.`);
});
currMonitor.on('error', function (error, res) {
resolve(error);
});
currMonitor.on('timeout', function (error, res) {
resolve(error);
});
});
});
console.log("done");
return Promise.all(monitorPromises);
}
};然后,在调用方中,您可以执行以下操作:
Update.Ping(config).then(monitors => {
monitors.forEach(result => {
console.log(result);
}).catch((err) => {
console.log(err)
});
})https://stackoverflow.com/questions/66044909
复制相似问题