mirror of
https://gitee.com/blossom-editor/blossom.git
synced 2025-12-07 09:18:32 +08:00
feat: Add weather and flow control switches
This commit is contained in:
parent
6cc8a66243
commit
79ee94941f
@ -28,11 +28,17 @@ public enum ParamEnum {
|
|||||||
* 和风天气KEY
|
* 和风天气KEY
|
||||||
*/
|
*/
|
||||||
HEFENG_KEY(true, 20,""),
|
HEFENG_KEY(true, 20,""),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 和风天气KEY
|
* 和风天气 HOST
|
||||||
*/
|
*/
|
||||||
HEFENG_HOST(false, 100,""),
|
HEFENG_HOST(false, 100,""),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开启和风天气
|
||||||
|
*/
|
||||||
|
HEFENG_ENABLED(false, 5,""),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GITEE key
|
* GITEE key
|
||||||
*/
|
*/
|
||||||
@ -58,6 +64,11 @@ public enum ParamEnum {
|
|||||||
*/
|
*/
|
||||||
SERVER_JWT_SECRET(true, 9999,""),
|
SERVER_JWT_SECRET(true, 9999,""),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开启首页流量监控
|
||||||
|
*/
|
||||||
|
SENTINEL_ENABLED(false, 5,""),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 过期时间 - 服务器
|
* 过期时间 - 服务器
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -67,7 +67,9 @@ public class WeatherManager {
|
|||||||
}
|
}
|
||||||
log.info("[BLOSSOM] refresh weather: {}", location);
|
log.info("[BLOSSOM] refresh weather: {}", location);
|
||||||
HeFengReq params = initParam(location);
|
HeFengReq params = initParam(location);
|
||||||
if (params == null) {
|
|
||||||
|
// 无返回或关闭
|
||||||
|
if (params == null || !params.getEnabled()) {
|
||||||
log.info("未配置天气信息, 忽略天气查询");
|
log.info("未配置天气信息, 忽略天气查询");
|
||||||
WeatherRes weather = new WeatherRes();
|
WeatherRes weather = new WeatherRes();
|
||||||
CityRes.Location l = new CityRes.Location();
|
CityRes.Location l = new CityRes.Location();
|
||||||
@ -75,6 +77,7 @@ public class WeatherManager {
|
|||||||
weather.setLocation(l);
|
weather.setLocation(l);
|
||||||
return weather;
|
return weather;
|
||||||
}
|
}
|
||||||
|
|
||||||
String cityStr, nowStr, dailyStr, hourlyStr;
|
String cityStr, nowStr, dailyStr, hourlyStr;
|
||||||
CityRes city = null;
|
CityRes city = null;
|
||||||
NowRes now = null;
|
NowRes now = null;
|
||||||
@ -160,13 +163,17 @@ public class WeatherManager {
|
|||||||
* @return 返回查询参数
|
* @return 返回查询参数
|
||||||
*/
|
*/
|
||||||
public HeFengReq initParam(String location) {
|
public HeFengReq initParam(String location) {
|
||||||
Map<String, String> paramMap = paramService.selectMap(false, ParamEnum.HEFENG_KEY, ParamEnum.HEFENG_HOST);
|
Map<String, String> paramMap = paramService.selectMap(false,
|
||||||
|
ParamEnum.HEFENG_KEY,
|
||||||
|
ParamEnum.HEFENG_HOST,
|
||||||
|
ParamEnum.HEFENG_ENABLED);
|
||||||
if (MapUtil.isNotEmpty(paramMap)
|
if (MapUtil.isNotEmpty(paramMap)
|
||||||
&& StrUtil.isNotBlank(paramMap.get(ParamEnum.HEFENG_KEY.name()))
|
&& StrUtil.isNotBlank(paramMap.get(ParamEnum.HEFENG_KEY.name()))
|
||||||
&& StrUtil.isNotBlank(paramMap.get(ParamEnum.HEFENG_HOST.name()))
|
&& StrUtil.isNotBlank(paramMap.get(ParamEnum.HEFENG_HOST.name()))
|
||||||
) {
|
) {
|
||||||
HeFengReq req = new HeFengReq();
|
HeFengReq req = new HeFengReq();
|
||||||
req.setHost(paramMap.get(ParamEnum.HEFENG_HOST.name()));
|
req.setHost(paramMap.get(ParamEnum.HEFENG_HOST.name()));
|
||||||
|
req.setEnabled("1".equals(paramMap.getOrDefault(ParamEnum.HEFENG_ENABLED.name(),"0")));
|
||||||
|
|
||||||
Map<String, String> map = new HashMap<>(2);
|
Map<String, String> map = new HashMap<>(2);
|
||||||
map.put("location", location);
|
map.put("location", location);
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import java.util.Map;
|
|||||||
@Data
|
@Data
|
||||||
public class HeFengReq {
|
public class HeFengReq {
|
||||||
|
|
||||||
|
private Boolean enabled;
|
||||||
/**
|
/**
|
||||||
* 和风用户域名
|
* 和风用户域名
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -90,6 +90,19 @@ WHERE NOT EXISTS(SELECT 1
|
|||||||
--
|
--
|
||||||
INSERT INTO base_sys_param (id, param_name, param_value, param_desc, open_state, cre_time, upd_time)
|
INSERT INTO base_sys_param (id, param_name, param_value, param_desc, open_state, cre_time, upd_time)
|
||||||
SELECT *
|
SELECT *
|
||||||
|
FROM (select 19 as id,
|
||||||
|
'HEFENG_ENABLED' as param_name,
|
||||||
|
'0' as param_value,
|
||||||
|
'和风天气开启' as param_desc,
|
||||||
|
1 as open_state,
|
||||||
|
CURRENT_TIMESTAMP as cre_time,
|
||||||
|
CURRENT_TIMESTAMP as upd_time) as temp
|
||||||
|
WHERE NOT EXISTS(SELECT 1
|
||||||
|
FROM base_sys_param
|
||||||
|
WHERE id = 19);
|
||||||
|
--
|
||||||
|
INSERT INTO base_sys_param (id, param_name, param_value, param_desc, open_state, cre_time, upd_time)
|
||||||
|
SELECT *
|
||||||
FROM (select 21 as id,
|
FROM (select 21 as id,
|
||||||
'GITEE_ACCESS_TOKEN' as param_name,
|
'GITEE_ACCESS_TOKEN' as param_name,
|
||||||
'' as param_value,
|
'' as param_value,
|
||||||
@ -192,8 +205,18 @@ WHERE NOT EXISTS(SELECT 1
|
|||||||
FROM base_sys_param
|
FROM base_sys_param
|
||||||
WHERE id = 904);
|
WHERE id = 904);
|
||||||
|
|
||||||
|
INSERT INTO base_sys_param (id, param_name, param_value, param_desc, open_state, cre_time, upd_time)
|
||||||
|
SELECT *
|
||||||
|
FROM (select 1001 as id,
|
||||||
|
'SENTINEL_ENABLED' as param_name,
|
||||||
|
'1' as param_value,
|
||||||
|
'流量监控开启' as param_desc,
|
||||||
|
1 as open_state,
|
||||||
|
CURRENT_TIMESTAMP as cre_time,
|
||||||
|
CURRENT_TIMESTAMP as upd_time) as temp
|
||||||
|
WHERE NOT EXISTS(SELECT 1
|
||||||
|
FROM base_sys_param
|
||||||
|
WHERE id = 1001);
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- since: 1.12.0
|
-- since: 1.12.0
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
|
|||||||
@ -1,5 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="weather-root">
|
<div v-if="userStore.sysParams.HEFENG_ENABLED === '0'" class="weather-root">
|
||||||
|
<div class="placeholder">
|
||||||
|
<div class="remark">未启用天气</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else class="weather-root">
|
||||||
<bl-row class="location" just="flex-end">
|
<bl-row class="location" just="flex-end">
|
||||||
{{ weather.location.name }}
|
{{ weather.location.name }}
|
||||||
<el-tooltip placement="top" effect="light" :show-after="1000" :hide-after="0" :auto-close="3000">
|
<el-tooltip placement="top" effect="light" :show-after="1000" :hide-after="0" :auto-close="3000">
|
||||||
@ -349,4 +354,38 @@ const refreshWeatherTask = () => {
|
|||||||
box-shadow: 0 2px 10px 3px rgba(0, 0, 0, 0.3);
|
box-shadow: 0 2px 10px 3px rgba(0, 0, 0, 0.3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.weather-root .placeholder {
|
||||||
|
@include flex(column, center, center);
|
||||||
|
width: 440px;
|
||||||
|
height: 200px;
|
||||||
|
margin-left: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: var(--el-color-primary-light-7);
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 200%;
|
||||||
|
height: 100%;
|
||||||
|
background: repeating-linear-gradient(
|
||||||
|
-45deg,
|
||||||
|
transparent 0,
|
||||||
|
transparent 20px,
|
||||||
|
var(--el-color-primary-light-5) 20px,
|
||||||
|
var(--el-color-primary-light-5) 40px
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
.remark {
|
||||||
|
z-index: 1;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: var(--el-color-primary-light-3);
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -79,7 +79,10 @@ export const DEFAULT_USER_INFO = {
|
|||||||
ARTICLE_LOG_EXP_DAYS: '',
|
ARTICLE_LOG_EXP_DAYS: '',
|
||||||
ARTICLE_RECYCLE_EXP_DAYS: '',
|
ARTICLE_RECYCLE_EXP_DAYS: '',
|
||||||
HEFENG_KEY: '',
|
HEFENG_KEY: '',
|
||||||
|
HEFENG_HOST: '',
|
||||||
|
HEFENG_ENABLED: '1',
|
||||||
BLOSSOM_OBJECT_STORAGE_DOMAIN: '',
|
BLOSSOM_OBJECT_STORAGE_DOMAIN: '',
|
||||||
|
SENTINEL_ENABLED: '1',
|
||||||
SERVER_MACHINE_EXPIRE: '',
|
SERVER_MACHINE_EXPIRE: '',
|
||||||
SERVER_DATABASE_EXPIRE: '',
|
SERVER_DATABASE_EXPIRE: '',
|
||||||
SERVER_HTTPS_EXPIRE: '',
|
SERVER_HTTPS_EXPIRE: '',
|
||||||
|
|||||||
@ -36,14 +36,16 @@
|
|||||||
</bl-row>
|
</bl-row>
|
||||||
|
|
||||||
<!-- 流量统计 -->
|
<!-- 流量统计 -->
|
||||||
<bl-row class="container-name">请求流量</bl-row>
|
<!-- <div > -->
|
||||||
<bl-row class="container-sub-name">
|
<bl-row v-if="userStore.sysParams.SENTINEL_ENABLED === '1'" class="container-name">请求流量</bl-row>
|
||||||
|
<bl-row v-if="userStore.sysParams.SENTINEL_ENABLED === '1'" class="container-sub-name">
|
||||||
Flow Statistic / Requests & Average Response Time(ms)
|
Flow Statistic / Requests & Average Response Time(ms)
|
||||||
<span class="iconbl bl-refresh-smile" @click="loadSentinlLine"></span>
|
<span class="iconbl bl-refresh-smile" @click="loadSentinlLine"></span>
|
||||||
</bl-row>
|
</bl-row>
|
||||||
<bl-row width="880px" height="250px">
|
<bl-row v-if="userStore.sysParams.SENTINEL_ENABLED === '1'" width="880px" height="250px">
|
||||||
<SentinelChartLine ref="SentinelChartLineRef"></SentinelChartLine>
|
<SentinelChartLine ref="SentinelChartLineRef"></SentinelChartLine>
|
||||||
</bl-row>
|
</bl-row>
|
||||||
|
<!-- </div> -->
|
||||||
|
|
||||||
<!-- 热力图 -->
|
<!-- 热力图 -->
|
||||||
<bl-row class="container-name">编辑热力图</bl-row>
|
<bl-row class="container-name">编辑热力图</bl-row>
|
||||||
@ -51,13 +53,13 @@
|
|||||||
每日编辑文章数 (每5分钟更新)
|
每日编辑文章数 (每5分钟更新)
|
||||||
<span class="iconbl bl-refresh-smile" @click="loadArticleHeapmap"></span>
|
<span class="iconbl bl-refresh-smile" @click="loadArticleHeapmap"></span>
|
||||||
</bl-row>
|
</bl-row>
|
||||||
<bl-row width="870px" height="270px">
|
<bl-row width="870px" height="260px">
|
||||||
<ChartHeatmap ref="ChartHeatmapRef"></ChartHeatmap>
|
<ChartHeatmap ref="ChartHeatmapRef"></ChartHeatmap>
|
||||||
</bl-row>
|
</bl-row>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
=======================================================
|
=======================================================
|
||||||
middle
|
middle
|
||||||
=======================================================
|
=======================================================
|
||||||
@ -85,7 +87,7 @@
|
|||||||
</bl-col>
|
</bl-col>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
=======================================================
|
=======================================================
|
||||||
right
|
right
|
||||||
=======================================================
|
=======================================================
|
||||||
@ -145,10 +147,18 @@ const ChartLineWordsRef = ref()
|
|||||||
const SentinelChartLineRef = ref()
|
const SentinelChartLineRef = ref()
|
||||||
const ChartHeatmapRef = ref()
|
const ChartHeatmapRef = ref()
|
||||||
|
|
||||||
onActivated(() => (now.value = nowWhen()))
|
onActivated(() => {
|
||||||
|
now.value = nowWhen()
|
||||||
|
loadSentinlLine()
|
||||||
|
})
|
||||||
const loadWordLine = () => ChartLineWordsRef.value.reload()
|
const loadWordLine = () => ChartLineWordsRef.value.reload()
|
||||||
const loadArticleHeapmap = () => ChartHeatmapRef.value.reload()
|
const loadArticleHeapmap = () => ChartHeatmapRef.value.reload()
|
||||||
const loadSentinlLine = () => SentinelChartLineRef.value.reload()
|
const loadSentinlLine = () => {
|
||||||
|
if (userStore.sysParams.SENTINEL_ENABLED === '1') {
|
||||||
|
SentinelChartLineRef.value.reload()
|
||||||
|
SentinelChartLineRef.value.windowResize()
|
||||||
|
}
|
||||||
|
}
|
||||||
const now = ref(nowWhen())
|
const now = ref(nowWhen())
|
||||||
//#region ----------------------------------------< 字数编辑 >--------------------------------------
|
//#region ----------------------------------------< 字数编辑 >--------------------------------------
|
||||||
const isShowWordsInfoDialog = ref(false)
|
const isShowWordsInfoDialog = ref(false)
|
||||||
|
|||||||
@ -70,6 +70,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="开启天气功能">
|
||||||
|
<bl-row>
|
||||||
|
<el-switch
|
||||||
|
size="default"
|
||||||
|
v-model="serverParamForm.HEFENG_ENABLED"
|
||||||
|
@change="(cur: boolean) => updParam('HEFENG_ENABLED', cur ? '1' : '0')" />
|
||||||
|
</bl-row>
|
||||||
|
<div class="conf-tip">是否开启和风天气功能。</div>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="和风天气 Host">
|
<el-form-item label="和风天气 Host">
|
||||||
<el-input size="default" v-model="serverParamForm.HEFENG_HOST" @change="(cur: any) => updParam('HEFENG_HOST', cur)"></el-input>
|
<el-input size="default" v-model="serverParamForm.HEFENG_HOST" @change="(cur: any) => updParam('HEFENG_HOST', cur)"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -82,6 +92,17 @@
|
|||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="开启首页流量统计">
|
||||||
|
<bl-row>
|
||||||
|
<el-switch
|
||||||
|
size="default"
|
||||||
|
v-model="serverParamForm.SENTINEL_ENABLED"
|
||||||
|
@change="(cur: boolean) => updParam('SENTINEL_ENABLED', cur ? '1' : '0')" />
|
||||||
|
</bl-row>
|
||||||
|
<div class="conf-tip">是否开启首页流量统计。</div>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<!-- -->
|
||||||
<el-form-item label="服务器到期时间">
|
<el-form-item label="服务器到期时间">
|
||||||
<div class="conf-tip">如果你使用云服务器或其他有时限的环境,可在此配置到期提示,其他环境可无视,(<code>yyyy-MM-dd</code>格式)。</div>
|
<div class="conf-tip">如果你使用云服务器或其他有时限的环境,可在此配置到期提示,其他环境可无视,(<code>yyyy-MM-dd</code>格式)。</div>
|
||||||
<el-input size="default" v-model="serverParamForm.SERVER_MACHINE_EXPIRE" @change="(cur: any) => updParam('SERVER_MACHINE_EXPIRE', cur)">
|
<el-input size="default" v-model="serverParamForm.SERVER_MACHINE_EXPIRE" @change="(cur: any) => updParam('SERVER_MACHINE_EXPIRE', cur)">
|
||||||
@ -134,7 +155,9 @@ const serverParamForm = ref({
|
|||||||
BACKUP_EXP_DAYS: 0,
|
BACKUP_EXP_DAYS: 0,
|
||||||
HEFENG_HOST: '',
|
HEFENG_HOST: '',
|
||||||
HEFENG_KEY: '',
|
HEFENG_KEY: '',
|
||||||
|
HEFENG_ENABLED: false,
|
||||||
BLOSSOM_OBJECT_STORAGE_DOMAIN: '',
|
BLOSSOM_OBJECT_STORAGE_DOMAIN: '',
|
||||||
|
SENTINEL_ENABLED: true,
|
||||||
SERVER_MACHINE_EXPIRE: '',
|
SERVER_MACHINE_EXPIRE: '',
|
||||||
SERVER_DATABASE_EXPIRE: '',
|
SERVER_DATABASE_EXPIRE: '',
|
||||||
SERVER_DOMAIN_EXPIRE: '',
|
SERVER_DOMAIN_EXPIRE: '',
|
||||||
@ -177,7 +200,9 @@ const getParamList = () => {
|
|||||||
...{
|
...{
|
||||||
ARTICLE_LOG_EXP_DAYS: Number(resp.data.ARTICLE_LOG_EXP_DAYS),
|
ARTICLE_LOG_EXP_DAYS: Number(resp.data.ARTICLE_LOG_EXP_DAYS),
|
||||||
ARTICLE_RECYCLE_EXP_DAYS: Number(resp.data.ARTICLE_RECYCLE_EXP_DAYS),
|
ARTICLE_RECYCLE_EXP_DAYS: Number(resp.data.ARTICLE_RECYCLE_EXP_DAYS),
|
||||||
BACKUP_EXP_DAYS: Number(resp.data.BACKUP_EXP_DAYS)
|
BACKUP_EXP_DAYS: Number(resp.data.BACKUP_EXP_DAYS),
|
||||||
|
HEFENG_ENABLED: resp.data.HEFENG_ENABLED === '1',
|
||||||
|
SENTINEL_ENABLED: resp.data.SENTINEL_ENABLED === '1'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user