Last active
September 13, 2017 11:55
-
-
Save msitruk/2cdb655a0bebdb29c61d8bc5606a2695 to your computer and use it in GitHub Desktop.
Why line 27 is executed before line 24 ?????
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Docker = require('dockerode'); | |
const docker = new Docker({ | |
socketPath: '/var/run/docker.sock' | |
}); | |
// CONSTRUCTOR | |
function SearchUtils() { | |
this.listContainersPromise = docker.listContainers({all: true}); | |
this.scraperListId = []; | |
} | |
// "METHODS" | |
SearchUtils.prototype.run = function() { | |
this.getScraperContainersListPromise() | |
.then((containers) => { | |
for (let i = 0; i < containers.length; i++) { | |
if (containers[i].Names.toString().indexOf("scraper") !== -1) { | |
this.addToScraperList(containers[i].Id, "wait"); | |
} | |
} | |
}) | |
.then(()=>{ | |
return this.checkReadyScraper(); | |
}) | |
.then(() => { | |
return this.scrap(); | |
}) | |
.catch(e => console.log(e)); | |
}; | |
SearchUtils.prototype.checkReadyScraper = function() { | |
return new Promise ((resolve, reject)=> { | |
for (let i = 0; i < this.scraperListId.length; i++) { | |
this.exec("getStatus", this.scraperListId[i].id); | |
} | |
resolve("ok"); | |
// TODO ADD EROR STRATEGY | |
reject("error") | |
}); | |
}; | |
SearchUtils.prototype.getScraperContainersListPromise = function() { | |
return this.listContainersPromise; | |
}; | |
SearchUtils.prototype.exec = function(type, containerId){ | |
let container = docker.getContainer(containerId); | |
if (type === "getStatus"){ | |
return this.runExec(container, 'cat /home/immobot/status'); | |
} | |
else if (type === "scrap") { | |
return this.runExec(container, 'torify scrapy crawl seloger -o seloger.json'); | |
} | |
}; | |
SearchUtils.prototype.scrap = function() { | |
return new Promise ((resolve, reject)=> { | |
let localRdyScraperList = []; | |
for (let i = 0; i < this.scraperListId.length; i++) { | |
if(this.scraperListId[i].status.toString('utf8').indexOf("ready") !== -1){ | |
localRdyScraperList.push(this.scraperListId[i].id); | |
} | |
} | |
console.log("test de localRdyScraperList : "+localRdyScraperList); | |
// this.exec("scrap", this.scraperListId[i].id); | |
resolve("ok"); | |
// TODO ADD EROR STRATEGY | |
reject("error") | |
}); | |
}; | |
SearchUtils.prototype.addToScraperList = function(containerId,status) { | |
this.scraperListId.push({id: containerId, status: status}); | |
}; | |
SearchUtils.prototype.getScraperList = function() { | |
return this.scraperListId; | |
}; | |
SearchUtils.prototype.getScraperList = function() { | |
return this.scraperListId; | |
}; | |
SearchUtils.prototype.runExec = function (container, cmd) { | |
return new Promise ((resolve, reject)=>{ | |
let options = { | |
Cmd: [ '/bin/bash', '-c', cmd ], | |
AttachStdout: true, | |
AttachStderr: true | |
}; | |
container.exec(options, (err, exec) => { | |
if (err) return; | |
exec.start((err, stream) => { | |
if (err){ | |
console.log("error : "+err); | |
return; | |
} | |
// container.modem.demuxStream(stream, process.stdout, process.stderr) | |
if (cmd === "cat /home/immobot/status"){ | |
let newStream = require('stream'); | |
let logStream = new newStream.PassThrough(); | |
logStream.on('data', (chunk) => { | |
// console.log(chunk.toString('utf8')); | |
if (chunk.toString('utf8').indexOf("ready") !== -1){ | |
console.log("CONTAINER READY !!"); | |
//EDIT CONTAINER STATUS IN SCRAPERLIST TO READY | |
this.changeStatusToReady(container.id); | |
} | |
}); | |
container.modem.demuxStream(stream, logStream, process.stderr); | |
} | |
else if (cmd === "torify scrapy crawl seloger -o seloger.json"){ | |
console.log("on lance le scrape sur un des scraper rdy"); | |
container.modem.demuxStream(stream, process.stdout, process.stderr) | |
} | |
// container.modem.demuxStream(stream, logStream, process.stderr); | |
exec.inspect(function(err, data) { | |
if (err){ | |
console.log("error : "+err); | |
return; | |
} | |
}); | |
}); | |
}); | |
resolve("ok"); | |
// TODO ADD EROR STRATEGY | |
reject("error") | |
}); | |
}; | |
SearchUtils.prototype.changeStatusToReady = function (containerId){ | |
for (let i = 0; i < this.scraperListId.length; i++) { | |
if(this.scraperListId[i].id === containerId){ | |
this.scraperListId[i].status = "ready"; | |
} | |
} | |
// console.log(this.getScraperList()); | |
}; | |
module.exports = SearchUtils; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
2017-09-13T09:13:35.715052259Z test de localRdyScraperList :
2017-09-13T09:13:35.759151784Z CONTAINER READY !!
2017-09-13T09:13:35.793932539Z CONTAINER READY !!
2017-09-13T09:13:35.843496373Z CONTAINER READY !!