You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2019/07/09 08:24:12 UTC
[sling-whiteboard] 02/03: Start + cleanup test container
This is an automated email from the ASF dual-hosted git repository.
bdelacretaz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
commit 0284a7257fc2d77af4bc59c5feb49e593f2e2395
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Tue Jul 9 10:21:14 2019 +0200
Start + cleanup test container
---
graalvm/time-to-first-request/index.js | 50 +++++++++++++++++++++++++++++-----
1 file changed, 43 insertions(+), 7 deletions(-)
diff --git a/graalvm/time-to-first-request/index.js b/graalvm/time-to-first-request/index.js
index 1db88bb..987e304 100644
--- a/graalvm/time-to-first-request/index.js
+++ b/graalvm/time-to-first-request/index.js
@@ -46,22 +46,58 @@ const waitOpts = {
};
const docker = new Docker();
+const actions = {};
-var server = http.createServer(function(req, res) {
+const getContainer = (async imageName => {
+ const containers = await docker.listContainers();
+ return containers.find(container => {
+ return container.Image == imageName;
+ });
+});
+
+var server = http.createServer(async (req, res) => {
const et = elapsedTime.new().start();
- // TODO detect if container is already running, instead of blind catch
- // (maybe use node-docker-api instead)
+ existingContainer = await getContainer(dockerImage);
+
+ if(existingContainer) {
+ console.log(`Container is already running: ${dockerImage}(${et.getValue()})`);
+ } else {
+ actions.startedContainer = true;
+ console.log(`Starting container: ${dockerImage}(${et.getValue()})`);
+ docker.run(dockerImage, null, null, dockerStartOptions);
+ }
- console.log(`Starting container ${dockerImage}(${et.getValue()})`);
- docker.run(dockerImage, null, process.stderr, dockerStartOptions);
+ // No need to wait for async call, just wait for our URL
console.log(`Waiting on ${waitOpts.resources[0]} (${et.getValue()})`);
waitOn(waitOpts).then(() =>{
- console.log(`Time to first request to ${waitUrl}: (${et.getValue()})`);
+ console.log(`Time to wait for ${waitUrl}: (${et.getValue()})`);
console.log(`Proxying ${req.url} (${et.getValue()})`);
proxy.web(req, res, { target: targetUrl });
console.log(`Done proxying (${et.getValue()})`);
});
});
+const cleanup = async () => {
+ if(!actions.startedContainer) {
+ console.log('Did not start container, nothing to cleanup');
+ } else {
+ const runningContainer = await getContainer(dockerImage);
+ if(runningContainer) {
+ console.log(`cleanup: killing container ${dockerImage}/${runningContainer.Id.substring(0,12)} ...`);
+ const container = await docker.getContainer(runningContainer.Id);
+ await container.kill();
+ console.log('killed');
+ }
+ }
+ process.exit();
+}
+
+[
+ 'SIGINT',
+ 'SIGTERM',
+].forEach(signal => {
+ process.on(signal, cleanup);
+})
+
console.log(`listening on port ${listenPort}, proxying to ${targetUrl}`);
-server.listen(listenPort);
\ No newline at end of file
+server.listen(listenPort)
\ No newline at end of file