From b0eb6b5da92d9423588663585fce73febbb9b1a7 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Sat, 26 Jan 2019 09:02:25 -0800 Subject: [PATCH] Added endpoint for app logs --- captain-sample-apps/react-via-caprover | 1 + package-lock.json | 34 ++++++++------------------ package.json | 2 +- src/docker/DockerApi.ts | 16 ++++++++++++ src/routes/apps/AppDataRouter.ts | 20 +++++++++++++++ src/user/ServiceManager.ts | 18 ++++++++++++++ src/utils/CaptainConstants.ts | 2 ++ 7 files changed, 68 insertions(+), 25 deletions(-) create mode 160000 captain-sample-apps/react-via-caprover diff --git a/captain-sample-apps/react-via-caprover b/captain-sample-apps/react-via-caprover new file mode 160000 index 0000000..10014e0 --- /dev/null +++ b/captain-sample-apps/react-via-caprover @@ -0,0 +1 @@ +Subproject commit 10014e0bd7be6c4a5ca995b8b97293556f60a16c diff --git a/package-lock.json b/package-lock.json index c5ee950..17f1678 100644 --- a/package-lock.json +++ b/package-lock.json @@ -86,9 +86,9 @@ } }, "@types/dockerode": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-2.5.10.tgz", - "integrity": "sha512-Aiy0iYuWudPOHNc69LYHCfvjzvJ0KaRIkM9o6unMQSOh7rp7/KydUVb5KRGRSoRk9V7uWv9IssEi/ahF4yaOkA==", + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-2.5.11.tgz", + "integrity": "sha512-9FY53BDPLc5Kof3vV4IF1PTCslnlJR+kn/1HNJsYlAdSntUU5PU59aKBH1I9vTAFqcUcRsNGvaZo/7VhQLfwew==", "requires": { "@types/node": "*" } @@ -2535,14 +2535,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2557,20 +2555,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2687,8 +2682,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -2700,7 +2694,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2715,7 +2708,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2723,14 +2715,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -2749,7 +2739,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -2830,8 +2819,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -2843,7 +2831,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -2965,7 +2952,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", diff --git a/package.json b/package.json index e628a79..b88a984 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "@types/bcryptjs": "^2.4.2", "@types/configstore": "^4.0.0", "@types/cookie-parser": "^1.4.1", - "@types/dockerode": "^2.5.10", + "@types/dockerode": "^2.5.11", "@types/ejs": "^2.6.1", "@types/express": "^4.16.0", "@types/fs-extra": "^5.0.4", diff --git a/src/docker/DockerApi.ts b/src/docker/DockerApi.ts index b74298f..ee845b5 100644 --- a/src/docker/DockerApi.ts +++ b/src/docker/DockerApi.ts @@ -1471,6 +1471,22 @@ class DockerApi { }) } + getLogForService(serviceName: string, tailCount: number) { + const self = this + return Promise.resolve() // + .then(function() { + // TODO REMOVE any once dockerode definition is fixed. + // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/32508 + return (self.dockerode.getService(serviceName) as any) // + .logs({ + tail: tailCount, + timestamps: true, + stdout: true, + stderr: true, + }) + }) + } + getDockerVersion() { const self = this diff --git a/src/routes/apps/AppDataRouter.ts b/src/routes/apps/AppDataRouter.ts index bef9df8..4accbf9 100644 --- a/src/routes/apps/AppDataRouter.ts +++ b/src/routes/apps/AppDataRouter.ts @@ -14,6 +14,26 @@ const upload = multer({ dest: TEMP_UPLOAD, }) +router.get('/:appName/logs', function(req, res, next) { + let appName = req.params.appName + const serviceManager = InjectionExtractor.extractUserFromInjected(res).user + .serviceManager + + return Promise.resolve() + .then(function() { + return serviceManager.getAppLogs(appName) + }) + .then(function(logs) { + let baseApi = new BaseApi( + ApiStatusCodes.STATUS_OK, + 'App build status retrieved' + ) + baseApi.data = {logs} + res.send(baseApi) + }) + .catch(ApiStatusCodes.createCatcher(res)) +}) + router.get('/:appName/', function(req, res, next) { let appName = req.params.appName const serviceManager = InjectionExtractor.extractUserFromInjected(res).user diff --git a/src/user/ServiceManager.ts b/src/user/ServiceManager.ts index 870b50b..283e8b9 100644 --- a/src/user/ServiceManager.ts +++ b/src/user/ServiceManager.ts @@ -570,6 +570,24 @@ class ServiceManager { this.buildLogs[appName].onBuildFailed(error) } + getAppLogs(appName: string) { + const self = this + + const serviceName = this.dataStore + .getAppsDataStore() + .getServiceName(appName) + + const dockerApi = this.dockerApi + + return Promise.resolve() // + .then(function() { + return dockerApi.getLogForService( + serviceName, + CaptainConstants.configs.appLogSize + ) + }) + } + ensureServiceInitedAndUpdated(appName: string) { Logger.d('Ensure service inited and Updated for: ' + appName) const self = this diff --git a/src/utils/CaptainConstants.ts b/src/utils/CaptainConstants.ts index 98a3314..5b21e8f 100644 --- a/src/utils/CaptainConstants.ts +++ b/src/utils/CaptainConstants.ts @@ -23,6 +23,8 @@ const configs = { buildLogSize: 50, + appLogSize: 500, + preCheckForWildCard: true, registrySubDomainPort: 996,