This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-showcase.git


The following commit(s) were added to refs/heads/main by this push:
     new 39d3837  Fix UI services tracing not work
39d3837 is described below

commit 39d38379ed88b53c404b52d9afe773c27db5ac43
Author: kezhenxu94 <[email protected]>
AuthorDate: Mon Nov 8 13:59:56 2021 +0800

    Fix UI services tracing not work
---
 services/app/package-lock.json | 106 +++++++++++++++++++++++++++++++++++++++++
 services/app/package.json      |   3 +-
 services/app/server/index.js   |  15 +++---
 services/app/ui/src/index.js   |   1 -
 4 files changed, 117 insertions(+), 8 deletions(-)

diff --git a/services/app/package-lock.json b/services/app/package-lock.json
index 5e60eec..edb9c39 100644
--- a/services/app/package-lock.json
+++ b/services/app/package-lock.json
@@ -4,6 +4,19 @@
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
+    "@types/http-proxy": {
+      "version": "1.17.7",
+      "resolved": 
"https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz";,
+      "integrity": 
"sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==",
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/node": {
+      "version": "16.11.6",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz";,
+      "integrity": 
"sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w=="
+    },
     "accepts": {
       "version": "1.3.7",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz";,
@@ -43,6 +56,14 @@
         "type-is": "~1.6.17"
       }
     },
+    "braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz";,
+      "integrity": 
"sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "requires": {
+        "fill-range": "^7.0.1"
+      }
+    },
     "bytes": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz";,
@@ -109,6 +130,11 @@
       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz";,
       "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
     },
+    "eventemitter3": {
+      "version": "4.0.7",
+      "resolved": 
"https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz";,
+      "integrity": 
"sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+    },
     "express": {
       "version": "4.17.1",
       "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz";,
@@ -146,6 +172,14 @@
         "vary": "~1.1.2"
       }
     },
+    "fill-range": {
+      "version": "7.0.1",
+      "resolved": 
"https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz";,
+      "integrity": 
"sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "requires": {
+        "to-regex-range": "^5.0.1"
+      }
+    },
     "finalhandler": {
       "version": "1.1.2",
       "resolved": 
"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz";,
@@ -187,6 +221,28 @@
         "toidentifier": "1.0.0"
       }
     },
+    "http-proxy": {
+      "version": "1.18.1",
+      "resolved": 
"https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz";,
+      "integrity": 
"sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+      "requires": {
+        "eventemitter3": "^4.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "http-proxy-middleware": {
+      "version": "2.0.1",
+      "resolved": 
"https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz";,
+      "integrity": 
"sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==",
+      "requires": {
+        "@types/http-proxy": "^1.17.5",
+        "http-proxy": "^1.18.1",
+        "is-glob": "^4.0.1",
+        "is-plain-obj": "^3.0.0",
+        "micromatch": "^4.0.2"
+      }
+    },
     "iconv-lite": {
       "version": "0.4.24",
       "resolved": 
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";,
@@ -205,6 +261,29 @@
       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz";,
       "integrity": 
"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
     },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": 
"https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz";,
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+    },
+    "is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz";,
+      "integrity": 
"sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz";,
+      "integrity": 
"sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+    },
+    "is-plain-obj": {
+      "version": "3.0.0",
+      "resolved": 
"https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz";,
+      "integrity": 
"sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA=="
+    },
     "media-typer": {
       "version": "0.3.0",
       "resolved": 
"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz";,
@@ -220,6 +299,15 @@
       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz";,
       "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
     },
+    "micromatch": {
+      "version": "4.0.4",
+      "resolved": 
"https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz";,
+      "integrity": 
"sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+      "requires": {
+        "braces": "^3.0.1",
+        "picomatch": "^2.2.3"
+      }
+    },
     "mime": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz";,
@@ -266,6 +354,11 @@
       "resolved": 
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz";,
       "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
     },
+    "picomatch": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz";,
+      "integrity": 
"sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw=="
+    },
     "proxy-addr": {
       "version": "2.0.7",
       "resolved": 
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz";,
@@ -296,6 +389,11 @@
         "unpipe": "1.0.0"
       }
     },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": 
"https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz";,
+      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+    },
     "safe-buffer": {
       "version": "5.1.2",
       "resolved": 
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";,
@@ -354,6 +452,14 @@
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz";,
       "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
     },
+    "to-regex-range": {
+      "version": "5.0.1",
+      "resolved": 
"https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz";,
+      "integrity": 
"sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "requires": {
+        "is-number": "^7.0.0"
+      }
+    },
     "toidentifier": {
       "version": "1.0.0",
       "resolved": 
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz";,
diff --git a/services/app/package.json b/services/app/package.json
index acc9a45..c323ef9 100644
--- a/services/app/package.json
+++ b/services/app/package.json
@@ -12,6 +12,7 @@
   "license": "Apache-2.0",
   "dependencies": {
     "axios": "^0.24.0",
-    "express": "^4.17.1"
+    "express": "^4.17.1",
+    "http-proxy-middleware": "^2.0.1"
   }
 }
diff --git a/services/app/server/index.js b/services/app/server/index.js
index 5a10413..49b355b 100644
--- a/services/app/server/index.js
+++ b/services/app/server/index.js
@@ -19,9 +19,12 @@
  */
 const path = require('path');
 const express = require('express');
+const { createProxyMiddleware } = require('http-proxy-middleware');
 const axios = require('axios');
 const {default: agent} = require('skywalking-backend-js');
 
+const oapHttpAddress = 'http://oap:12800'
+
 // @feature: nodejs-agent-backend;
 agent.start({
     serviceName: 'app',
@@ -35,7 +38,11 @@ const app = express();
 
 app.use(express.static(path.resolve(__dirname, '../ui/build')));
 
-app.get("/homepage", async (req, res) => {
+// @feature: nodejs-agent-frontend; you need to proxy the path '/browser/*' 
and '/v3/*' in UI to the OAP 12800 endpoint. You can use reverse proxy like 
Nginx or anything similar.
+app.use('/browser', createProxyMiddleware({ target: oapHttpAddress }))
+app.use('/v3', createProxyMiddleware({ target: oapHttpAddress }))
+
+app.get('/homepage', async (req, res) => {
     const top = await axios.get(`http://${GATEWAY}/songs/top`);
     const rcmd = await axios.get(`http://${GATEWAY}/rcmd`);
 
@@ -45,14 +52,10 @@ app.get("/homepage", async (req, res) => {
     });
 });
 
-app.get("/health", async (req, res) => {
+app.get('/health', async (req, res) => {
     res.json({healthy: true});
 });
 
-app.get('*', (req, res) => {
-    res.sendFile(path.resolve(__dirname, '../ui/build', 'index.html'));
-});
-
 app.listen(PORT, () => {
     console.log(`Server listening on ${PORT}`);
 });
diff --git a/services/app/ui/src/index.js b/services/app/ui/src/index.js
index b222d48..9e58cf8 100644
--- a/services/app/ui/src/index.js
+++ b/services/app/ui/src/index.js
@@ -28,7 +28,6 @@ const OAP = process.env.OAP || 'oap';
 
 // @feature: nodejs-agent-frontend;
 ClientMonitor.register({
-    collector: `http://${OAP}:12800`,
     service: 'ui',
     pagePath: '/homepage',
     serviceVersion: 'v1.0.0',

Reply via email to