feat(http): add message deduplication utility

This commit is contained in:
Jacky 2025-02-06 01:46:22 +00:00
parent 1a68dc526d
commit 13a1cd800e
No known key found for this signature in database
GPG key ID: 215C21B10DF38B4D
2 changed files with 26 additions and 8 deletions

View file

@ -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")
} }
} }

View file

@ -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)