feat: add timeout and chunking to proxy label fetching

This commit is contained in:
Ivan K
2025-02-21 17:55:39 +03:00
parent febb69d0be
commit a278918e77
2 changed files with 39 additions and 12 deletions

View File

@@ -53,17 +53,36 @@ function createConfigSection(section, map, network) {
o.rows = 5;
o.ucisection = s.section;
o.load = function (section_id) {
return fs.exec('/etc/init.d/podkop', ['get_proxy_label', section_id]).then(res => {
if (res.stdout) {
try {
const decodedLabel = decodeURIComponent(res.stdout.trim());
this.description = _('Current config: ') + decodedLabel;
} catch (e) {
console.error('Error decoding label:', e);
this.description = _('Current config: ') + res.stdout.trim();
}
}
return this.super('load', section_id);
return new Promise((resolve, reject) => {
const timeout = setTimeout(() => {
console.error('Label fetch timeout');
resolve(this.super('load', section_id));
}, 5000); // 5 second timeout
fs.exec('/etc/init.d/podkop', ['get_proxy_label', section_id])
.then(res => {
clearTimeout(timeout);
if (res.stdout) {
try {
const chunks = res.stdout.trim().split('\n');
const fullLabel = chunks.join('');
const decodedLabel = decodeURIComponent(fullLabel);
this.description = _('Current config: ') + decodedLabel;
} catch (e) {
console.error('Error processing label:', e);
// If decoding fails, try to display the raw chunks
const chunks = res.stdout.trim().split('\n');
const fullLabel = chunks.join('');
this.description = _('Current config: ') + fullLabel;
}
}
resolve(this.super('load', section_id));
})
.catch(error => {
clearTimeout(timeout);
console.error('Error fetching label:', error);
resolve(this.super('load', section_id));
});
});
};
o.validate = function (section_id, value) {

View File

@@ -1840,11 +1840,19 @@ get_proxy_label() {
local section="$1"
local proxy_string
local label=""
local chunk_size=50
local start=0
config_get proxy_string "$section" "proxy_string"
if [ -n "$proxy_string" ]; then
label=$(echo "$proxy_string" | sed -n 's/.*#\(.*\)$/\1/p')
echo "$label"
if [ -n "$label" ]; then
# Split label into chunks and output one at a time
while [ $start -lt ${#label} ]; do
echo "${label:$start:$chunk_size}"
start=$((start + chunk_size))
done
fi
fi
}