Настройка фильтрации объектов в меню FILTERS

Описание системы фильтрации

Меню FILTERS позволяет устанавливать фильтры для объектов. При использовании фильтров объекты, не удовлетворяющие выбранным фильтрам, не будут отображаться в списке объектов. Фильтрация может быть произведена по последним собранным историческим данным, по свойствам объектов и по свойствам объектов верхнего уровня. Если для объекта не определено искомое свойство или не подключен требуемый счетчик для получения исторических данных, фильтрация к объекту не применяется и объект отображается в списке.

Для настройки фильтрации объектов необходимо описать переменные и составить логическое выражение, определяющее работу фильтра. Настройка производится в файле conf/objectFilters.json

Определение переменных

Переменные определяются в объекте variables в виде объектов. Переменная OBJECT_NAME является предопределенной переменной и принимает значение имени объекта.

  • settings Пример variables (нажмите для того, чтобы развернуть)
    "variables": {
        "HOST_TYPE": {
            "source": "property",
            "name": "HOST_TYPE"
        },
        "SERVICE_TYPE": {
            "source": "upLevelProperty",
            "name": "SERVICE_TYPE",
        },
        "SERVICE_STATE": {
            "source": "history",
            "counter": "I: Service state",
            "expiration": "10m",
            "expiredValue": -1
        },
        "FREE_MEMORY": {
            "source": "history",
            "counter": "I: Free memory",
            "expiration": "10m",
            "expiredValue": -1
        },
        "IDLE_DISK_TIME": {
            "source": "history",
            "counter": "I: % Idle Disk Time",
            "expiration": "10m",
            "expiredValue": -1
        }
    },
  • Имя объекта является именем переменной.
  • source - определяет способ получения данных для установки значения переменной:
    • history - получать последние данные, собранные счетчиком
    • property - получать данные из свойства объекта
    • upLevelProperty - получать данные из свойства родительского объекта (объекта верхнего уровня в иерархии объектов, анализируется один уровень вверх). Фильтрация будет применена к объектам, если хотя бы один объект верхнего уровня содержит искомое свойство.
  • name - используется только для source "property" и "upLevelProperty". Указывает имя свойства для получения значения переменной. Свойство может быть только константой. Вычисляемые свойства не поддерживаются. Поиск имени свойства осуществляется без учета регистра символов.
  • counter - используется для source "history". Устанавливает имя счетчика для получения данных для переменной. Переменная становится равна последнему значению, полученному от счетчика.
  • expiration - используется для source "history". Необязательный параметр. Если данные от счетчика получены позже указанного времени, переменной будет присвоено значение, указанное в свойстве expiredValue или, если expiredValue не указано, переменная останется неопределенна. Для указания expiration можно использовать предопределенные конверсии.
  • expiredValue - используется для source "history". Необязательный параметр. Значение, которое присваивается переменной, если данные счетчика получены позже времени, указанного в expiration.

Определение фильтров

Фильтры определяются в массиве filters в виде объектов:

  • settings Пример filters (нажмите для того, чтобы развернуть)
    "filters": [
        {
            "name": "Production servers",
            "description": "Alepiz servers used for production",
            "expression": "%:HOST_TYPE:% == 'prod' && testRE(%:OBJECT_NAME:%, '\\.alepiz\\.com$', 'i')"
            "checkedForRoles": ["Administrators", "Business"]
        },
        {
            "name": "Development servers",
            "description": "Servers used for development and testing",
            "expression": "%:HOST_TYPE:% == 'prod'"
        },
        {
            "name": "Test services",
            "description": "Services with a Test property",
            "expression": "testRE(%:SERVICE_TYPE:%, 'T', 'gi')"
        },
        {
            "name": "Reserve services",
            "description": "Services with a Reserve property",
            "expression": "testRE(%:SERVICE_TYPE:%, 'R', 'gi')"
        },
        {
            "name": "Running services",
            "description": "Services with service state = 0",
            "expression": "%:SERVICE_STATE:% == 0 && %:SERVICE_STATE:% <= -1"
        },
        {
            "name": "Stopped services",
            "description": "Services with service state = 6",
            "expression": "%:SERVICE_STATE:% == 6 && %:SERVICE_STATE:% <= -1"
        },
        {
            "name": "Low free memory",
            "description": "All productions servers with low free memory",
            "expression": "%:FREE_MEMORY:% < 1Gb && %:HOST_TYPE:% == 'prod' && %:FREE_MEMORY:% != -1"
        },
        {
            "name": "High disk memory",
            "description": "All productions servers with high disk load",
            "expression": "%:IDLE_DISK_TIME:% < 10 && %:HOST_TYPE:% == 'prod' && %:IDLE_DISK_TIME:% != -1"
        }
    ]
  • name - имя фильтра, которое отображается в меня FILTERS
  • description - описание фильтра, которое отображается в качестве подсказки при подведении указателя к имени фильтра
  • expression - логическое выражение, которое определяет необходимость фильтрации объекта в списке объектов. Если значение выражения - true (или может быть приведено к true через преобразование типов), объект будет отображаться. Если false (или может быть приведено к false через преобразование типов), объект будет скрыт. Логическое выражение может использовать переменные, описанные в variables и предопределенную переменную OBJECT_NAME, значением которой является имя объекта. Логическое выражение формируется по правилам формирования выражений для счетчиков и описано в "Примеры использования вычислений".
  • checkedForRoles - массив с перечнем ролей, для которых этот фильтр будет включен по умолчанию при обновлении страницы или списка фильтров.

Пример файла настроек conf/objectFilters.json

  • settings Пример файла настроек фильтров conf/objectFilters.json (нажмите для того, чтобы развернуть)
    {
        "variables": {
            "HOST_TYPE": {
                "source": "property",
                "name": "HOST_TYPE"
            },
            "SERVICE_TYPE": {
                "source": "upLevelProperty",
                "name": "SERVICE_TYPE"
            },
            "SERVICE_STATE": {
                "source": "history",
                "counter": "I: Service state",
                "expiration": "10m",
                "expiredValue": -1
            },
            "FREE_MEMORY": {
                "source": "history",
                "counter": "I: Free memory",
                "expiration": "10m",
                "expiredValue": -1
            },
            "IDLE_DISK_TIME": {
                "source": "history",
                "counter": "I: % Idle Disk Time",
                "expiration": "10m",
                "expiredValue": -1
            }
        },
        "filters": [
            {
                "name": "Production servers",
                "description": "Alepiz servers used for production",
                "expression": "%:HOST_TYPE:% == 'prod' && testRE(%:OBJECT_NAME:%, '\\.alepiz\\.com$', 'i')"
            },
            {
                "name": "Development servers",
                "description": "Servers used for development and testing",
                "expression": "%:HOST_TYPE:% == 'prod'"
            },
            {
                "name": "Test services",
                "description": "Services with a Test property",
                "expression": "testRE(%:SERVICE_TYPE:%, 'T', 'gi')"
            },
            {
                "name": "Reserve services",
                "description": "Services with a Reserve property",
                "expression": "testRE(%:SERVICE_TYPE:%, 'R', 'gi')"
            },
            {
                "name": "Running services",
                "description": "Services with service state = 0",
                "expression": "%:SERVICE_STATE:% == 0"
            },
            {
                "name": "Stopped services",
                "description": "Services with service state = 6",
                "expression": "%:SERVICE_STATE:% == 6"
            },
            {
                "name": "Low free memory",
                "description": "All productions servers with low free memory",
                "expression": "%:FREE_MEMORY:% < 1Gb && %:HOST_TYPE:% == 'prod'"
            },
            {
                "name": "High disk memory",
                "description": "All productions servers with high disk load",
                "expression": "%:IDLE_DISK_TIME:% < 10 && %:HOST_TYPE:% == 'prod'"
            }
        ]
    }