53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
const {MongoManager} = require("./workers/mongo_manager");
|
|
const {_android: android} = require("playwright");
|
|
const alert = require("alert");
|
|
const LinkValidator = require("./workers/LinkValidator");
|
|
const mongoManager = new MongoManager();
|
|
const schedule = require('node-schedule');
|
|
let canContinue = true;
|
|
|
|
function validateLinks() {
|
|
|
|
android.devices().then((devices) => {
|
|
if (devices.length === 0) {
|
|
alert("未找到连接的设备");
|
|
return
|
|
}
|
|
mongoManager.getAllLinkToValidate().then(list => {
|
|
let segmentNumber = list.length / devices.length;
|
|
console.log("connected device number:" + devices.length)
|
|
console.log("segmentNumber:" + segmentNumber)
|
|
canContinue = false;
|
|
for (let i = 0; i < devices.length; i++) {
|
|
startWithList(list.slice(i * segmentNumber, segmentNumber * (i + 1)), devices[i]).then(result => {
|
|
console.log("stop")
|
|
canContinue = true;
|
|
})
|
|
}
|
|
})
|
|
|
|
})
|
|
}
|
|
|
|
|
|
async function startWithList(listOfUrls, device) {
|
|
await listOfUrls.reduce(async (promise, urlToValidate) => {
|
|
// This line will wait for the last async function to finish.
|
|
// The first iteration uses an already resolved Promise
|
|
// so, it will immediately continue.
|
|
await promise;
|
|
let commandor = new LinkValidator(device, urlToValidate.url, mongoManager);
|
|
await commandor.loadPage()
|
|
console.log("next");
|
|
}, Promise.resolve());
|
|
}
|
|
|
|
mongoManager.connect().then(r => {
|
|
const job = schedule.scheduleJob('*/1 * * * *', function () {
|
|
if (canContinue) {
|
|
validateLinks()
|
|
} else {
|
|
console.log("job is executing, ignored")
|
|
}
|
|
})
|
|
}); |