From 687af9fe14f0b69166742e6fb13e00fce50a0c32 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 17 Jul 2024 19:31:45 +0530 Subject: [PATCH 01/12] ui: add new API docs tab This introduces a new API docs table which is enabled by default but the admin can disable it via config.json. This uses the discovered APIs for logged in user/account to show them the APIs accessible to them and generates dynamic API docs based on them which are searchable. Also introduces some common auto-completed API groups that are available to most roles. Signed-off-by: Rohit Yadav --- ui/public/config.json | 1 + ui/public/locales/en.json | 3 + ui/src/config/router.js | 11 ++ ui/src/core/lazy_lib/components_use.js | 2 + ui/src/store/modules/user.js | 4 +- ui/src/views/plugins/ApiDocsPlugin.vue | 216 +++++++++++++++++++++++++ 6 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 ui/src/views/plugins/ApiDocsPlugin.vue diff --git a/ui/public/config.json b/ui/public/config.json index 57d120aed5e3..b78759f830fc 100644 --- a/ui/public/config.json +++ b/ui/public/config.json @@ -92,6 +92,7 @@ ] }, "plugins": [], + "apidocs": true, "basicZoneEnabled": true, "multipleServer": false, "allowSettingTheme": true, diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 67b36d717a28..14d8d835b916 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -348,6 +348,9 @@ "label.annotation.everyone": "Visible to everyone", "label.anti.affinity": "Anti-affinity", "label.anti.affinity.group": "Anti-affinity group", +"label.api.docs": "API Docs", +"label.api.docs.description": "For information about how the APIs work, and tips on how to use them, click to see the Developer's Guide.", +"label.api.docs.count": "APIs available for your account", "label.api.version": "API version", "label.apikey": "API key", "label.app.cookie": "AppCookie", diff --git a/ui/src/config/router.js b/ui/src/config/router.js index c358d2155772..6df4a756d408 100644 --- a/ui/src/config/router.js +++ b/ui/src/config/router.js @@ -19,6 +19,7 @@ import { UserLayout, BasicLayout, RouteView } from '@/layouts' import AutogenView from '@/views/AutogenView.vue' import IFramePlugin from '@/views/plugins/IFramePlugin.vue' +import ApiDocsPlugin from '@/views/plugins/ApiDocsPlugin.vue' import { shallowRef } from 'vue' import { vueProps } from '@/vue-app' @@ -275,6 +276,16 @@ export function asyncRouterMap () { }) } + const apidocs = vueProps.$config.apidocs + if (apidocs !== false) { + routerMap[0].children.push({ + path: '/apidocs/', + name: 'apidocs', + component: ApiDocsPlugin, + meta: { title: 'label.api.docs', icon: 'read-outlined' } + }) + } + return routerMap } diff --git a/ui/src/core/lazy_lib/components_use.js b/ui/src/core/lazy_lib/components_use.js index 98fc9e0c8163..3ee5d07a49d3 100644 --- a/ui/src/core/lazy_lib/components_use.js +++ b/ui/src/core/lazy_lib/components_use.js @@ -61,6 +61,7 @@ import { Tree, Calendar, Slider, + Result, AutoComplete, Collapse, Space, @@ -133,5 +134,6 @@ export default { app.use(Descriptions) app.use(Space) app.use(Statistic) + app.use(Result) } } diff --git a/ui/src/store/modules/user.js b/ui/src/store/modules/user.js index fb5b6ff5e0bb..002545ac3f9b 100644 --- a/ui/src/store/modules/user.js +++ b/ui/src/store/modules/user.js @@ -314,7 +314,9 @@ const user = { const apiName = api.name apis[apiName] = { params: api.params, - response: api.response + response: api.response, + isasync: api.isasync, + description: api.description } } commit('SET_APIS', apis) diff --git a/ui/src/views/plugins/ApiDocsPlugin.vue b/ui/src/views/plugins/ApiDocsPlugin.vue new file mode 100644 index 000000000000..d3304362af6f --- /dev/null +++ b/ui/src/views/plugins/ApiDocsPlugin.vue @@ -0,0 +1,216 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + + + + + + From d8fcee9d05dfabf07a4a3841ffa3f1a52930f6cc Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 17 Jul 2024 19:37:53 +0530 Subject: [PATCH 02/12] Update ui/src/views/plugins/ApiDocsPlugin.vue --- ui/src/views/plugins/ApiDocsPlugin.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui/src/views/plugins/ApiDocsPlugin.vue b/ui/src/views/plugins/ApiDocsPlugin.vue index d3304362af6f..35e03e62ec74 100644 --- a/ui/src/views/plugins/ApiDocsPlugin.vue +++ b/ui/src/views/plugins/ApiDocsPlugin.vue @@ -24,8 +24,6 @@ v-model:value="query" :options="options" style="width: 100%" - @select="onSelect" - @search="onSearch" > Date: Wed, 17 Jul 2024 19:38:31 +0530 Subject: [PATCH 03/12] Update ui/src/views/plugins/ApiDocsPlugin.vue --- ui/src/views/plugins/ApiDocsPlugin.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui/src/views/plugins/ApiDocsPlugin.vue b/ui/src/views/plugins/ApiDocsPlugin.vue index 35e03e62ec74..544157c86cfe 100644 --- a/ui/src/views/plugins/ApiDocsPlugin.vue +++ b/ui/src/views/plugins/ApiDocsPlugin.vue @@ -134,10 +134,8 @@ {{ userkeys.secretkey.substring(0, 20) }}... - - From 485a3dfacb49195af8a63b68702b92d5522605db Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 17 Jul 2024 19:39:13 +0530 Subject: [PATCH 04/12] Update ui/src/views/plugins/ApiDocsPlugin.vue --- ui/src/views/plugins/ApiDocsPlugin.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui/src/views/plugins/ApiDocsPlugin.vue b/ui/src/views/plugins/ApiDocsPlugin.vue index 544157c86cfe..a591f74d01f8 100644 --- a/ui/src/views/plugins/ApiDocsPlugin.vue +++ b/ui/src/views/plugins/ApiDocsPlugin.vue @@ -144,7 +144,6 @@ - - From b4b0400a0774268408e35b3d90e713c5d91530a0 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 17 Jul 2024 20:42:15 +0530 Subject: [PATCH 07/12] fix performance issues Signed-off-by: Rohit Yadav --- ui/src/config/router.js | 2 +- ui/src/views/plugins/ApiDocsPlugin.vue | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/ui/src/config/router.js b/ui/src/config/router.js index 6df4a756d408..9d9cd0d44913 100644 --- a/ui/src/config/router.js +++ b/ui/src/config/router.js @@ -281,7 +281,7 @@ export function asyncRouterMap () { routerMap[0].children.push({ path: '/apidocs/', name: 'apidocs', - component: ApiDocsPlugin, + component: shallowRef(ApiDocsPlugin), meta: { title: 'label.api.docs', icon: 'read-outlined' } }) } diff --git a/ui/src/views/plugins/ApiDocsPlugin.vue b/ui/src/views/plugins/ApiDocsPlugin.vue index 49746b0d73c6..d1fbf5448955 100644 --- a/ui/src/views/plugins/ApiDocsPlugin.vue +++ b/ui/src/views/plugins/ApiDocsPlugin.vue @@ -39,7 +39,7 @@
-

Response keys:

+

Response parameters:

Date: Thu, 18 Jul 2024 14:20:20 +0530 Subject: [PATCH 09/12] Update ui/public/locales/en.json Co-authored-by: Suresh Kumar Anaparti --- ui/public/locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 14d8d835b916..33a1654ea8e5 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -349,7 +349,7 @@ "label.anti.affinity": "Anti-affinity", "label.anti.affinity.group": "Anti-affinity group", "label.api.docs": "API Docs", -"label.api.docs.description": "For information about how the APIs work, and tips on how to use them, click to see the Developer's Guide.", +"label.api.docs.description": "For information about how the APIs work, and tips on how to use them, click here to see the Developer's Guide.", "label.api.docs.count": "APIs available for your account", "label.api.version": "API version", "label.apikey": "API key", From 2766597151c8cf389d72d131e8d610efb325b389 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 18 Jul 2024 15:57:17 +0530 Subject: [PATCH 10/12] address Suresh's feedback Signed-off-by: Rohit Yadav --- ui/public/locales/en.json | 1 + ui/src/style/vars.less | 4 +++ ui/src/views/plugins/ApiDocsPlugin.vue | 36 ++++++++++++++++---------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 33a1654ea8e5..ec8bbfb56915 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -1799,6 +1799,7 @@ "label.replace.acl": "Replace ACL", "label.replace.acl.list": "Replace ACL list", "label.report.bug": "Ask a question or Report an issue", +"label.request": "Request", "label.required": "Required", "label.requireshvm": "HVM", "label.requiresupgrade": "Requires upgrade", diff --git a/ui/src/style/vars.less b/ui/src/style/vars.less index fc6fdf751702..de2d494c878f 100644 --- a/ui/src/style/vars.less +++ b/ui/src/style/vars.less @@ -471,6 +471,10 @@ a { width: auto; } +.ant-list-item.selected-item { + background-color: @primary-color-light; +} + .ant-select-arrow .anticon { vertical-align: top; } diff --git a/ui/src/views/plugins/ApiDocsPlugin.vue b/ui/src/views/plugins/ApiDocsPlugin.vue index 06905e96e444..7c7cf0c1a6dd 100644 --- a/ui/src/views/plugins/ApiDocsPlugin.vue +++ b/ui/src/views/plugins/ApiDocsPlugin.vue @@ -38,13 +38,12 @@ @@ -59,11 +58,21 @@ :bordered="true" style="width: 100%; overflow-x: auto"> -

{{ selectedApi }} Asynchronous API

+

{{ selectedApi }} + Asynchronous API + +

{{ $store.getters.apis[selectedApi].description }}

-

Request parameters:

+

{{ $t('label.request') }} {{ $t('label.params') }}:

@@ -73,9 +82,9 @@
-

Response parameters:

+

{{ $t('label.response') }} {{ $t('label.params') }}:

@@ -203,7 +212,8 @@ export default { this.selectedParams = this.$store.getters.apis[api].params .sort((a, b) => (a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0)) .sort((a, b) => (a.required > b.required) ? -1 : ((b.required > a.required) ? 1 : 0)) - this.selectedResponse = this.$store.getters.apis[api].response + .filter(value => Object.keys(value).length > 0) + this.selectedResponse = this.$store.getters.apis[api].response.filter(value => Object.keys(value).length > 0) } } } From 7eb9e0699cae32c674b3bde533690770d8d1f3e3 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 18 Jul 2024 16:06:19 +0530 Subject: [PATCH 11/12] filter example/options as we type Signed-off-by: Rohit Yadav --- ui/src/views/plugins/ApiDocsPlugin.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ui/src/views/plugins/ApiDocsPlugin.vue b/ui/src/views/plugins/ApiDocsPlugin.vue index 7c7cf0c1a6dd..21145bf6f89e 100644 --- a/ui/src/views/plugins/ApiDocsPlugin.vue +++ b/ui/src/views/plugins/ApiDocsPlugin.vue @@ -22,7 +22,7 @@ Date: Fri, 19 Jul 2024 10:53:59 +0530 Subject: [PATCH 12/12] Address Joao's comments Signed-off-by: Rohit Yadav --- ui/src/store/modules/user.js | 1 + ui/src/views/plugins/ApiDocsPlugin.vue | 14 ++++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ui/src/store/modules/user.js b/ui/src/store/modules/user.js index 002545ac3f9b..24302a940335 100644 --- a/ui/src/store/modules/user.js +++ b/ui/src/store/modules/user.js @@ -316,6 +316,7 @@ const user = { params: api.params, response: api.response, isasync: api.isasync, + since: api.since, description: api.description } } diff --git a/ui/src/views/plugins/ApiDocsPlugin.vue b/ui/src/views/plugins/ApiDocsPlugin.vue index 21145bf6f89e..ba7f547572ba 100644 --- a/ui/src/views/plugins/ApiDocsPlugin.vue +++ b/ui/src/views/plugins/ApiDocsPlugin.vue @@ -60,6 +60,7 @@

{{ selectedApi }} Asynchronous API + Since {{ $store.getters.apis[selectedApi].since }} -