增加 swagger、druid、skywalking、admin 的自定义路径

This commit is contained in:
YunaiV 2023-04-07 23:25:43 +08:00
parent 70a10b26d2
commit 04c3cdf372
7 changed files with 62 additions and 181 deletions

View File

@ -73,7 +73,7 @@ public class ConfigController {
public CommonResult<String> getConfigKey(@RequestParam("key") String key) {
ConfigDO config = configService.getConfigByKey(key);
if (config == null) {
return null;
return success(null);
}
if (!config.getVisible()) {
throw exception(ErrorCodeConstants.CONFIG_GET_VALUE_ERROR_IF_VISIBLE);

View File

@ -7,48 +7,3 @@ export function getCache() {
method: 'get'
})
}
// 获取模块
export function getKeyDefineList() {
return request({
url: '/infra/redis/get-key-define-list',
method: 'get'
})
}
// 获取键名列表
export function getKeyList(keyTemplate) {
return request({
url: '/infra/redis/get-key-list',
method: 'get',
params: {
keyTemplate
}
})
}
// 获取缓存内容
export function getKeyValue(key) {
return request({
url: '/infra/redis/get-key-value?key=' + key,
method: 'get'
})
}
// 根据键名删除缓存
export function deleteKey(key) {
return request({
url: '/infra/redis/delete-key?key=' + key,
method: 'delete'
})
}
export function deleteKeys(keyTemplate) {
return request({
url: '/infra/redis/delete-keys?',
method: 'delete',
params: {
keyTemplate
}
})
}

View File

@ -2,18 +2,31 @@
<div>
<doc-alert title="数据库 MyBatis" url="https://doc.iocoder.cn/mybatis/" />
<doc-alert title="多数据源(读写分离)" url="https://doc.iocoder.cn/dynamic-datasource/" />
<i-frame :src="url" />
<i-frame v-if="!loading" :src="url" />
</div>
</template>
<script>
import iFrame from "@/components/iFrame/index";
import { getConfigKey } from "@/api/infra/config";
export default {
name: "Druid",
components: { iFrame },
data() {
return {
url: process.env.VUE_APP_BASE_API + "/druid/index.html"
url: process.env.VUE_APP_BASE_API + "/druid/index.html",
loading: true
};
},
created() {
getConfigKey("url.druid").then(response => {
if (!response.data || response.data.length === 0) {
return
}
this.url = response.data;
}).finally(() => {
this.loading = false;
})
}
};
</script>

View File

@ -65,77 +65,11 @@
</el-card>
</el-col>
</el-row>
<el-table v-loading="keyDefineListLoad" :data="keyDefineList" row-key="id" @row-click="openKeyTemplate">
<el-table-column prop="keyTemplate" label="Key 模板" width="200" />
<el-table-column prop="keyType" label="Key 类型" width="100" />
<el-table-column prop="valueType" label="Value 类型" />
<el-table-column prop="timeoutType" label="超时时间" width="200">
<template v-slot="scope">
<dict-tag
:type="DICT_TYPE.INFRA_REDIS_TIMEOUT_TYPE"
:value="scope.row.timeoutType"
/>
<span v-if="scope.row.timeout > 0"
>({{ scope.row.timeout / 1000 }} )</span
>
</template>
</el-table-column>
<el-table-column prop="memo" label="备注" />
</el-table>
<!-- 缓存模块信息框 -->
<el-dialog :title="keyTemplate + ' 模板'" :visible.sync="open" width="70vw" append-to-body>
<el-row :gutter="10">
<el-col :span="14" class="card-box">
<el-card style="height: 70vh; overflow: scroll">
<div slot="header">
<span>键名列表</span>
<el-button style="float: right; padding: 3px 0" type="text" icon="el-icon-refresh-right" @click="refreshKeys" />
</div>
<el-table :data="cacheKeys" style="width: 100%" @row-click="handleKeyValue">
<el-table-column label="缓存键名" align="center" :show-overflow-tooltip="true">
<template v-slot="scope">{{ scope.row }}</template>
</el-table-column>
<el-table-column label="操作" width="60" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDeleteKey(scope.row)" />
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
<el-col :span="10">
<el-card :bordered="false" style="height: 70vh">
<div slot="header">
<span>缓存内容</span>
<el-button style="float: right; padding: 3px 0" type="text" icon="el-icon-refresh-right"
@click="handleDeleteKeys(keyTemplate)">清理全部</el-button>
</div>
<el-form :model="cacheForm">
<el-row :gutter="32">
<el-col :offset="1" :span="22">
<el-form-item label="缓存键名:" prop="key">
<el-input v-model="cacheForm.key" :readOnly="true" />
</el-form-item>
</el-col>
<el-col :offset="1" :span="22">
<el-form-item label="缓存内容:" prop="value">
<el-input v-model="cacheForm.value" type="textarea" :rows="12" :readOnly="true"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-col>
</el-row>
</el-dialog>
</div>
</template>
<script>
import {getCache, getKeyDefineList, getKeyList, getKeyValue, deleteKey, deleteKeys} from "@/api/infra/redis";
import { getCache } from "@/api/infra/redis";
import * as echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
export default {
@ -147,15 +81,7 @@ export default {
// 使
usedmemory: null,
// cache
cache: [],
// key
keyDefineListLoad: true,
keyDefineList: [],
//
open: false,
keyTemplate: "",
cacheKeys: [],
cacheForm: {}
cache: []
};
},
created () {
@ -220,61 +146,12 @@ export default {
],
});
});
// Redis Key
getKeyDefineList().then(response => {
this.keyDefineList = response.data;
this.keyDefineListLoad = false;
});
},
//
openLoading () {
this.$modal.loading("正在加载缓存监控数据,请稍后!");
},
//
openKeyTemplate (keyDefine) {
this.open = true;
//
this.keyTemplate = keyDefine.keyTemplate;
this.doGetKeyList(this.keyTemplate);
},
//
doGetKeyList (keyTemplate) {
getKeyList(keyTemplate).then(response => {
this.cacheKeys = response.data
this.cacheForm = {}
})
},
//
handleKeyValue (key) {
getKeyValue(key).then(response => {
this.cacheForm = response.data
})
},
//
refreshKeys() {
this.$modal.msgSuccess("刷新键名列表成功");
this.doGetKeyList(this.keyTemplate);
},
//
handleDeleteKey(key){
deleteKey(key).then(response => {
this.$modal.msgSuccess("清理缓存键名[" + key + "]成功");
this.doGetKeyList(this.keyTemplate);
})
},
handleDeleteKeys(keyTemplate){
deleteKeys(keyTemplate).then(response => {
this.$modal.msgSuccess("清空[" + keyTemplate + "]成功");
this.doGetKeyList(this.keyTemplate);
})
},
}
},
};
</script>

View File

@ -1,18 +1,30 @@
<template>
<div>
<doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />
<i-frame :src="url" />
<i-frame v-if="!loading" :src="url" />
</div>
</template>
<script>
import iFrame from "@/components/iFrame/index";
import { getConfigKey } from "@/api/infra/config";
export default {
name: "Druid",
components: { iFrame },
data() {
return {
url: process.env.VUE_APP_BASE_API + "/admin/applications"
url: process.env.VUE_APP_BASE_API + "/admin/applications",
loading: true
};
},
created() {
getConfigKey("url.spring-boot-admin").then(response => {
if (!response.data || response.data.length === 0) {
return
}
this.url = response.data;
}).finally(() => {
this.loading = false;
})
}
};
</script>

View File

@ -1,18 +1,30 @@
<template>
<div>
<doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />
<i-frame :src="url" />
<i-frame v-if="!loading" :src="url" />
</div>
</template>
<script>
import iFrame from "@/components/iFrame/index";
import { getConfigKey } from "@/api/infra/config";
export default {
name: "Druid",
components: { iFrame },
data() {
return {
url: "http://skywalking.shop.iocoder.cn", // TODO
url: "http://skywalking.shop.iocoder.cn",
loading: true
};
},
created() {
getConfigKey("url.skywalking").then(response => {
if (!response.data || response.data.length === 0) {
return
}
this.url = response.data;
}).finally(() => {
this.loading = false;
})
}
};
</script>

View File

@ -1,19 +1,31 @@
<template>
<div>
<doc-alert title="接口文档" url="https://doc.iocoder.cn/api-doc/" />
<i-frame :src="url" />
<i-frame v-if="!loading" :src="url" />
</div>
</template>
<script>
import iFrame from "@/components/iFrame/index";
import { getConfigKey } from "@/api/infra/config";
export default {
name: "Druid",
components: { iFrame },
data() {
return {
// url: process.env.VUE_APP_BASE_API + "/doc.html"
url: process.env.VUE_APP_BASE_API + "/swagger-ui"
url: process.env.VUE_APP_BASE_API + "/doc.html", // Knife4j UI
// url: process.env.VUE_APP_BASE_API + "/swagger-ui", // Swagger UI
loading: true
};
},
created() {
getConfigKey("url.swagger").then(response => {
if (!response.data || response.data.length === 0) {
return
}
this.url = response.data;
}).finally(() => {
this.loading = false;
})
}
};
</script>