Сделал в шаблоне 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 везде работают нормально.
Заменил на
min( GetDCIValue($node, FindDCIByName($node, "Disk.FreePerc(C:)")), 5.0)
и заработало. :)
Аналогично с
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)
Тоже работает случайным образом.
Догадался наконец запустить скрипт typeof( GetDCIValue($node, FindDCIByName($node, "Disk.Free(C:)")) ) и сразу стало ясно, что на большинстве машин возвращается uint32, но на некоторых - int64. Соответственно, там, где uint32, неправильно считаются значения > 2**32 bytes.
Версии агентов, разрядность, ОС на всех разные.
Da, v min i max bila oshibka pri rabote s raznimi tipami dannih. Ispravil, v 1.0.8 etoj problemi ne budet.