Топология

Материал из Документация Ключ-АСТРОМ

Расширения / Разработка / Расширения / Топология

Устройства являются основой топологий. Каждое устройство может представлять собой службу (базу данных, файловый сервер, маршрутизатор и т. д.). Метрики, события и свойства можно сообщать на уровне устройства. Группа устройств — это набор устройств. О свойствах также можно сообщать на уровне группы устройств.

Чтобы сообщить об устройствах и группах устройств, используйте topology_builderобъект. Объект доступен как свойство RemoteBasePluginкласса, которое вы можете использовать для создания группы устройств.

По возможности назначайте устройствам IP-адреса и порты. Ключ-АСТРОМ AI требует этого для обнаружения зависимостей между компонентами.

Отчет об устройствах

По умолчанию назначение технологии устройства определяется в файле расширения JSON. Кроме того, можно сообщить о нескольких IP-адресах и портах, назначенных одному устройству. Вы можете использовать их для сопоставления обнаруженных служб с конкретным устройством.

add_endpointМетод позволяет настраивать IP-адреса, DNS-имена и порты.

  • ipэто одна строка, и она обязательна.
  • dnsNamesname — это список строк, разделенных запятыми.
  • Порты могут быть указаны как одно portчисло port_listили range_list.

Примеры использования:

add_endpoint("1.1.1.1")

            add_endpoint(ip="1.1.1.1")

            add_endpoint("172.18.19.241", 4581)

            add_endpoint(ip="1.1.1.1", port=80)

            add_endpoint(ip="1.1.1.1", port=80, dnsNames=["name.com"])

            add_endpoint(ip="1.1.1.1", port=80, dnsNames=["name.com"], port_list=[88,8080], range_list=[(680, 690), (880, 900)])

            add_endpoint(ip="1.1.1.1", port=None, dnsNames=["name.com"], port_list=None, range_list=[(80, 88), (447, 450)])

Существует ограничение в 100 портов, которые должны быть сообщены на одно устройство в одну минуту. Превышение этого предела приведет к исключению конфигурации.

from ruxit.api.base_plugin import RemoteBasePlugin

class MyPlugin(RemoteBasePlugin):

def query(self, **kwargs):

group = self.topology_builder.create_group("My group", "My group")

device = group.create_element("My device", "My device")

device.report_property("my_property", "First device")

device.add_endpoint("172.18.19.241", 4581)

device.relative("my_device_counter", 2)


{

  "name": "custom.remote.python.my_plugin",

  "version": "1.001",

  "type": "python",

  "entity": "CUSTOM_DEVICE",

  "metricGroup": "my_plugin",

  "processTypeNames": ["PYTHON"],

  "technologies": ["example technology"],

  "source": {

    "package": "my_plugin",

    "className": "MyPlugin",

    "activation": "Remote"

  },

  "metrics": [

    {

      "timeseries": {

        "key": "my_device_counter",

        "unit": "Count",

        "displayname": "my counter"

      }

    }

  ]

}

Отчет по группам устройств

По умолчанию назначение технологии группе устройств определяется в файле расширения JSON.

from ruxit.api.base_plugin import RemoteBasePlugin

class MyPlugin(RemoteBasePlugin):

def query(self, **kwargs):

group = self.topology_builder.create_group("My group", "My group")

group.report_property("my_property", "First group")

group.absolute("my_group_counter", 1)


{

  "name": "custom.remote.python.my_plugin",

  "version": "1.001",

  "type": "python",

  "entity": "CUSTOM_DEVICE",

  "metricGroup": "my_plugin",

  "processTypeNames": ["PYTHON"],

  "technologies": ["example technology"],

  "source": {

    "package": "my_plugin",

    "className": "MyPlugin",

    "activation": "Remote"

  },

  "metrics": [

    {

      "entity": "PROCESS_GROUP",

      "timeseries": {

        "key": "my_group_counter",

        "unit": "Count",

        "displayname": "my counter"

      }

    }

  ],

  "ui": {

    "pgmetrics": [

      {

        "key": "my_group_counter",

        "displayname": "My counter"

      }

    ]

  }

}