NetXMS Support Forum

Russian Support => Общие вопросы => Topic started by: Ethril on November 18, 2010, 11:33:50 AM

Title: странно работает функция min()
Post by: Ethril on November 18, 2010, 11:33:50 AM
Сделал в шаблоне Dummy DCI со следующим Transformation Script:
min( GetDCIValue($node, FindDCIByName($node, "Disk.FreePerc(C:)")), 5)
Во-первых, оно не заработало на серверах с Win2000, с сообщением "SYS_SCRIPT_ERROR Script (DCI::имя_сервера::DCI_ID) execution error: Error 4 in line 1: Bad arithmetic conversion".
Во-вторых, на остальных серверах оно работает рандомно, на некоторых выдавая правильный результат, а на некоторых других - обратный, как будто используется ф-ция max(). От разрядности и версий агентов на серверах проблема не зависит.
Почему так?

P.S. GetDCIValue, FindDCIByName и Disk.FreePerc везде работают нормально.
Title: Re: странно работает функция min()
Post by: Ethril on November 18, 2010, 11:44:33 AM
Заменил на
min( GetDCIValue($node, FindDCIByName($node, "Disk.FreePerc(C:)")), 5.0)
и заработало. :)
Title: Re: странно работает функция min()
Post by: Ethril on November 18, 2010, 11:59:49 AM
Аналогично с
min( GetDCIValue($node, FindDCIByName($node, "Disk.Free(C:)")), 1024*1024*1024)  :(

Пробовал такие варианты:
min( GetDCIValue($node, FindDCIByName($node, "Disk.Free(C:)")), 1024.0*1024.0*1024.0)
min( GetDCIValue($node, FindDCIByName($node, "Disk.Free(C:)")), 1073741824)
min( GetDCIValue($node, FindDCIByName($node, "Disk.Free(C:)")), 1073741824.0)
Тоже работает случайным образом.
Title: Re: странно работает функция min()
Post by: Ethril on November 18, 2010, 05:09:55 PM
Догадался наконец запустить скрипт typeof( GetDCIValue($node, FindDCIByName($node, "Disk.Free(C:)")) ) и сразу стало ясно, что на большинстве машин возвращается uint32, но на некоторых - int64. Соответственно, там, где uint32, неправильно считаются значения > 2**32 bytes.
Версии агентов, разрядность, ОС на всех разные.
Title: Re: странно работает функция min()
Post by: Victor Kirhenshtein on November 21, 2010, 11:26:37 PM
Da, v min i max bila oshibka pri rabote s raznimi tipami dannih. Ispravil, v 1.0.8 etoj problemi ne budet.