mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-12 10:55:51 +02:00
feat(http): add message deduplication utility
This commit is contained in:
parent
1a68dc526d
commit
13a1cd800e
2 changed files with 26 additions and 8 deletions
|
@ -66,6 +66,5 @@ func GetNodesAnalytic(c *gin.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
time.Sleep(10 * time.Second)
|
time.Sleep(10 * time.Second)
|
||||||
logger.Debug("[analytic nodes] sleep 10 seconds")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,25 @@ const instance = axios.create({
|
||||||
|
|
||||||
const nprogress = useNProgress()
|
const nprogress = useNProgress()
|
||||||
|
|
||||||
|
// Add new dedupe utility at the top
|
||||||
|
interface MessageDedupe {
|
||||||
|
error: (content: string, duration?: number) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
function useMessageDedupe(interval = 5000): MessageDedupe {
|
||||||
|
const lastMessages = new Map<string, number>()
|
||||||
|
|
||||||
|
return {
|
||||||
|
async error(content, duration = 5) {
|
||||||
|
const now = Date.now()
|
||||||
|
if (!lastMessages.has(content) || (now - (lastMessages.get(content) || 0)) > interval) {
|
||||||
|
lastMessages.set(content, now)
|
||||||
|
message.error(content, duration)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
instance.interceptors.request.use(
|
instance.interceptors.request.use(
|
||||||
config => {
|
config => {
|
||||||
nprogress.start()
|
nprogress.start()
|
||||||
|
@ -70,16 +89,16 @@ instance.interceptors.request.use(
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const dedupe = useMessageDedupe()
|
||||||
|
|
||||||
instance.interceptors.response.use(
|
instance.interceptors.response.use(
|
||||||
response => {
|
response => {
|
||||||
nprogress.done()
|
nprogress.done()
|
||||||
|
|
||||||
return Promise.resolve(response.data)
|
return Promise.resolve(response.data)
|
||||||
},
|
},
|
||||||
// eslint-disable-next-line sonarjs/cognitive-complexity
|
// eslint-disable-next-line sonarjs/cognitive-complexity
|
||||||
async error => {
|
async error => {
|
||||||
nprogress.done()
|
nprogress.done()
|
||||||
|
|
||||||
const otpModal = use2FAModal()
|
const otpModal = use2FAModal()
|
||||||
switch (error.response.status) {
|
switch (error.response.status) {
|
||||||
case 401:
|
case 401:
|
||||||
|
@ -110,7 +129,7 @@ instance.interceptors.response.use(
|
||||||
const msg = errors?.[err.scope]?.[err.code]
|
const msg = errors?.[err.scope]?.[err.code]
|
||||||
|
|
||||||
if (msg) {
|
if (msg) {
|
||||||
// if err has parmas
|
// if err has params
|
||||||
if (err?.params && err.params.length > 0) {
|
if (err?.params && err.params.length > 0) {
|
||||||
let res = msg()
|
let res = msg()
|
||||||
|
|
||||||
|
@ -118,18 +137,18 @@ instance.interceptors.response.use(
|
||||||
res = res.replaceAll(`{${index}}`, param)
|
res = res.replaceAll(`{${index}}`, param)
|
||||||
})
|
})
|
||||||
|
|
||||||
message.error(res, 5)
|
dedupe.error(res)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
message.error(msg(), 5)
|
dedupe.error(msg())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
message.error($gettext(err?.message ?? 'Server error'))
|
dedupe.error($gettext(err?.message ?? 'Server error'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
message.error($gettext(err?.message ?? 'Server error'))
|
dedupe.error($gettext(err?.message ?? 'Server error'))
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.reject(error.response.data)
|
return Promise.reject(error.response.data)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue