increase the request timeout in frontend if the timeout of requesting third-party exchange rates api exceeds the default time
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"github.com/mayswind/ezbookkeeping/pkg/core"
|
"github.com/mayswind/ezbookkeeping/pkg/core"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
"github.com/mayswind/ezbookkeeping/pkg/errs"
|
||||||
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
||||||
|
"github.com/mayswind/ezbookkeeping/pkg/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
const ezbookkeepingServerSettingsGlobalVariableName = "EZBOOKKEEPING_SERVER_SETTINGS"
|
const ezbookkeepingServerSettingsGlobalVariableName = "EZBOOKKEEPING_SERVER_SETTINGS"
|
||||||
@@ -109,6 +110,10 @@ func (a *ServerSettingsApi) ServerSettingsJavascriptHandler(c *core.WebContext)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if config.ExchangeRatesRequestTimeoutExceedDefaultValue {
|
||||||
|
a.appendIntegerSetting(builder, "errt", int(config.ExchangeRatesRequestTimeout))
|
||||||
|
}
|
||||||
|
|
||||||
return []byte(builder.String()), "", nil
|
return []byte(builder.String()), "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,6 +163,15 @@ func (a *ServerSettingsApi) appendBooleanSetting(builder *strings.Builder, key s
|
|||||||
builder.WriteString(";\n")
|
builder.WriteString(";\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *ServerSettingsApi) appendIntegerSetting(builder *strings.Builder, key string, value int) {
|
||||||
|
builder.WriteString(ezbookkeepingServerSettingsGlobalVariableFullName)
|
||||||
|
builder.WriteString("[")
|
||||||
|
a.appendEncodedString(builder, key)
|
||||||
|
builder.WriteString("]=")
|
||||||
|
builder.WriteString(utils.IntToString(value))
|
||||||
|
builder.WriteString(";\n")
|
||||||
|
}
|
||||||
|
|
||||||
func (a *ServerSettingsApi) appendEncodedString(builder *strings.Builder, content string) {
|
func (a *ServerSettingsApi) appendEncodedString(builder *strings.Builder, content string) {
|
||||||
builder.WriteRune('\'')
|
builder.WriteRune('\'')
|
||||||
runes := []rune(content)
|
runes := []rune(content)
|
||||||
|
|||||||
+10
-4
@@ -328,10 +328,11 @@ type Config struct {
|
|||||||
CustomMapTileServerDefaultZoomLevel uint8
|
CustomMapTileServerDefaultZoomLevel uint8
|
||||||
|
|
||||||
// Exchange Rates
|
// Exchange Rates
|
||||||
ExchangeRatesDataSource string
|
ExchangeRatesDataSource string
|
||||||
ExchangeRatesRequestTimeout uint32
|
ExchangeRatesRequestTimeout uint32
|
||||||
ExchangeRatesProxy string
|
ExchangeRatesRequestTimeoutExceedDefaultValue bool
|
||||||
ExchangeRatesSkipTLSVerify bool
|
ExchangeRatesProxy string
|
||||||
|
ExchangeRatesSkipTLSVerify bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadConfiguration loads setting config from given config file path
|
// LoadConfiguration loads setting config from given config file path
|
||||||
@@ -910,6 +911,11 @@ func loadExchangeRatesConfiguration(config *Config, configFile *ini.File, sectio
|
|||||||
|
|
||||||
config.ExchangeRatesProxy = getConfigItemStringValue(configFile, sectionName, "proxy", "system")
|
config.ExchangeRatesProxy = getConfigItemStringValue(configFile, sectionName, "proxy", "system")
|
||||||
config.ExchangeRatesRequestTimeout = getConfigItemUint32Value(configFile, sectionName, "request_timeout", defaultExchangeRatesDataRequestTimeout)
|
config.ExchangeRatesRequestTimeout = getConfigItemUint32Value(configFile, sectionName, "request_timeout", defaultExchangeRatesDataRequestTimeout)
|
||||||
|
|
||||||
|
if config.ExchangeRatesRequestTimeout > defaultExchangeRatesDataRequestTimeout {
|
||||||
|
config.ExchangeRatesRequestTimeoutExceedDefaultValue = true
|
||||||
|
}
|
||||||
|
|
||||||
config.ExchangeRatesSkipTLSVerify = getConfigItemBoolValue(configFile, sectionName, "skip_tls_verify", false)
|
config.ExchangeRatesSkipTLSVerify = getConfigItemBoolValue(configFile, sectionName, "skip_tls_verify", false)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -103,3 +103,7 @@ export function getAmapApiExternalProxyUrl() {
|
|||||||
export function getAmapApplicationSecret() {
|
export function getAmapApplicationSecret() {
|
||||||
return getServerSetting('amas');
|
return getServerSetting('amas');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getExchangeRatesRequestTimeout() {
|
||||||
|
return getServerSetting('errt');
|
||||||
|
}
|
||||||
|
|||||||
+4
-2
@@ -9,7 +9,8 @@ import {
|
|||||||
import {
|
import {
|
||||||
getGoogleMapAPIKey,
|
getGoogleMapAPIKey,
|
||||||
getBaiduMapAK,
|
getBaiduMapAK,
|
||||||
getAmapApplicationKey
|
getAmapApplicationKey,
|
||||||
|
getExchangeRatesRequestTimeout
|
||||||
} from './server_settings.js';
|
} from './server_settings.js';
|
||||||
import { getTimezoneOffsetMinutes } from './datetime.js';
|
import { getTimezoneOffsetMinutes } from './datetime.js';
|
||||||
import { generateRandomUUID } from './misc.js';
|
import { generateRandomUUID } from './misc.js';
|
||||||
@@ -619,7 +620,8 @@ export default {
|
|||||||
},
|
},
|
||||||
getLatestExchangeRates: ({ ignoreError }) => {
|
getLatestExchangeRates: ({ ignoreError }) => {
|
||||||
return axios.get('v1/exchange_rates/latest.json', {
|
return axios.get('v1/exchange_rates/latest.json', {
|
||||||
ignoreError: !!ignoreError
|
ignoreError: !!ignoreError,
|
||||||
|
timeout: getExchangeRatesRequestTimeout() || apiConstants.defaultTimeout
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
generateQrCodeUrl: (qrCodeName) => {
|
generateQrCodeUrl: (qrCodeName) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user