From 6a8751afd25991ca762dc67182af4b0efc909aa8 Mon Sep 17 00:00:00 2001 From: PhilKunz Date: Sun, 31 Jul 2016 21:05:41 +0200 Subject: [PATCH] now has possibility to end streaming requests --- .gitlab-ci.yml | 1 + dist/dockersock.classes.dockersock.d.ts | 2 + dist/dockersock.classes.dockersock.js | 16 ++- dist/dockersock.plugins.d.ts | 1 + dist/dockersock.plugins.js | 3 +- package.json | 9 +- test/test.js | 12 +- test/test.ts | 10 +- ts/dockersock.classes.dockersock.ts | 181 +++++++++++++----------- ts/dockersock.plugins.ts | 1 + 10 files changed, 143 insertions(+), 93 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a9027b7..eda8a77 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -43,6 +43,7 @@ release: - priv trigger: + image: hosttoday/ht-docker-node:npmts stage: trigger script: - npmci trigger diff --git a/dist/dockersock.classes.dockersock.d.ts b/dist/dockersock.classes.dockersock.d.ts index e937ec2..f997df5 100644 --- a/dist/dockersock.classes.dockersock.d.ts +++ b/dist/dockersock.classes.dockersock.d.ts @@ -4,6 +4,7 @@ import * as plugins from "./dockersock.plugins"; import { Observable } from "rxjs"; export declare class Dockersock { sockPath: string; + requestObjectmap: plugins.lik.Objectmap; constructor(pathArg?: string); auth(userArg: string, passArg: string): plugins.q.Promise<{}>; listContainers(): plugins.q.Promise<{}>; @@ -23,4 +24,5 @@ export declare class Dockersock { getChangeObservable(): Observable<{}>; request(methodArg: string, routeArg: string, queryArg?: string, dataArg?: {}): plugins.q.Promise<{}>; requestStream(methodArg: string, routeArg: string, queryArg?: string, dataArg?: {}): plugins.q.Promise<{}>; + endRequests(): void; } diff --git a/dist/dockersock.classes.dockersock.js b/dist/dockersock.classes.dockersock.js index 0319b77..cbf319d 100644 --- a/dist/dockersock.classes.dockersock.js +++ b/dist/dockersock.classes.dockersock.js @@ -4,6 +4,7 @@ const plugins = require("./dockersock.plugins"); const rxjs_1 = require("rxjs"); class Dockersock { constructor(pathArg = "http://unix:/var/run/docker.sock:") { + this.requestObjectmap = new plugins.lik.Objectmap(); this.sockPath = pathArg; } // methods @@ -149,6 +150,7 @@ class Dockersock { ; }); requestStream.on("response", (response) => { + this.requestObjectmap.add(response); if (response.statusCode == 200) { plugins.beautylog.ok("request returned status 200, so we are good!"); } @@ -158,6 +160,7 @@ class Dockersock { }); let changeObservable = rxjs_1.Observable.fromEvent(requestStream, "data"); requestStream.on("end", () => { + this.requestObjectmap.remove(requestStream); }); return changeObservable; } @@ -215,6 +218,7 @@ class Dockersock { } ; }); + this.requestObjectmap.add(requestStream); requestStream.on("response", (response) => { if (response.statusCode == 200) { plugins.beautylog.ok("request returned status 200, so we are good!"); @@ -229,8 +233,18 @@ class Dockersock { status = JSON.parse(data.toString()).status; plugins.beautylog.logReduced(status); }); + requestStream.on("end", () => { + this.requestObjectmap.remove(requestStream); + }); return done.promise; } + ; + endRequests() { + this.requestObjectmap.forEach((itemArg) => { + itemArg.emit("end"); + }); + this.requestObjectmap.wipe(); + } } exports.Dockersock = Dockersock; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2Vyc29jay5jbGFzc2VzLmRvY2tlcnNvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9kb2NrZXJzb2NrLmNsYXNzZXMuZG9ja2Vyc29jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFDUCxDQUFDLENBRHNCO0FBQ3ZCLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsdUJBQXlCLE1BQU0sQ0FBQyxDQUFBO0FBRWhDO0lBRUksWUFBWSxPQUFPLEdBQVUsbUNBQW1DO1FBQzVELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVO0lBQ1YsSUFBSSxDQUFDLE9BQWMsRUFBQyxPQUFjO1FBQzlCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUNELGNBQWM7UUFDVixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFDLGFBQWEsQ0FBQzthQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7O0lBQ0Qsc0JBQXNCO1FBQ2xCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRTthQUNoQixJQUFJLENBQUMsQ0FBQyxPQUFPO1lBQ1YsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2Vyc29jay5jbGFzc2VzLmRvY2tlcnNvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9kb2NrZXJzb2NrLmNsYXNzZXMuZG9ja2Vyc29jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFDUCxDQUFDLENBRHNCO0FBQ3ZCLE1BQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFDaEQsdUJBQTJCLE1BQU0sQ0FBQyxDQUFBO0FBRWxDO0lBR0ksWUFBWSxPQUFPLEdBQVcsbUNBQW1DO1FBRGpFLHFCQUFnQixHQUEwQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVU7SUFDVixJQUFJLENBQUMsT0FBZSxFQUFFLE9BQWU7UUFDakMsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBQ0QsY0FBYztRQUNWLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDO2FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQzs7SUFDRCxzQkFBc0I7UUFDbEIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxFQUFF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 \ No newline at end of file diff --git a/dist/dockersock.plugins.d.ts b/dist/dockersock.plugins.d.ts index 23a3be6..446b8b8 100644 --- a/dist/dockersock.plugins.d.ts +++ b/dist/dockersock.plugins.d.ts @@ -1,5 +1,6 @@ import "typings-global"; export import beautylog = require("beautylog"); +export import lik = require("lik"); export import q = require("q"); export import request = require("request"); export import rxjs = require("rxjs"); diff --git a/dist/dockersock.plugins.js b/dist/dockersock.plugins.js index 6f70d42..e39bcbb 100644 --- a/dist/dockersock.plugins.js +++ b/dist/dockersock.plugins.js @@ -1,7 +1,8 @@ "use strict"; require("typings-global"); exports.beautylog = require("beautylog"); +exports.lik = require("lik"); exports.q = require("q"); exports.request = require("request"); exports.rxjs = require("rxjs"); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2Vyc29jay5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvZG9ja2Vyc29jay5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDVixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLFNBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNqQixlQUFPLFdBQVcsU0FBUyxDQUFDLENBQUM7QUFDN0IsWUFBSSxXQUFXLE1BQU0sQ0FBQyxDQUFDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2Vyc29jay5wbHVnaW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvZG9ja2Vyc29jay5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxRQUFPLGdCQUFnQixDQUFDLENBQUE7QUFDVixpQkFBUyxXQUFXLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLFdBQUcsV0FBVyxLQUFLLENBQUMsQ0FBQztBQUNyQixTQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDakIsZUFBTyxXQUFXLFNBQVMsQ0FBQyxDQUFDO0FBQzdCLFlBQUksV0FBVyxNQUFNLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/package.json b/package.json index edd2b40..d55686d 100644 --- a/package.json +++ b/package.json @@ -27,15 +27,16 @@ "dependencies": { "@types/q": "^0.0.27", "@types/request": "^0.0.27", - "beautylog": "^5.0.14", + "beautylog": "^5.0.18", + "lik": "^1.0.7", "q": "^1.4.1", - "request": "^2.73.0", + "request": "^2.74.0", "rxjs": "^5.0.0-beta.10", "typings-global": "^1.0.6" }, "devDependencies": { - "npmts-g": "^5.2.6", - "should": "^9.0.2", + "npmts-g": "^5.2.8", + "should": "^10.0.0", "typings-test": "^1.0.1" } } diff --git a/test/test.js b/test/test.js index 4973f13..b0a6741 100644 --- a/test/test.js +++ b/test/test.js @@ -29,8 +29,16 @@ describe("dockersock", function () { testDockersock.pullImage("hosttoday/ht-docker-dbase") .then((dataArg) => { done(); - }, done); + }); + }); + it("should return a change Objservable", function (done) { + this.timeout(10000); + testDockersock.getChangeObservable(); + setTimeout(() => { + testDockersock.endRequests(); + done(); + }, 5000); }); }); }); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUVoQix3QkFBeUIsZUFFekIsQ0FBQyxDQUZ1QztBQUV4QyxRQUFRLENBQUMsWUFBWSxFQUFDO0lBQ2xCLFFBQVEsQ0FBQyxlQUFlLEVBQUM7UUFDckIsSUFBSSxjQUF5QixDQUFDO1FBQzlCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBQztZQUN6QyxjQUFjLEdBQUcsSUFBSSxrQkFBVSxFQUFFLENBQUM7WUFDbEMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGtCQUFVLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyx3QkFBd0IsRUFBQyxVQUFTLElBQUk7WUFDckMsY0FBYyxDQUFDLGNBQWMsRUFBRTtpQkFDMUIsSUFBSSxDQUFDLENBQUMsT0FBTztnQkFDVixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyQixJQUFJLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsaUNBQWlDLEVBQUMsVUFBUyxJQUFJO1lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsY0FBYyxDQUFDLHNCQUFzQixFQUFFO2lCQUNsQyxJQUFJLENBQUMsQ0FBQyxPQUFPO2dCQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBQyxVQUFTLElBQUk7WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixjQUFjLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDO2lCQUNoRCxJQUFJLENBQUMsQ0FBQyxPQUFPO2dCQUNWLElBQUksRUFBRSxDQUFDO1lBQ1gsQ0FBQyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sY0FBYyxDQUFDLENBQUE7QUFDdEIsUUFBTyxRQUFRLENBQUMsQ0FBQTtBQUVoQix3QkFBeUIsZUFFekIsQ0FBQyxDQUZ1QztBQUV4QyxRQUFRLENBQUMsWUFBWSxFQUFDO0lBQ2xCLFFBQVEsQ0FBQyxlQUFlLEVBQUM7UUFDckIsSUFBSSxjQUF5QixDQUFDO1FBQzlCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBQztZQUN6QyxjQUFjLEdBQUcsSUFBSSxrQkFBVSxFQUFFLENBQUM7WUFDbEMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLGtCQUFVLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyx3QkFBd0IsRUFBQyxVQUFTLElBQUk7WUFDckMsY0FBYyxDQUFDLGNBQWMsRUFBRTtpQkFDMUIsSUFBSSxDQUFDLENBQUMsT0FBTztnQkFDVixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyQixJQUFJLEVBQUUsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsaUNBQWlDLEVBQUMsVUFBUyxJQUFJO1lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsY0FBYyxDQUFDLHNCQUFzQixFQUFFO2lCQUNsQyxJQUFJLENBQUMsQ0FBQyxPQUFPO2dCQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBQyxVQUFTLElBQUk7WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixjQUFjLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDO2lCQUNoRCxJQUFJLENBQUMsQ0FBQyxPQUFPO2dCQUNWLElBQUksRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBQyxVQUFTLElBQUk7WUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixjQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNyQyxVQUFVLENBQUM7Z0JBQ1AsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QixJQUFJLEVBQUUsQ0FBQztZQUNYLENBQUMsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyJ9 \ No newline at end of file diff --git a/test/test.ts b/test/test.ts index 4e56c9e..71e6824 100644 --- a/test/test.ts +++ b/test/test.ts @@ -30,7 +30,15 @@ describe("dockersock",function(){ testDockersock.pullImage("hosttoday/ht-docker-dbase") .then((dataArg)=>{ done(); - },done); + }); + }); + it("should return a change Objservable",function(done){ + this.timeout(10000); + testDockersock.getChangeObservable(); + setTimeout(() => { + testDockersock.endRequests(); + done(); + },5000); }) }); }); \ No newline at end of file diff --git a/ts/dockersock.classes.dockersock.ts b/ts/dockersock.classes.dockersock.ts index 535e345..d8b9939 100644 --- a/ts/dockersock.classes.dockersock.ts +++ b/ts/dockersock.classes.dockersock.ts @@ -1,22 +1,23 @@ import "typings-global" import * as plugins from "./dockersock.plugins"; -import {Observable} from "rxjs"; +import { Observable } from "rxjs"; export class Dockersock { - sockPath:string; - constructor(pathArg:string = "http://unix:/var/run/docker.sock:"){ + sockPath: string; + requestObjectmap: plugins.lik.Objectmap = new plugins.lik.Objectmap(); + constructor(pathArg: string = "http://unix:/var/run/docker.sock:") { this.sockPath = pathArg; } // methods - auth(userArg:string,passArg:string){ + auth(userArg: string, passArg: string) { let done = plugins.q.defer(); - this.request("POST",""); + this.request("POST", ""); return done.promise; } listContainers() { let done = plugins.q.defer(); - this.request("GET","/containers") + this.request("GET", "/containers") .then(done.resolve); return done.promise; }; @@ -27,8 +28,8 @@ export class Dockersock { .then((dataArg) => { let recursiveCounter = 0; let makeDetailed = () => { - if(typeof dataArg[recursiveCounter] != "undefined"){ - this.request("GET","/containers/" + dataArg[recursiveCounter].Id) + if (typeof dataArg[recursiveCounter] != "undefined") { + this.request("GET", "/containers/" + dataArg[recursiveCounter].Id) .then((dataArg2) => { detailedDataObject.push(dataArg2); recursiveCounter++; @@ -52,21 +53,21 @@ export class Dockersock { return done.promise; } listImages() { - return this.request("GET","/images","?all=true"); + return this.request("GET", "/images", "?all=true"); } - listImagesDangling(){ - return this.request("GET","/images","?dangling=true"); + listImagesDangling() { + return this.request("GET", "/images", "?dangling=true"); } - pullImage(imageLabelArg:string){ + pullImage(imageLabelArg: string) { let imageLabel = encodeURI(imageLabelArg); - return this.requestStream("POST","/images/create?fromImage=" + imageLabel); + return this.requestStream("POST", "/images/create?fromImage=" + imageLabel); }; - createContainer(optionsArg,pullFirstArg:boolean = true){ + createContainer(optionsArg, pullFirstArg: boolean = true) { let done = plugins.q.defer(); let create = () => { - return this.request("POST","/containers/create","",optionsArg); + return this.request("POST", "/containers/create", "", optionsArg); } - if(pullFirstArg){ + if (pullFirstArg) { this.pullImage(optionsArg.Image) .then(create) .then(done.resolve); @@ -76,37 +77,37 @@ export class Dockersock { } return done.promise; }; - getContainerId(){ + getContainerId() { }; - startContainer(containerNameArg){ - return this.request("POST","/containers/"+ containerNameArg +"/start"); + startContainer(containerNameArg) { + return this.request("POST", "/containers/" + containerNameArg + "/start"); }; - stopContainer(containerNameArg){ - return this.request("POST","/containers/"+ containerNameArg +"/stop"); + stopContainer(containerNameArg) { + return this.request("POST", "/containers/" + containerNameArg + "/stop"); }; - removeContainer(containerNameArg){ - return this.request("DELETE","/containers/" + containerNameArg + "?v=1"); + removeContainer(containerNameArg) { + return this.request("DELETE", "/containers/" + containerNameArg + "?v=1"); }; clean() { let done = plugins.q.defer(); return done.promise; }; - callOnChange(cb:Function){ + callOnChange(cb: Function) { let cbPromise; - let changeBuffered:boolean = false; // when cb is running then buffer any consequent change + let changeBuffered: boolean = false; // when cb is running then buffer any consequent change let requestStream = plugins.request.get(this.sockPath + "/events"); - requestStream.on("response",(response) => { - if(response.statusCode == 200){ - plugins.beautylog.ok("request returned status 200, so we are good!"); - } else { - plugins.beautylog.error("request returned error: " + response.statusCode); - } - }); - requestStream.on("data",(data:Buffer) => { + requestStream.on("response", (response) => { + if (response.statusCode == 200) { + plugins.beautylog.ok("request returned status 200, so we are good!"); + } else { + plugins.beautylog.error("request returned error: " + response.statusCode); + } + }); + requestStream.on("data", (data: Buffer) => { let status = JSON.parse(data.toString()).status; plugins.beautylog.logReduced(status); - if(typeof cbPromise == "undefined" || cbPromise.state == "pending"){ + if (typeof cbPromise == "undefined" || cbPromise.state == "pending") { cbPromise = cb(); } else if (changeBuffered) { changeBuffered = true; @@ -116,54 +117,56 @@ export class Dockersock { }); } }); - requestStream.on("end",()=> { - - }); + requestStream.on("end", () => { + + }); }; - getChangeObservable(){ + getChangeObservable() { let options = { - method:"GET", - url:this.sockPath + "/events", - headers:{ - "Content-Type":"application/json", - "Host":"docker.sock" + method: "GET", + url: this.sockPath + "/events", + headers: { + "Content-Type": "application/json", + "Host": "docker.sock" } }; - let requestStream = plugins.request(options,(err, res, body) => { + let requestStream = plugins.request(options, (err, res, body) => { if (!err && res.statusCode == 200) { } else { console.log(err); console.log(res); }; }); - requestStream.on("response",(response) => { - if(response.statusCode == 200){ - plugins.beautylog.ok("request returned status 200, so we are good!"); - } else { - plugins.beautylog.error("request returned error: " + response.statusCode); - } - }); - let changeObservable = Observable.fromEvent(requestStream,"data"); - requestStream.on("end",()=> { + requestStream.on("response", (response) => { + this.requestObjectmap.add(response); + if (response.statusCode == 200) { + plugins.beautylog.ok("request returned status 200, so we are good!"); + } else { + plugins.beautylog.error("request returned error: " + response.statusCode); + } + }); + let changeObservable = Observable.fromEvent(requestStream, "data"); + requestStream.on("end", () => { + this.requestObjectmap.remove(requestStream); }); return changeObservable; } - request(methodArg:string,routeArg:string,queryArg:string = "", dataArg = {}){ + request(methodArg: string, routeArg: string, queryArg: string = "", dataArg = {}) { let done = plugins.q.defer(); - let jsonArg:string = JSON.stringify(dataArg); - let suffix:string = ""; - if(methodArg == "GET") suffix = "/json"; + let jsonArg: string = JSON.stringify(dataArg); + let suffix: string = ""; + if (methodArg == "GET") suffix = "/json"; let options = { - method:methodArg, - url:this.sockPath + routeArg + suffix + queryArg, - headers:{ - "Content-Type":"application/json", - "Host":"docker.sock" + method: methodArg, + url: this.sockPath + routeArg + suffix + queryArg, + headers: { + "Content-Type": "application/json", + "Host": "docker.sock" }, - body:jsonArg + body: jsonArg }; //console.log(options); - plugins.request(options,(err, res, body) => { + plugins.request(options, (err, res, body) => { if (!err && res.statusCode == 200) { var responseObj = JSON.parse(body); done.resolve(responseObj); @@ -175,20 +178,20 @@ export class Dockersock { }); return done.promise; } - requestStream(methodArg:string,routeArg:string,queryArg:string = "", dataArg = {}){ + requestStream(methodArg: string, routeArg: string, queryArg: string = "", dataArg = {}) { let done = plugins.q.defer(); - let jsonArg:string = JSON.stringify(dataArg); - let suffix:string = ""; + let jsonArg: string = JSON.stringify(dataArg); + let suffix: string = ""; let options = { - method:methodArg, - url:this.sockPath + routeArg + suffix + queryArg, - headers:{ - "Content-Type":"application/json", - "Host":"docker.sock" + method: methodArg, + url: this.sockPath + routeArg + suffix + queryArg, + headers: { + "Content-Type": "application/json", + "Host": "docker.sock" }, - body:jsonArg + body: jsonArg }; - let requestStream = plugins.request(options,(err, res, body) => { + let requestStream = plugins.request(options, (err, res, body) => { if (!err && res.statusCode == 200) { done.resolve(); } else { @@ -197,19 +200,29 @@ export class Dockersock { done.reject(err); }; }); - requestStream.on("response",(response) => { - if(response.statusCode == 200){ - plugins.beautylog.ok("request returned status 200, so we are good!"); - } else { - plugins.beautylog.error("request returned error: " + response.statusCode); - done.reject(response); - } - }); - requestStream.on("data",(data:Buffer) => { + requestStream.on("response", (response) => { + this.requestObjectmap.add(response); + if (response.statusCode == 200) { + plugins.beautylog.ok("request returned status 200, so we are good!"); + } else { + plugins.beautylog.error("request returned error: " + response.statusCode); + done.reject(response); + } + }); + requestStream.on("data", (data: Buffer) => { let status; status = JSON.parse(data.toString()).status; plugins.beautylog.logReduced(status); }); + requestStream.on("end", () => { + this.requestObjectmap.remove(requestStream); + }); return done.promise; - } + }; + endRequests() { + this.requestObjectmap.forEach((itemArg: plugins.request.Request) => { + itemArg.emit("end"); + }); + this.requestObjectmap.wipe(); + }; } \ No newline at end of file diff --git a/ts/dockersock.plugins.ts b/ts/dockersock.plugins.ts index e844842..b025c69 100644 --- a/ts/dockersock.plugins.ts +++ b/ts/dockersock.plugins.ts @@ -1,5 +1,6 @@ import "typings-global"; export import beautylog = require("beautylog"); +export import lik = require("lik"); export import q = require("q"); export import request = require("request"); export import rxjs = require("rxjs"); \ No newline at end of file