Skip to main content
Skip table of contents

Установка оркестратора и его компонентов

В подразделе представлена вся необходимая информация для установки и настройки оркестратора и его компонентов:

  • Server Orchestration

  • Redis for Server Orchestrator

  • Nginx for Server Orchestrator

  • MySQL for Server Orchestrator

  • Tarantool for Server Orchestrator (Matcher Service)

  • Push1st for Server Orchestrator

  • ClickHouse for Server Orchestrator

1. Установка компонентов и зависимостей:

  • redis-server – утилита, для создания виртуального окружения

  • mysql-server mysql-client python3-dev default-libmysqlclient-dev build-essential – MySQL и его зависимости

  • nginx – HTTP-сервер и обратный прокси-сервер (если необходимо)

  • python3-virtualenv – библиотека для создания виртуального окружения

  • Версия ClickHouse – 22.3.19.6

CODE
#!/bin/bash 
sudo apt update && sudo apt install -y apt-transport-https \
                                       ca-certificates \
                                       dirmngr \
                                       redis-server \
                                       mysql-server \
                                       mysql-client \
                                       python3-dev \
                                       default-libmysqlclient-dev \
                                       build-essential \
                                       nginx \
                                       python3-virtualenv \
                                       python3-pip

GNUPGHOME=$(mktemp -d)
sudo GNUPGHOME="$GNUPGHOME" gpg --no-default-keyring --keyring /usr/share/keyrings/clickhouse-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 8919F6BD2B48D754
sudo rm -r "$GNUPGHOME"
sudo chmod +r /usr/share/keyrings/clickhouse-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee \
    /etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-client
sudo service clickhouse-server start

2. Произведите клонирование проекта оркестратора из репозитория (доступ к репозиторию предоставляется по запросу пользователя)

BASH
#!/bin/bash
git clone git@bitbucket.org:<company>/<xxxx>-analytics-orchestrator-server.git /opt/analytics-orchestrator-server

git clone --branch <version> https://<company>_jenkins:d8HD3xMVeRffqUR2UNn4@bitbucket.org/<company>/<xxxx>-analytics-orchestrator-server.git /opt/analytics-orchestrator-server

3. В корне проекта создайте виртуальное окружение venv и активируйте его

BASH
#!/bin/bash
cd /opt/analytics-orchestrator-server
virtualenv venv
source venv/bin/activate

4. Сделайте установку зависимых пакетов pip install -r requirements.txt

BASH
#!/bin/bash
cd /opt/analytics-orchestrator-server
pip install -r requirements.txt

5. Загрузите схему базы, схема лежит в server/management/events_collector/db/events_extracted.sql:

BASH
#!/bin/bash
clickhouse-client -n < /opt/analytics-orchestrator-server/server/management/events_collector/db/events_extracted.sql

6. Создайте пользователя orchestrator в clickhouse, для этого нужно отредактировать конфигурационный файл /etc/clickhouse-server/users.d/orchestrator.xml

/etc/clickhouse-server/users.d/orchestrator.xml.xml
BASH
<clickhouse>
    <users>
      <orchestrator>
          <profile>default</profile>
            <networks>
                  <ip>::/0</ip>
            </networks>
          <password>orchestrator</password>
          <quota>default</quota>
      </orchestrator>
    </users>
</clickhouse>

6.1. Измените параметр listen_host на 0.0.0.0 для clickhouse-server в файле /etc/clickhouse-server/config.xml

BASH
<!-- Listen specified address.
         Use :: (wildcard IPv6 address), if you want to accept connections both with IPv4 and IPv6 from everywhere.
         Notes:
         If you open connections from wildcard address, make sure that at least one of the following measures applied:
         - server is protected by firewall and not accessible from untrusted networks;
         - all users are restricted to subset of network addresses (see users.xml);
         - all users have strong passwords, only secure (TLS) interfaces are accessible, or connections are only made via TLS interfaces.
         - users without password have readonly access.
         See also: https://www.shodan.io/search?query=clickhouse
      -->
    <listen_host>0.0.0.0</listen_host>

6.2. Измените параметр timezone на UTC, для этого нужно добавить конфигурационный файл /etc/clickhouse-server/config.d/timezone.xml

CODE
<clickhouse>    
    <timezone>UTC</timezone>
</clickhouse>

7. Проверьте работу сервисов

BASH
systemctl restart clickhouse-server.service
systemctl status clickhouse-server.service

8. Установите push1st и необходимые компоненты/зависимости

BASH
#!/bin/bash
# Add repository key
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 9A4D3B9B041D12EF0D23694D8222A313EDE992FD
# Add repository to source list and adjust auth
echo "deb [arch=amd64] https://nexus.<company>.com/repository/ubuntu-universe/ universe main" | sudo tee /etc/apt/sources.list.d/push1st.list
echo "machine nexus.<company>.com/repository login public password public" | sudo tee /etc/apt/auth.conf.d/nexus.<company>.com.conf
sudo apt update && sudo apt install -y push1st
# возможны проблемы с версией push1st
# additional dependencies (If necessary, this is optional)
sudo luarocks install lua-cjson2

9. Настройте сервис push1st

BASH
#!/bin/bash
nano /opt/<company>/push1st/server.yml 
server.yml
BASH
# ssl forward declaration
ssl:
    - &default-ssl
      key: # path to SSL private key file
      cert: # path to SSL cert file

# channels configuration section
server:
    proto: [ pusher, websocket ]       # enabled proto
    threads: 5                  # number of worker threads
    max-request-payload: 65400  # global max request payload length less or equal 65400
    listen: tcp://*:6003   # false, tcp://<host>:<port>
    ssl: { enable: false, *default-ssl }
    app-path: app/  # <proto>/<app-path>/<app-key> url
    pusher:
        path: /pusher/
        activity-timeout: 40    # pusher activity timeout (pusher ping\pong) N seconds
        whitelist: []
    websocket:
        path: /ws/
        activity-timeout: 3600    # ws activity timeout (pusher ping\pong) N seconds
        push: { public, private, presence } # enable\disable push functionality on channels
        whitelist: []
    mqtt:
        path: /mqtt/
        activity-timeout: 3600    # ws activity timeout (pusher ping\pong) N seconds
        push: { public, private, presence } # enable\disable push functionality on channels
        whitelist: []

#cluster:
#    listen: disable # udp://<host>:<port>, multicast://<multicast-group-address>:<port>/<bind-iface-ip-address>
#    ping-interval: 30 # 0 - to disable ping
#    listen: udp://*:8001 # strongly recommended bind to internal IP or close port with iptables
#    family: [ node1.push1st.local, node2.push1st.local ]
#    sync: [ register, unregister, join, leave, push ]
#    module: lua://modules/cluster.lua # cluster module

api:
    keep-alive-timeout: 10          # http api keep-alive connection timeout
    interface: pusher
    ssl: { enable: false, *default-ssl }
    path: /apps/
    whitelist: []
    listen: [ tcp://*:6002/ ]

credentials:
    - apps/*.yml

10. Настройте интеграции с оркестратором видеоаналитики

BASH
#!/bin/bash
nano /opt/<company>/push1st/apps/orchestrator.yml
orchestratot.yml
BASH
orchestrator:
  enbale: true
  name: "Orchestrator"
  key: "app-key"
  secret: "secret"
  options: { client-messages: true, statistic: false }
  channels: [ public, private, presence ]
  origins: [ ]
  hook:
    trigger:
        - register # hook on register channel
        - unregister # hook on unregister channel
        - join # hook on subscribe to channel
        - leave # hook on leave channel
#        - push # hook on subscriber push message to channel, may be increase message delivery latency
    http-pipelining: false
    endpoint:
        - http://<IP-orchestrator-server>:8000/api/events/
#        - lua://modules/hook.lua        

11. Запустите сервис и его проверьте его работу

BASH
#!/bin/bash
systemctl restart push1st.service 
systemctl status push1st.service

12. Установите Tarantool версии 2.8

BASH
#!/bin/bash
curl -L https://tarantool.io/XWleucj/release/2.8/installer.sh | bash
sudo apt update && sudo apt install -y tarantool

13. Проверьте работу сервисов

BASH
#!/bin/bash
systemctl status tarantool

В директории tarantool_app лежит файл: tarantool_service.lua. Скопируйте его в директорию /etc/tarantool/instances.enabled:

CODE
sudo cp tarantool_app/tarantool_service.lua /etc/tarantool/instances.enabled/tarantool_service.lua

В скопированном файле укажите путь к рабочей директории с lua-скриптами (параметр work_dir):

BASH
nano /etc/tarantool/instances.enabled/tarantool_service.lua

box.cfg {
   listen = 3301,
   background = true,
   log = '/var/log/tarantool/vectors.log',
   work_dir = '/opt/analytics-orchestrator-server/tarantool_app'
}

local app = require('app').run()

Далее запустите сервис:

CODE
sudo tarantoolctl start tarantool_service.lua

Проверьте работу сервиса:

CODE
sudo tarantoolctl status tarantool_service

В директории /var/log/tarantool лежит файл с логами (vectors.log)

14. В MySQL создайте базу данных, пользователя, настройте права доступа:

BASH
#!/bin/bash
mysql -u root -e "CREATE DATABASE orchestrator_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"
mysql -u root -e "CREATE USER IF NOT EXISTS 'orchestrator'@'%' IDENTIFIED BY '456redko';"
mysql -u root -e "GRANT ALL PRIVILEGES ON orchestrator_db.* TO 'orchestrator'@'%';"
mysql -u root -e "FLUSH PRIVILEGES;"
#если конетйнерная инсталяция и база для VMS и Analytics одна и та же, то можно ее создать
из контейнера с бэкендом следующей командой:
docker exec <backend-container-name-or-id> mysql --protocol=TCP -u root -pmysql -h mysql-server --execute="CREATE DATABASE orchestrator_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"

15. Из файла example.env сделайте копию и назовите ее .env. В этом файле отредактируйте настройки для MySQL, Redis и Tarantool.

BASH
#!/bin/bash
cd/opt/analytics-orchestrator-server
cp example.env .env

16. Создайте папку логов для проекта /var/log/django

BASH
#!/bin/bash
mkdir -p /var/log/django

17. Для запуска миграций, создания учетной записи для доступа к интерфейсу администрирования оркестратора и загрузки фикстур, запустите:

CODE
#!/bin/bash
cd /opt/analytics-orchestrator-server
source venv/bin/activate
python manage.py seed

18. Настройте интерфейс администрирования оркестратора

CODE
#!/bin/bash
cd /opt/analytics-orchestrator-server
# генерация фронтенда для интерфейса администрирования оркестратора
python manage.py collectstatic

Результат выполнения последней команды – путь к папке, где лежит фронтенд оркестратора. Этот путь нужно указать в настройках nginx (django-backend-nginx) – ШАГ 21

Доступ к интерфейсу администрирования оркестратора: http://<IP-orchestrator-server>/admin/. По умолчания логин и пароль – root/root.

19. В корне проекта есть папка deploy, в которой находятся 5 сервисов. Сервисы необходимо отредактировать, указав в них корректные пути к проекту и окружению.

celery.service
BASH
[Unit]
Description=Celery Simple Dev Service
After=network.target

[Service]
#Type=forking
User=root
Group=root
Environment=CELERY_BIN=/opt/analytics-orchestrator-server/venv/bin/celery
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/bin/sh -c '${CELERY_BIN} -A settings worker -B'
Restart=always

[Install]
WantedBy=multi-user.target
django.service
BASH
[Unit]
Description=Django REST API application
After=network.target

[Service]
RestartSec=5
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/opt/analytics-orchestrator-server/venv/bin/gunicorn -b 0.0.0.0:8000 -w 4 --access-logfile /var/log/django/dj_access.log --error-logfile /var/log/django/dj_error.log settings.wsgi:application
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target
stats_processor.service
BASH
[Unit]
Description=Process statistics from Server and Binaries
After=network.target

[Service]
#Type=forking
User=root
Group=root
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/opt/analytics-orchestrator-server/venv/bin/python manage.py stats_processor
Restart=always

[Install]
WantedBy=multi-user.target
matcher.service
CODE
[Unit]
Description=Matcher python application
After=network.target

[Service]
RestartSec=5
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/opt/analytics-orchestrator-server/venv/bin/python manage.py matcher
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target
events_collector.service
CODE
[Unit]
Description=Matcher python application
After=network.target

[Service]
RestartSec=5
WorkingDirectory=/opt/analytics-orchestrator-server/
ExecStart=/opt/analytics-orchestrator-server/venv/bin/python manage.py events_collector
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target

20. После этого сервисы необходимо положить в /etc/systemd/system/ и выполнить команду systemctl daemon-reload

BASH
#!/bin/bash
ln -s /opt/analytics-orchestrator-server/deploy/celery.service  /etc/systemd/system/celery.service
ln -s /opt/analytics-orchestrator-server/deploy/django.service  /etc/systemd/system/django.service
ln -s /opt/analytics-orchestrator-server/deploy/stats_processor.service  /etc/systemd/system/stats_processor.service
ln -s /opt/analytics-orchestrator-server/deploy/matcher.service  /etc/systemd/system/matcher.service
ln -s /opt/analytics-orchestrator-server/deploy/events_collector.service  /etc/systemd/system/events_collector.service
systemctl daemon-reload
systemctl enable stats_processor.service
systemctl start stats_processor.service
systemctl enable celery.service
systemctl start celery.service 
systemctl enable django.service
systemctl start django.service
systemctl enable matcher.service
systemctl start matcher.service
systemctl enable events_collector.service
systemctl start events_collector.service

21. Далее, в этой же папке deploy лежит конфигурационный файл для nginx, его необходимо перенести в /etc/nginx/sites-available/, а затем сделать ссылку на этот конфигурационный файл в /etc/nginx/sites-enabled/. Также необходимо удалить файл /etc/nginx/sites-enabled/default с настройками по умолчанию. После этого нужно перезагрузить сервис nginx.

django-backend-nginx
BASH
upstream django {
    server 127.0.0.1:8000 fail_timeout=0;
}

server {
    charset utf-8;
    client_max_body_size 128M;

    listen 80; ## listen for ipv4

    server_name _;

    location ^~ /static/ {
     alias /opt/analytics-orchestrator-server/static/;
    }

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header Host $host:80;
        add_header 'Access-Control-Expose-Headers' 'X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset' always;
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,hl,X-Client' always;
        add_header 'Access-Control-Allow-Methods' 'PUT, PATCH, GET, POST, DELETE, OPTIONS' always;
        # include /etc/nginx/uwsgi_params;
        # uwsgi_pass django;
        if ($request_method = OPTIONS ) {
          add_header Content-Length 0;
          add_header 'Access-Control-Allow-Origin' '*' always;
          add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,hl,X-Client' always;
          add_header 'Access-Control-Expose-Headers' 'X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset' always;
          add_header Content-Type text/plain;
          add_header 'Access-Control-Allow-Methods' 'PUT, GET, PATCH, POST, DELETE, OPTIONS' always;
          return 200;
        }

        proxy_pass http://django;
    }
}
BASH
#!/bin/bash
cp /opt/analytics-orchestrator-server/deploy/django-backend-nginx /etc/nginx/sites-available/
ln -s /etc/nginx/sites-available/django-backend-nginx /etc/nginx/sites-enabled/django-backend-nginx
systemctl restart nginx.service

22. Проверьте работу сервисов

BASH
systemctl status mysql
systemctl status redis-server 
systemctl status stats_processor.service
systemctl status events_collector.service 
systemctl status django.service
systemctl status celery.service
systemctl status matcher.service
systemctl status nginx
tarantoolctl status tarantool_service

Клиент оркестратора

  • Orchestrator Client

  • Supervisor

Клиент оркестратора должен устанавливаться там же, где стоят исполняемые модули аналитики (т.к. запуск исполняемых файлов осуществляется через супервизор; также это пока что блокирует запуск клиента аналитики в контейнере).

1. Установка компонентов и зависимостей. Установите supervisor (v. 4.2.2). Подходящий вариант установки можно выбрать тут. python3-virtualenv – библиотека для создания виртуального окружения.

BASH
#!/bin/bash
sudo apt update && sudo apt install -y apt-transport-https ca-certificates dirmngr python3-pip python3-virtualenv supervisor

2. Сделайте клонирование клиента из репозитория (доступ к репозиторию предоставляется по запросу пользователя)

BASH
#!/bin/bash
git clone --branch release/<version> git@bitbucket.org:<company>/<xxxx>-analytics-orchestrator-client.git /opt/analytics-orchestrator-client

git clone --branch release/<version> https://<company>_jenkins:d8HD3xMVeRffqUR2UNn4@bitbucket.org/<company>/<xxxx>-analytics-orchestrator-client.git /opt/analytics-orchestrator-client

3. В корне проекта создайте виртуальное окружение venv и активируйте его

BASH
#!/bin/bash
cd /opt/analytics-orchestrator-client
virtualenv venv
source venv/bin/activate

4. Из активного окружения venv выполните установку зависимых пакетов pip install -r requirements.txt

BASH
#!/bin/bash
cd /opt/analytics-orchestrator-client
pip install -r requirements.txt

5. В файле settings.py необходимо указать корректный url для подключения к push1st по websocket для отправки статистики

/opt/<vms>-analytics-orchestrator-client/settings.py
PY
LISTENER_WEBSOCKET_URL = "ws://<IP-address-pushIst>:6003/ws/app/app-key/"
LISTENER_WEBSOCKET_CHANNEL = "stats"

HOST = "0.0.0.0"
PORT = 8800

STATS_PUSH_PERIOD = 2

6. В папке deploy находится сервис or-client.service. Сервисы необходимо отредактировать, указав в них корректные пути к проекту и окружению (другие настройки – по необходимости).

BASH
#!/bin/bash
nano /opt/analytics-orchestrator-client/deploy/or-client.service
or-client.service
BASH
[Unit]
Description=Orchestrator client application
After=network.target

[Service]
RestartSec=5
WorkingDirectory=/opt/analytics-orchestrator-client/
ExecStart=/opt/analytics-orchestrator-client/venv/bin/python main.py
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target

7. После изменения файлов сервиса необходимо сделать ссылки на сервисы и скопировать их в

/etc/systemd/system/, потом выполнить команду systemctl daemon-reload и запустить сервисы.

BASH
#!/bin/bash
ln -s /opt/analytics-orchestrator-client/deploy/or-client.service /etc/systemd/system/or-client.service
systemctl daemon-reload
systemctl enable or-client.service
systemctl start or-client.service

8. Проверьте работу сервисов

BASH
#!/bin/bash
systemctl status or-client.service
systemctl status supervisor.service

Исполняемый модуль для аналитики

  • VSaaS video analytics bin

  • VSaaS video analytics models

Клиент оркестратора должен устанавливаться там же, где установлен исполняемый модуль аналитики.

ВАЖНО!!! Для корректной работы исполняемый модуль аналитики и его конфигурационные файлы должны располагаться в определенном месте, а именно:

  • /opt/video-analytics/<xxxx>-video-analytics-cpu.out – сам исполняемый модуль

  • /opt/video-analytics/config – конфигурационные файлы

1. Сделайте клонирование исполняемого модуля аналитики из репозитория (доступ к репозиторию предоставляется по запросу пользователя) в папку /opt/

BASH
#!/bin/bash
git clone git@bitbucket.org:<company>/xxxx-video-analytics-bin.git /opt/xxxx-video-analytics-bin

git clone https://<company>_jenkins:d8HD3xMVeRffqUR2UNn4@bitbucket.org/<company>/xxxx-video-analytics-bin.git /opt/xxxx-video-analytics-bin

2. Сделайте клонирование модели для аналитики из репозитория (доступ к репозиторию предоставляется по запросу пользователя) в папку /opt/

BASH
#!/bin/bash
git clone git@bitbucket.org:<company>/xxxx-video-analytics-models.git /opt/xxxx-video-analytics-models

git clone https://<company>_jenkins:d8HD3xMVeRffqUR2UNn4@bitbucket.org/<company>/xxxx-video-analytics-models.git /opt/xxxx-video-analytics-models

3. Из корня проекта исполняемого модуля аналитики запустите скрипт install.sh

BASH
#!/bin/bash
cd /opt/xxxx-video-analytics-bin
bash install.sh

Результатом выполнения скрипта будет директория /opt/video-analytics/. Там будут находиться сам исполняемый модуль, модели, конфигурации и необходимые зависимости.

4. Отредактируйте настройки конфигурации для запуска исполняемого модуля аналитики. Конфигурации лежат в папке /opt/video-analytics/config, нужно изменить параметр events_endpoint на url вебкоскета push1st во всех .ini файлах.

CODE
sed -i -e "s/10.1.16.238:6001/<push1st_ip_address>:6003/" /opt/video-analytics/config/*

При необходимости отредактируйте диапазон ядер, на которых будут запускаться бинари:

CODE
sed -i -e "s/cores.*/cores = <cores_range>/" /opt/video-analytics/config/*

Проверка функционирования

Проверка возможности подключения к MySQL пользователем orchestrator

Выполните команду:

mysql -u orchestrator -p456redko orchestrator_db -e "SELECT * FROM server_server;"

Пример вывода команды

mysql: [Warning] Using a password on the command line interface can be insecure.
+----+------------------+----------------+------+--------+
| id | name | ip | port | active |
+----+------------------+----------------+------+--------+
| 2 | analytics-server | 192.168.200.65 | 8800 | 1 |
+----+------------------+----------------+------+--------+

Проверка возможности подключения к ClickHouse пользователем orchestrator

На сервере аналитики (или в соответствующем контейнере) выполните команду:

clickhouse-client --host localhost --user orchestrator --password orchestrator --query "SELECT * FROM <xxxx>.events"

Пример вывода команды

{"#msg-from": "1680929476218574174.0944083667", "#msg-id": 1680929476047776567, "#msg-time": 210043, "channel": "events", "data": {"#msg-from": "1680929476218574176.0871613960", "#msg-id": 1680929476047776566, "#msg-time": 201760, "channel": "raw-events", "data": {"AnalyticsType": "motion-detect", "CameraGroupUid": "3ff2dbb9-55c5-4a80-b8d4-518005e5f2a3", "JobUid": "fc832c52-d7a3-11ed-91cc-839cabe763cf", "MatchResult": [], "StreamUid": "997f0850-f9a7-42d7-8b7a-eaf4c2efb04e", "apiPort": "8086", "binaryHostIp": "192.168.200.65", "binaryUid": "fd5c57ca-d7a3-11ed-91cc-839cabe763cf", "motionDetected": true, "timestampMs": 1681134922137, "type": "motion-detect-start"}, "event": "event"}, "event": "events"} 2023-04-10 13:55:22 2023-04-10
{"#msg-from": "1680929476218574174.0944083667", "#msg-id": 1680929476047776560, "#msg-time": 174291, "channel": "events", "data": {"#msg-from": "1680929476218574176.0871613960", "#msg-id": 1680929476047776559, "#msg-time": 155767, "channel": "raw-events", "data": {"AnalyticsType": "motion-detect", "CameraGroupUid": "3ff2dbb9-55c5-4a80-b8d4-518005e5f2a3", "JobUid": "fc832c52-d7a3-11ed-91cc-839cabe763cf", "MatchResult": [], "StreamUid": "997f0850-f9a7-42d7-8b7a-eaf4c2efb04e", "apiPort": "8086", "binaryHostIp": "192.168.200.65", "binaryUid": "fd5c57ca-d7a3-11ed-91cc-839cabe763cf", "motionDetected": true, "timestampMs": 1681134915976, "type": "motion-detect-start"}, "event": "event"}, "event": "events"} 2023-04-10 13:55:15 2023-04-10
{"#msg-from": "1680929476218574174.0944083667", "#msg-id": 1680929476047776549, "#msg-time": 168641, "channel": "events", "data": {"#msg-from": "1680929476218574176.0871613960", "#msg-id": 1680929476047776548, "#msg-time": 95665, "channel": "raw-events", "data": {"AnalyticsType": "motion-detect", "CameraGroupUid": "3ff2dbb9-55c5-4a80-b8d4-518005e5f2a3", "JobUid": "fc832c52-d7a3-11ed-91cc-839cabe763cf", "MatchResult": [], "StreamUid": "997f0850-f9a7-42d7-8b7a-eaf4c2efb04e", "apiPort": "8086", "binaryHostIp": "192.168.200.65", "binaryUid": "fd5c57ca-d7a3-11ed-91cc-839cabe763cf", "motionDetected": true, "timestampMs": 1681134904739, "type": "motion-detect-start"}, "event": "event"}, "event": "events"} 2023-04-10 13:55:04 2023-04-10

Для проверки доступности событий аналитики со стороны VMS, в контейнере backend выполнить команду:

BASH
./artisan ti
AnalyticCaseEvent::count()

Команда выдаст текущее число событий аналитики.

Пример вывода команды

[!] Aliasing 'AnalyticCaseEvent' to 'App\Models\AnalyticCaseEvent' for this Tinker session.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 145.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 150.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 155.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 160.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 169.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 174.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 179.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 184.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 189.

DEPRECATED Return type of Tinderbox\Clickhouse\Query\Result::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/the-tinderbox/clickhouse-php-client/src/Query/Result.php on line 198.

= 54

Проверка состояния лицензий аналитики

В интерфейсе администратора перейдите в раздел «Лицензии».

Раздел «Лицензии»

Должны быть числовые значения лицензий.

При проблемах с лицензиями после обновления необходимо проинициализировать локальное хранилище лицензий.

Чтобы это сделать, необходимо удалить все старые лицензии:

  • Выполните команду ./artisan ti

  • Выполните команду License::query()->delete()

  • Выполните команду exit

Для проверки доступности лицензий в контейнере VMS выполните:

curl -k -v $ORCHESTRATOR_ENDPOINT/api/license/

Пример вывода команды

Trying 192.168.200.65:80...
TCP_NODELAY set
Connected to 192.168.200.65 (192.168.200.65) port 80 (#0)
GET /api/license/ HTTP/1.1
Host: 192.168.200.65
User-Agent: curl/7.68.0
Accept: /

< HTTP/1.1 200 OK
< Server: nginx/1.18.0 (Ubuntu)
< Date: Mon, 10 Apr 2023 11:49:32 GMT
< Content-Type: application/json
< Content-Length: 242
< Connection: keep-alive
< Vary: Accept, Cookie
< Allow: GET, HEAD, OPTIONS
< X-Frame-Options: DENY
< X-Content-Type-Options: nosniff
< Referrer-Policy: same-origin
< Access-Control-Expose-Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: Authorization,Accept,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,hl,X-Client
< Access-Control-Allow-Methods: PUT, PATCH, GET, POST, DELETE, OPTIONS
{"issued":"2023-04-10","params":{"L1":{"name":null,"unit":"stream","value":50},"L2":{"name":null,"unit":"stream","value":50},"L3":{"name":null,"unit":"stream","value":50},"UN":{"name":null,"unit":"stream","value":100}},"expired":"2024-03-07"}

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

Проверка опроса статистики оркестратора

Статистика оркестратора отображается в разделе «Аналитика» в кабинете администратора.

Раздел «Модуль аналитики»

Должны быть числовые значения счетчиков.

Заведение кейса аналитики в интерфейсе пользователя

Подробнее о заведении кейса аналитики см. в разделе «Добавление кейсов аналитики».

При заведении кейса аналитики motion-detect, в логе push1st должны появиться следующие сообщения:

Лог при создании кейса «Детекция Движения»

10/04 13:31:36 [ PUBLIC:orchestrator#motion-detect.fd5c57ca-d7a3-11ed-91cc-839cabe763cf ] Register
10/04 13:31:36 [ PUBLIC:21:orchestrator#motion-detect.fd5c57ca-d7a3-11ed-91cc-839cabe763cf ] Subscribe 1680929476218574176.0871613960 ( 1 sessions)

Обновленная информация после заведения кейса аналитики

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.