# Мониторинг состояния

## Мониторинг состояния

Начиная с версий Itgrix bx [3.6.0](https://docs.itgrix.ru/for-admins/pages/-M0SZwZn5pERjpAzqeP-#3.6.0) и Itgrix amo [2.9.0](https://docs.itgrix.ru/for-admins/pages/-MFFgLMt-w7Eq-gUqvP2#2.9.0), в API модуля интеграции добавляется метод проверки статуса приложения `<Asterisk IP>:8077/status`. Периодическая проверка ответа на этот запрос может быть использована для отслеживания состояния приложения и автоматической реакции на проблемы.

## Примеры запросов

Ниже приводятся запросы отдельных элементов статусов с пояснениями их предполагаемого использования. Элементы извлекаются из ответа при помощи утилиты `jq` - процессора json-данных, [доступного для установки](https://stedolan.github.io/jq/download/) на совместимых с Itgrix системах.

Полные данные о состоянии можно получить запросом:

```
curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status"
```

Здесь `<Asterisk IP>` - адрес сервера Asterisk, на который был установлен модуль.\
`-s` - уменьшает количество промежуточного вывода от `curl`.\
`--digest -u` - указывает способ авторизации.\
`<login>` и `<password>` - логин и пароль от админки.

Реакция на выявляемые состояния приложения в примерах не описана и определяется потребностями пользователя.

Пример ответа:

```json
{
  "app": {
    "c2c": {
      "connected": true,
      "on": true,
      "portal": "example.bitrix24.ru",
      "stayon": false,
      "url": "https://apix.itgrix.ru:9004"
    },
    "calls_queue": {
      "calls": 0,
      "lock": "locked in 384ns"
    },
    "calls_storage": {
      "calls": 0
    },
    "crm": {
      "host": "https://example.bitrix24.ru",
      "manager": {
        "batch_queue": 0,
        "connector": {
          "app_type": "LicenseType_Subscription",
          "authseq": {
            "err": "<nil>",
            "sequences": 0
          },
          "on": true,
          "portal": "example.bitrix24.ru"
        },
        "on": true
      },
      "on": true,
      "users_cache": {
        "last_updated": "2023-05-11 13:03:55.485 +05:00",
        "phones": 39,
        "users": 120
      }
    },
    "crm_type": "bitrix",
    "customizer": {
      "enabled": true,
      "methods": {
        "customize_activity": true,
        "customize_attach_record_url": true,
        "customize_autodistribution": true,
        "customize_entity": true,
        "customize_show_call_card": true,
        "need_registration": true,
        "post_registration": true,
        "process_client_phone": true,
        "process_final_params": true,
        "process_originate_params": true,
        "process_record_file_path": true,
        "process_registration_params": true,
        "process_task_creation_params": true,
        "process_user_phone": true
      },
      "path": "/opt/itgrix_bx/customizer/customize.php",
      "timeout": 2000
    },
    "err": "<nil>",
    "license_manager": {
      "currentLicense": {
        "offline": false,
        "type": "Professional",
        "valid_till": "2025-04-15"
      },
      "on": true,
      "soft_mode": "ready"
    },
    "lock": "locked in 279ns",
    "master": {
      "general": {
        "app_err": "<nil>",
        "app_state": "",
        "app_status": "Ok",
        "app_status_updated": "2023-04-27 08:58:38.172 +05:00"
      }
    },
    "originated": 0,
    "pbx": {
      "ami": {
        "logged_in": true,
        "on": true,
        "pending_actions": 0
      },
      "cel_queue": {
        "calls": 0,
        "pending_events": 0
      },
      "db": {
        "connected": true,
        "dbConnector": {
          "on": true
        }
      },
      "fmc_cache": {
        "last_refresh": "2023-05-11 13:03:55.485 +05:00",
        "phones": 39
      },
      "last_id": 713065,
      "on": true,
      "parked": 0,
      "sql_parser": {
        "originated": 0,
        "transfer_bridges": 0
      },
      "trunks": 2
    },
    "restarting": false,
    "version": "Itgrix_bx v3.10.12"
  },
  "instance": {
    "config": "/etc/itgrix_bx/config.json",
    "index": 0,
    "log": "/var/log/itgrix_bx.log",
    "service": "itgrix_bx"
  }
}
```

### Остановка/перезапуск приложения

С помощью описанных ниже запросов можно отследить когда и почему приложение перестаёт работать.

{% code overflow="wrap" %}

```
curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.master.general.app_state
```

{% endcode %}

Варианты значений `app_state`:

* При нормальной работе будет возвращаться значение `""`.
* Значение `"stopped"` возвращается когда приложение столкнулось с ошибкой, препятствующей дальнейшей работе и ожидает действий со стороны пользователя.
* Значение `"restarting"` возвращается когда приложение перезапускается. Это может быть вызвано проблемой, которая предположительно решится переподключением и/или коротким ожиданием, например при проблемах с сетью. Перезапуск также может быть и штатным, например при изменении настроек подключений.

{% code overflow="wrap" %}

```
curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.master.general.app_status" 
```

{% endcode %}

`app_status` содержит общий статус приложения, который может быть `"Ok"`/`"Warning"`/`"Error"`. Это статус, который отображается вверху главной страницы админки. Во многих случаях он соответствует состоянию работает/перезапускается/остановлено, но в некоторых ситуациях может предоставлять дополнительную информацию. Например, он может помочь отличить штатный перезапуск от перезапуска в результате ошибки.

{% code overflow="wrap" %}

```
curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.master.general.app_err"
```

{% endcode %}

`app_err` содержит детали ошибки, на основании которой формируется текст ошибки под статусом приложения на главной странице. Этот элемент может быть полезен для выяснения причин сбоя.

### Смена лицензии

Такой запрос позволяет заметить переключение на лицензию с меньшим функционалом, что может произойти не только при истечении срока действия лицензии, но и при проблемах соединения с сервером лицензирования.

{% code overflow="wrap" %}

```
curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.license_manager.currentLicense.type"
```

{% endcode %}

`license.type` возвращает тип лицензии, отображаемый вверху главной страницы админки. Возможные значения:

* `"Professional"` - оплаченная лицензия с полным функционалом.
* `"Subscription"` - лицензия "по подписке" с ограниченным функционалом.
* `"Free"` - бесплатная лицензия с базовым функционалом.

{% code overflow="wrap" %}

```
curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.license_manager.currentLicense.valid_till"
```

{% endcode %}

`license.valid_till` содержит дату истечения лицензии (последний день когда она имеет силу) в формате `ГГГГ-ММ-ДД`.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.itgrix.ru/for-admins/status-monitoring.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
