Bug 54815 - Ошибка при создании правила управления трафиком в PBS через веб-интерфейс, если выбран русский язык
Summary: Ошибка при создании правила управления трафиком в PBS через веб-интерфейс, ес...
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: proxmox-backup-server (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Alexey Shabalin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-06-16 17:57 MSK by Vera Blagoveschenskaya
Modified: 2025-11-13 15:32 MSK (History)
6 users (show)

See Also:


Attachments
screen (42.08 KB, image/jpeg)
2025-06-16 17:57 MSK, Vera Blagoveschenskaya
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Vera Blagoveschenskaya 2025-06-16 17:57:15 MSK
Created attachment 18845 [details]
screen

Server 11.0 x86_64
proxmox-backup 3.3.3.1-alt4

Ошибка обнаружена при проверке Эксплуатационной документации (глава ⁠57.5. Управление трафиком), версия пакета:
docs-alt-server-11.0-alt5

Шаги воспроизведения:
1. Изменить язык интерфейса на русский
Для этого: справа наверху root@pam->Язык->Русский-Русский->Применить

2. Настройка правила управления трафиком в веб-интерфейсе (в разделе Конфигурация → Управление трафиком нажать кнопку Добавить )

3. Задать параметры, например:
Имя: weekday-in-office
Входная скорость: 10 MiB/s
Выходная скорость: 40 MiB/s
Задать интервалы времени: Время начала - 8:00 и Время завершения - 19:00
Остальные параметры можно оставить по умолчанию

4. Нажать кнопку Добавить

Ожидаемый результат:
Правило успешно добавилось

Фактический реузльтат:
Появляется ошибка, правило не добавляется:

parameter verification errors (400)
rate-in: byte-size parse error for '10.00 МиБ': invalid float literal
rate-out: byte-size parse error for '40.00 МиБ': invalid float literal

Доп.Информация:
Если задать правило через консоль, то правило успешно добавляется, но внести какие либо изменения через веб-интерфейс не получается, с той же ошибкой.

# proxmox-backup-manager traffic-control create rule0  --network 0.0.0.0/0 \
  --rate-in 100MB --rate-out 100MB \
  --comment "Default rate limit (100MB/s) for all clients" 


Если не переключать язык интерфейса, а оставить английский, то ошибка не воспроизводится.
Предполагаю что ошибка заключается в том, что при передаче значений из веб-интерфейса, туда же попадают кириллические символы МиБ , вместо MiB , что и вызывает ошибку.

На Server 10.4 - Ошибка не воспроизводится

https://git.altlinux.org/gears/p/proxmox-backup.git?p=proxmox-backup.git;a=blob;f=vendor/proxmox-human-byte/src/lib.rs;h=9f728fad481831c8dbbd74273df30b1218d3f4b7;hb=94c99bdcf42acfa034ae5cc6467844d09ff1ffa3

Перечислены только английские единицы измерения. Видимо, потому русские и вызывают ошибку.
Comment 1 Vera Blagoveschenskaya 2025-08-07 15:06:21 MSK
Для архитектуры aarch64 указанная проблема также актуальна.
Comment 2 Vladislav Glinkin 2025-11-10 16:23:27 MSK
> Предполагаю что ошибка заключается в том, что при передаче значений из веб-интерфейса, туда > же попадают кириллические символы МиБ , вместо MiB , что и вызывает ошибку.

Версии пакетов:
proxmox-widget-toolkit-5.0.4-alt1
proxmox-backup-server-4.0.14.1-alt2

Проблема связана с тем, что в API запрос подставляется переведённый вариант размера данных. Воспроизводится на тех языках, где единицы измерения данных переведены.

К примеру, на Итальянском, Немецком или Китайском - это не воспроизводится, поскольку перевод единиц измерения там не трогали.

Аналогичная ошибку можно получить и в терминале:
[root@proxmoxbackupserver ~]# proxmox-backup-debug api create /config/traffic-control/ --name 'test' --network '0.0.0.0/0' --rate-in '50 МиБ'
Error: parameter verification failed - 'rate-in': byte-size parse error for '50 МиБ': invalid float literal

В классе PBS.window.TrafficControlEdit (/usr/share/javascript/proxmox-backup/js/proxmox-backup-gui.js) у параметров rate-in, rate-out, burst-in, burst-out submitAutoScaledSizeUnit принимает значение true -> в /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js вызывается участок кода:
if (fieldContainer.submitAutoScaledSizeUnit) {
	return Proxmox.Utils.format_size(v, !unit.endsWith('iB'));
} else {
	return String(Math.floor(v / fieldContainer.backendFactor));
}

Судя по всему, здесь функция format_size и возвращает тот самый переведённый вариант:

format_size: function (size, useSI) {  
   let unitsSI = [  
	   gettext('B'),  
	   gettext('KB'),  
	   gettext('MB'),  
	   gettext('GB'),  
	   gettext('TB'),  
	   gettext('PB'),  
	   gettext('EB'),  
	   gettext('ZB'),  
	   gettext('YB'),  
   ];  
   let unitsIEC = [  
	   gettext('B'),  
	   gettext('KiB'),  
	   gettext('MiB'),  
	   gettext('GiB'),  
	   gettext('TiB'),  
	   gettext('PiB'),  
	   gettext('EiB'),  
	   gettext('ZiB'),  
	   gettext('YiB'),  
   ];  
   let order = 0;  
   let commaDigits = 2;  
   const baseValue = useSI ? 1000 : 1024;  
   while (size >= baseValue && order < unitsSI.length) {  
	   size = size / baseValue;  
	   order++;  
   }  

   let unit = useSI ? unitsSI[order] : unitsIEC[order];  
   if (order === 0) {  
	   commaDigits = 0;  
   }  
   return `${size.toFixed(commaDigits)} ${unit}`;  
},

Если убрать использование gettext в массивах unitsIEC и unitsSI - то проблема воспроизводится не будет.
Comment 3 Repository Robot 2025-11-13 15:32:10 MSK
proxmox-widget-toolkit-5.0.4-alt2 -> sisyphus:

Wed Nov 12 2025 Sergey Konev <darisishe@altlinux> 5.0.4-alt2
- Avoid sending translated size unit to API (Closes: #54815)