Может кто поделится скриптиком (python) по созданию графика и сохранению его во вкладку graphs?
Создания графика на основе чего? Что хочется получить?
Александр,
идея следующая: раз в сутки по крону или еще как запускается скрипт, который находит "новые" интерфейсы на маршрутизаторах, создает bps и pps dci и строит на них графики, присваивает имя и сохраняет в дерево graphs: services->ia-> %interface_description%.
Насколько я понял это можно сделать при помощи NXCP путем создания сообщений типа:
msg = org.netxms.base.NXCPMessage(org.netxms.base.NXCPCodes.CMD_SAVE_GRAPH)
... конфиг графика
s.sendMessage(msg)
А перед этим нужно еще dci на создавать. Довольно трудоемкий процесс :)
Такие DCI можно (и нужно) создавать при помощи Instance Discovery, по списку интерфейсов.
График - да, надо будет скриптом.
Альтернативный вариант - включить дял этих DCI опцию Show in performance tab, тогда они автоматом будут появляться в закладке "Performance" на объекте.
Александр,
как используются классы GraphItem, GraphItemStyle, GraphSettings? Полагаю что они используются как вспомогательные средства по построению конфига графика, который потом помещается в NXCPCodes.VID_GRAPH_CONFIG, но как это делается не могу понять. На текущий момент, я просто создаю текстовую переменную в которой содержится конфигурация графика и все.
Ну на уровне сообщений протокола я бы предложил не спускаться :) Собственно конфигурация графика - это XML. Если он подготовлен, то записать график можно так (XML здесь для примера):
from java.util import ArrayList
xml = '<chart><title>Test Graph</title><dciList length="1"><dci nodeId="111" dciId="55"><type>1</type><name>Server thread pool AGENT: normalized load average (1 minute)</name><lineWidth>2</lineWidth><displayType>0</displayType><area>false</area><showThresholds>false</showThresholds><invertValues>false</invertValues><instance></instance><column></column><displayFormat>%s</displayFormat></dci></dciList></chart>'
gs = GraphSettings(0, session.getUserId(), 0, ArrayList(0));
gs.setName("My graph");
gs.setConfig(xml);
session.saveGraph(gs, True);
Примеры XML конфигурации можно посмотреть в базе или в конфигурации дашборда - на любом элементе Line Chart выбрать Edit XML. Верхний уровень будет немного отличаться, но конфигурация данных (внутри тега <dciList>) - нет.
Виктор, мне еще надо добавить accessList.
from java.util import ArrayList
for user in s.getUserDatabaseObjects():
if user.getName() == "Helpdesk":
helpdeskUser = user.getId()
break
acl = AccessListElement(helpdeskUser, UserAccessRights.OBJECT_ACCESS_READ)
gs = GraphSettings(0, s.getUserId(), ArrayList(acl))
Но у меня вылазит ошибка:
TypeError: java.util.ArrayList(): 1st arg can't be coerced to int, java.util.Collection
Кстати, при работе с сообщения вылазит таже проблема в части добавления аксес листа:
acl_id = NXCPCodes.VID_GRAPH_ACL_BASE + 1
msg.setFieldInt32(acl_id, int(2147483650)) <----- вот здесь ругается can't be coerced to int
Access list - это список, надо его сначала создать, а потом добавить элемент:
acl = ArrayList()
acl.add(AccessListElement(helpdeskUser, UserAccessRights.OBJECT_ACCESS_READ))
gs = GraphSettings(0, session.getUserId(), 0, acl)