странно работает функция min()

Started by Ethril, November 18, 2010, 11:33:50 AM

Previous topic - Next topic

Ethril

Сделал в шаблоне 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 везде работают нормально.

Ethril

Заменил на
min( GetDCIValue($node, FindDCIByName($node, "Disk.FreePerc(C:)")), 5.0)
и заработало. :)

Ethril

Аналогично с
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)
Тоже работает случайным образом.

Ethril

Догадался наконец запустить скрипт typeof( GetDCIValue($node, FindDCIByName($node, "Disk.Free(C:)")) ) и сразу стало ясно, что на большинстве машин возвращается uint32, но на некоторых - int64. Соответственно, там, где uint32, неправильно считаются значения > 2**32 bytes.
Версии агентов, разрядность, ОС на всех разные.

Victor Kirhenshtein

Da, v min i max bila oshibka pri rabote s raznimi tipami dannih. Ispravil, v 1.0.8 etoj problemi ne budet.