more changes

Signed-off-by: Nakul Manchanda <nakul.manchanda@ibm.com>
This commit is contained in:
Nakul Manchanda
2020-08-11 20:06:21 -05:00
parent 105fd86f03
commit 40ec27e37a
13 changed files with 360 additions and 24 deletions

View File

@@ -2,12 +2,7 @@
A sample node js api for finding cars and accounts for a dealership,its used here to demonstrate the steps to extend API/ML with your own rest api.
## Steps
**Note**
`Only rest api with https support can be deployed behind API/ML, make sure to enable https support in your rest api.
`
This sample express app, has https enabled already.
## PART I: Download & Build on local
### 1) Clone the repository, install node packages and verify routes locally
@@ -17,23 +12,21 @@ This sample express app, has https enabled already.
git clone https://github.com/zowe/sample-node-api
cd sample-node-api
npm install
npm start
npm run dev
```
Open your local browser and try accessing
`https://localhost:4000/accounts/`
`https://localhost:4000/accounts/1`
`https://localhost:4000/accounts/1/cars/`
`http://localhost:18000/accounts/`
`http://localhost:18000/accounts/1`
`http://localhost:18000/accounts/1/cars/`
### 2) Transfer project files from local to remote host
**Note**
Don't transfer `node_modules` folder, we can do install npm install later on remote server itself to pull down required node packages
```
cd sample-node-api
npm run build
npm run dist
scp -r dist ibmuser@my.mainframe.com:</usr/lpp/extender>/sample-node-api
```

276
package-lock.json generated
View File

@@ -1,5 +1,5 @@
{
"name": "sample-api",
"name": "sample-node-api",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
@@ -107,6 +107,15 @@
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"async": {
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
"integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
"dev": true,
"requires": {
"lodash": "^4.17.14"
}
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -429,6 +438,191 @@
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"copy-node-modules": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/copy-node-modules/-/copy-node-modules-1.1.1.tgz",
"integrity": "sha512-yHW0GIH6s515MTxnwsDW/ajL9EXGYNEztQFZ124PEMMNY4SFpS7/gVCQM7zgW2Tk+5k4mGU+nzx7gY4zXi/40A==",
"dev": true,
"requires": {
"async": "^2.6.1",
"graceful-fs": "^4.1.15",
"jsonfile": "^5.0.0",
"lodash.flatten": "^4.4.0",
"lodash.uniqwith": "^4.5.0",
"mkdirp": "^0.5.1",
"ncp": "^2.0.0",
"semver": "^5.6.0",
"yargs": "^12.0.5"
},
"dependencies": {
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
"cliui": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
"integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
"dev": true,
"requires": {
"string-width": "^2.1.1",
"strip-ansi": "^4.0.0",
"wrap-ansi": "^2.0.0"
}
},
"execa": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
"integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
"dev": true,
"requires": {
"cross-spawn": "^6.0.0",
"get-stream": "^4.0.0",
"is-stream": "^1.1.0",
"npm-run-path": "^2.0.0",
"p-finally": "^1.0.0",
"signal-exit": "^3.0.0",
"strip-eof": "^1.0.0"
}
},
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dev": true,
"requires": {
"locate-path": "^3.0.0"
}
},
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
"dev": true,
"requires": {
"pump": "^3.0.0"
}
},
"invert-kv": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
"integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
"dev": true
},
"lcid": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
"integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
"dev": true,
"requires": {
"invert-kv": "^2.0.0"
}
},
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dev": true,
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
}
},
"mem": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
"integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
"dev": true,
"requires": {
"map-age-cleaner": "^0.1.1",
"mimic-fn": "^2.0.0",
"p-is-promise": "^2.0.0"
}
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
"mkdirp": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"dev": true,
"requires": {
"minimist": "^1.2.5"
}
},
"os-locale": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
"integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
"dev": true,
"requires": {
"execa": "^1.0.0",
"lcid": "^2.0.0",
"mem": "^4.0.0"
}
},
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dev": true,
"requires": {
"p-limit": "^2.0.0"
}
},
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
"yargs": {
"version": "12.0.5",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
"integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
"dev": true,
"requires": {
"cliui": "^4.0.0",
"decamelize": "^1.2.0",
"find-up": "^3.0.0",
"get-caller-file": "^1.0.1",
"os-locale": "^3.0.0",
"require-directory": "^2.1.1",
"require-main-filename": "^1.0.1",
"set-blocking": "^2.0.0",
"string-width": "^2.0.0",
"which-module": "^2.0.0",
"y18n": "^3.2.1 || ^4.0.0",
"yargs-parser": "^11.1.1"
}
},
"yargs-parser": {
"version": "11.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
"integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
}
}
}
},
"cors": {
"version": "2.8.5",
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/cors/-/cors-2.8.5.tgz",
@@ -438,6 +632,19 @@
"vary": "^1"
}
},
"cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
"dev": true,
"requires": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
}
},
"crypto-random-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
@@ -951,6 +1158,16 @@
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
"dev": true
},
"jsonfile": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-5.0.0.tgz",
"integrity": "sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^0.1.2"
}
},
"keyv": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
@@ -997,6 +1214,24 @@
"path-exists": "^3.0.0"
}
},
"lodash": {
"version": "4.17.19",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
"integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
"dev": true
},
"lodash.flatten": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
"integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
"dev": true
},
"lodash.uniqwith": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz",
"integrity": "sha1-egy/ZfQ7WShiWp1NDcVLGMrcfvM=",
"dev": true
},
"lowercase-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
@@ -1029,6 +1264,15 @@
}
}
},
"map-age-cleaner": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
"integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
"dev": true,
"requires": {
"p-defer": "^1.0.0"
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/media-typer/-/media-typer-0.3.0.tgz",
@@ -1107,11 +1351,23 @@
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"ncp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
"integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
"dev": true
},
"negotiator": {
"version": "0.6.2",
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/negotiator/-/negotiator-0.6.2.tgz",
"integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs="
},
"nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
"node-fetch": {
"version": "2.6.0",
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/node-fetch/-/node-fetch-2.6.0.tgz",
@@ -1236,11 +1492,23 @@
"integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
"dev": true
},
"p-defer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
"integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
"dev": true
},
"p-finally": {
"version": "1.0.0",
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
},
"p-is-promise": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
"integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
"dev": true
},
"p-limit": {
"version": "1.3.0",
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/p-limit/-/p-limit-1.3.0.tgz",
@@ -1763,6 +2031,12 @@
"crypto-random-string": "^2.0.0"
}
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://zowe.jfrog.io/zowe/api/npm/npm-release/unpipe/-/unpipe-1.0.0.tgz",

View File

@@ -6,8 +6,10 @@
"scripts": {
"dev": "nodemon src/index.js",
"start": "node src/index.js",
"build": "npm run clean && cp -r server dist/server && cp -r bin dist/bin && cp *.yml dist && cp *.json dist && cp *.js dist && rimraf dist/package-lock.json",
"clean": "rimraf dist && mkdirp dist"
"build": "npm run clean && cp -r src dist/src && cp *.yml dist && cp *.json dist",
"dist": "npm run build && npm run pack",
"clean": "rimraf dist && mkdirp dist",
"pack": "copy-node-modules . dist"
},
"author": "",
"license": "EPL-2.0",
@@ -18,9 +20,10 @@
"yargs": "^8.0.2"
},
"devDependencies": {
"nodemon": "^2.0.4",
"copy-node-modules": "^1.1.1",
"mkdirp": "^1.0.3",
"node-fetch": "^2.3.0",
"nodemon": "^2.0.4",
"rimraf": "^3.0.2"
}
}

View File

@@ -5,7 +5,8 @@ services:
description: Sample Node API
catalogUiTileId: sample-node-api
instanceBaseUrls:
- http://mymainframe.ibm.com:18000/
- http://localhost:18000/
- http://localhost:19000/
homePageRelativeUrl: # Home page is at the same URL
routedServices:
- gatewayUrl: api/v1 # [api/ui/ws]/v{majorVersion}
@@ -14,8 +15,8 @@ services:
- apiId: com.ibm.sample-node-api
gatewayUrl: api/v1
version: 1.0.0
swaggerUrl: http://mymainframe.ibm.com:18000/api-docs
documentationUrl: http://mymainframe.ibm.com:18000/api-docs-ui
swaggerUrl: http://localhost:18000/api-docs
documentationUrl: http://localhost:18000/api-docs-ui
catalogUiTiles:
sample-node-api:

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

View File

@@ -70,7 +70,7 @@ function setUpParams() {
.option('p', {
alias: 'port',
description: 'listening port',
default: 8080
default: 18000
})
.option('k', {
alias: 'key',

View File

@@ -19,7 +19,7 @@ router.use('/cars', cars);
router.use('/accounts', accounts);
router.use('/', swagger);
router.get('/', (req, res) => res.send('Hello World!'));
router.get('/', (req, res) => res.send('Sample Node API'));
router.get('/health', (req, res) => {
const healthcheck = {
uptime: process.uptime(),

View File

@@ -3,7 +3,7 @@
,"info":{"description":"Sample Node API"
,"version":"1.0"
,"title":"Sample Node API"}
,"host":"localhost:8080"
,"host":"localhost:18000"
,"basePath":"/"
,"tags":[{"name":"Accounts","description":"Accounts API"},{"name":"Cars","description":"Cars API"}]
,"schemes":["http"]

View File

@@ -1,5 +1,5 @@
## start locally
node server/app.js --service sample-node-api --port 8080 --key sslcert/server.key --cert sslcert/server.cert -v
node server/app.js --service sample-node-api --port 18000 --key sslcert/server.key --cert sslcert/server.cert -v
cd ~/zowe/extenders/sample-node-api
## start on z/os uss

65
troubleshooting.md Normal file
View File

@@ -0,0 +1,65 @@
# How do we know zowe retarted succesfully?
1 : check in browser
![API Mediation](./screenshots/API_Mediation.png)
https://s0w1:7554
https://s0w1:7554/ui/v1/apicatalog/ - try login and check
2: Check if all services are up or not
Zowe listen on 10 ports
- 8542, 8544, 8546, 8548, 8550 - these five start much earlier
- 8545, 8547, 7552, 7553, 7554 - these five are java services - takes over 20 mins to restart
Login to zowe and check all open ports:
```
ssh s0w1
onetstat -a | grep Listen
```
you will see 10 open ports
![zowe Services Ports](./screenshots/Zowe_Services_Ports.png)
3. Eureka Discovery Service Dashboard has 11 running services
![zowe discovery service](./screenshots/DiscoveryService_Dashboard.png)
4. Open Jes Explorer
filter on owner - ZWE*
```
#1 zss service started
ZWES1013I ZSS Server has started. Version '1.13.0+20200623'
#2 - JES Explorer UI
[JES] is started and listening on 8546...
#3 USS Explorer UI
[USS] is started and listening on 8550...
#4 MVS Explorer UI
[MVS] is started and listening on 8548...
#5 ZLUX
2020-08-10 06:26:49.307 <ZWED:66510> ZWESVUSR INFO (_zsf.install,index.js:340) ZWED0031I - Server is ready at https://0.0.0.0:8544, Plugins successfully loaded: 100% (20/20)
# 6 JobsAPI service is up
2020-08-10 06:40:53.432 <ZWEEAJ1:main:66500> ZWESVUSR INFO (o.z.j.JesJobsApplication,StartupInfoLogger.java:59) Started JesJobsApplication in 872.68 seconds (JVM running for 1056.269)
#7 Datasets and Files API service is up
2020-08-10 06:41:13.974 <ZWEEAD1:main:66496> ZWESVUSR INFO (o.z.DataSetsAndUnixFilesApplication,StartupInfoLogger.java:59) Started DataSetsAndUnixFilesApplication in 906.562 seconds (JVM running for 1073.875)
#8 Discovery Service is up
2020-08-10 06:44:33.386 <ZWEADS1:main:66493> ZWESVUSR INFO (o.z.a.p.s.ServiceStartupEventHandler) ZWEAM000I Discovery Service has been started in 1275.604 seconds
#9 Catalog service is up
2020-08-10 06:45:34.765 <ZWEAAC1:main:66497> ZWESVUSR INFO (o.z.a.p.s.ServiceStartupEventHandler) ZWEAM000I API Catalog Service has been started in 1336.094 seconds
#10 Gateway service is up
2020-08-10 06:45:43.711 <ZWEAGW1:main:66498> ZWESVUSR INFO (o.z.a.p.s.ServiceStartupEventHandler) ZWEAM000I Gateway Service has been started in 1344.318 seconds
# 11 zlux eureka registeration with API ML
2020-08-10 06:57:29.815 <ZWED:66510> ZWESVUSR INFO (_zsf.apiml,apiml.js:218) ZWED0021I - Eureka Client Registered from 127.0.0.1. Available at https://S0W1.CANLAB.IBM.COM:7553/ui/v1/zlux/
ZWED5019I - Started
```