---
# System prepended metadata

title: Подготовка к релизу

---

# Подготовка к релизу

[TOC]


## Checklists

### Функциональный тест (таблица)

- [ ] Сконфигурировать ran-routing
    - [ ] Создать новый workspace в ran-routing для нужного региона
        - [ ] Перейти на https://cloud.everynet.io/
        - [ ] Выбрать "тестовую" организацию.
        - [ ] Выбрать нужный регион, например US
        - [ ] Workspaces -> New Workspace
        - [ ] Ввести название `ran routing functional test`
        - [ ] Скопировать URL и Access Token как `RAN_ROUTING_URL` и `RAN_ROUTING_TOKEN`
- [ ] Сконфигурировать ran-config + ran-lorawan (попросить Дениса помочь)
    - [ ] Создать новую запись в БД ran-config для виртуального гейтвея.
    - [ ] Создать новый токен доступа для этого виртуального гейтвея.
    - [ ] Получить URL для подключения к Ran-Config и токен доступа, записать их как `RAN_CONFIG_URL` `RAN_CONFIG_TOKEN`
- [ ] Заполнить прочие [переменные окружения](https://gitlab.everynet.io/ran-routing/observer/-/blob/master/REAMDE_FUNCTEST.md)

Финальная конфигурация теста должна выглядеть подобным образом:
```yaml=
    environment:
      # Настройки подключения к RAN-CONFIG + RAN-LORAWAN для эмуляции устройства
      - RAN_CONFIG_URL=${RAN_CONFIG_URL}
      - RAN_CONFIG_TOKEN=${RAN_CONFIG_TOKEN}

      # Настройки подключения к RAN-ROUTING для эмуляции клиента
      - RAN_ROUTING_URL=${RAN_ROUTING_URL}
      - RAN_ROUTING_TOKEN=${RAN_ROUTING_TOKEN}

      # Прочие настройки
      - SENTRY_ENVIRONMENT=stand
      - SENTRY_SERVER_NAME=ran-routing-observer
      - SENTRY_RELEASE=latest
      - SENTRY_DSN=${SENTRY_DSN}
      - LOG_LEVEL=info
      - HEALTHCHECK_PORT=9091
      - METRICS_PORT=9092
```

### Функциональный тест (wildcard)

- [ ] Сконфигурировать ran-routing
    - [ ] Создать новый workspace в ran-routing для нужного региона
        - [ ] Перейти на https://cloud.everynet.io/
        - [ ] Выбрать "тестовую" организацию.
        - [ ] Выбрать нужный регион, например US
        - [ ] Workspaces -> New Workspace
        - [ ] Ввести название `ran routing functional test (wildcard)`
        - [ ] Скопировать URL и Access Token в .env-файл как `RAN_ROUTING_URL` и `RAN_ROUTING_TOKEN`
    - [ ] Настроить wildcard для этого workspace
        - [ ] Составить нужные маски для `join_eui`, `dev_addr`
        - [ ] Попросить Никиту или Глеба выполнить запрос к wokrspace-api, поскольку этот API недоступен публично и требует авторизации.
        ```bash
        curl -X POST http://{workspace-api-url}/api/v1/workspace/set_wildcard \
        -H "Authorization: Bearer $WORKSPACE_API_TOKEN" \ 
        -d '{\
          "id": "<uuid, взять из URL cloud.everynet.io, когда выбран нужный воркспейс>",\
          "allowed_join_eui": 0,\  # нужная маска
          "allowed_dev_addr": 0,\  # нужная маска
        }'
        ```
- [ ] Сконфигурировать ran-config + ran-lorawan (попросить Дениса помочь)
    - [ ] Создать новую запись в БД ran-config для виртуального гейтвея.
    - [ ] Создать новый токен доступа для этого виртуального гейтвея.
    - [ ] Получить URL для подключения к Ran-Config и токен доступа, записать их как `RAN_CONFIG_URL` `RAN_CONFIG_TOKEN`
- [ ] Заполнить прочие [переменные окружения](https://gitlab.everynet.io/ran-routing/observer/-/blob/master/REAMDE_FUNCTEST.md)


Финальная конфигурация теста должна выглядеть подобным образом:
```yaml=
    environment:
      # Настройки подключения к RAN-CONFIG + RAN-LORAWAN для эмуляции устройства
      - RAN_CONFIG_URL=${RAN_CONFIG_URL}
      - RAN_CONFIG_TOKEN=${RAN_CONFIG_TOKEN}

      # Настройки подключения к RAN-ROUTING для эмуляции клиента
      - RAN_ROUTING_URL=${RAN_ROUTING_URL}
      - RAN_ROUTING_TOKEN=${RAN_ROUTING_TOKEN}

      # Прочие настройки
      - SENTRY_ENVIRONMENT=stand
      - SENTRY_SERVER_NAME=ran-routing-observer
      - SENTRY_RELEASE=latest
      - SENTRY_DSN=${SENTRY_DSN}
      - LOG_LEVEL=info
      - HEALTHCHECK_PORT=9091
      - METRICS_PORT=9092
```


### Интеграционный тест

- [ ] Сконфигурировать ran-config + ran-lorawan (попросить Дениса помочь)
    - [ ] Создать новую запись в БД ran-config для виртуального гейтвея.
    - [ ] Создать новый токен доступа для этого виртуального гейтвея.
    - [ ] Получить URL для подключения к Ran-Config и токен доступа, записать их как `RAN_CONFIG_URL` `RAN_CONFIG_TOKEN`
- [ ] В каждом из тестируемых NS создать и настроить устройство.
    - [ ] Создать уникальное (см. ниже) OTAA устройство и добавить его в нужный NS
    - [ ] Убедиться, что интеграции (bridge) запущены, а списки устройств синхронизированы
        - [ ] **Если NS использует routing table** - Убедиться, что произошла синхронизация устройства с ran-routing
        - [ ] **если NS подключен как wildcard** - Убедиться, что wildcard настроен правильно
    - [ ] Сформировать JSON, содержащий настройки устройства, см. пример ниже.
- [ ] Заполнить `TEST_DEVICE_LIST` (json array) нужными устройствами
- [ ] Заполнить прочие [переменные окружения](https://gitlab.everynet.io/ran-routing/observer/-/blob/master/REAMDE_INTEGRTEST.md)


Финальная конфигурация теста должна выглядеть подобным образом:
```yaml=
    environment:
      # Настройки подключения к RAN-CONFIG + RAN-LORAWAN для эмуляции устройства
      - RAN_CONFIG_URL=${RAN_CONFIG_URL}
      - RAN_CONFIG_TOKEN=${RAN_CONFIG_TOKEN}

      # Список устройств, которые будет эмулировать этот тест
      - TEST_DEVICE_LIST=|-
                        [
                            {
                                "id": "ns",
                                "dev_eui": "f38e74fcdb2bd427",
                                "join_eui": "1aef23bdfd3a8a67",
                                "app_key":"1561b3cdd81265fa4f77a51300b77a05",
                                "band": "EU868"
                            },
                            {
                                "id": "fns",
                                "dev_eui": "2224848c93d72744",
                                "join_eui": "58edcf624f8bbeef",
                                "app_key": "52f42247d5527fb087abd05fd608baac",
                                "band": "US915"
                            }
                        ]

      # Прочие настройки
      - SENTRY_ENVIRONMENT=stand
      - SENTRY_SERVER_NAME=ran-routing-observer
      - SENTRY_RELEASE=latest
      - SENTRY_DSN=${SENTRY_DSN}
      - LOG_LEVEL=info
      - HEALTHCHECK_PORT=9091
      - METRICS_PORT=9092
```


### Создание устройств для интеграционного теста

При создании отличных, от указанных здесь, устройств и при наличии любых wildcard-соединений с ran-routing (например, FNS bridge включён), обязательно убедитесь, что устройство обладает такими идентификаторами (DevEUI, JoinEUI, DevAddr), чтобы трафик от него передавался только нужному NS!

#### Everynet NS

- [ ] Зайти на https://ns.stage.everynet.dev/devices (для STAGE/DEV) или **УТОЧНИТЬ URL** (для PROD)
- [ ] Нажать на `+`, чтобы добавить устройство
- [ ] Выбрать Organisation ID - организацию Test или Test Everynet
- [ ] Указать в поле Device EUI `f38e74fcdb2bd427`
- [ ] Указать в поле Application EUI `1aef23bdfd3a8a67`
- [ ] Добавить тег `test-integration`
- [ ] Указать тип активации OTAA (По умолчанию)
- [ ] Указать шифрование NS
- [ ] Указать Application key `1561b3cdd81265fa4f77a51300b77a05`
- [ ] Указать LoRaWAN protocol version - v1.0.3
- [ ] Указать Band `EU863-870`. 
    - **Важно** - на данный момент интеграционный тест поддерживает только US915 и EU863, поэтому предпочтительно использовать один из этих. Поскольку и гейтвей и устройство виртуальное - реальный band указывать не обязательно.
- [ ] Нажать `Save`, чтобы сохранить устройство.
- [ ] Для интеграционного теста заполнить конфигурацию`TEST_DEVICE_LIST` таким образом:
    ```json
    [{  
        "id": "ns",  // Идентификатор NS, который будет отображаться в dashboard
        "dev_eui": "f38e74fcdb2bd427",
        "join_eui": "1aef23bdfd3a8a67",
        "app_key":"1561b3cdd81265fa4f77a51300b77a05",
        "band": "EU868"  // Используйте тот же BAND, что вы указали в NS для эмуляции устройства
    }]
    ```

#### FNS

**TBD!**


---


## Что нужно сделать

Список вещей, которые нужно сделать с релизом (или до релиза) нового ran-routing

### Streaming API

- [x] Поддержка нескольких TxWindow
- [x] Фильтрация трафика по приватным сетям

### Subscription API

- [x] Покрыть тестами метод upsert

### Workspace API

- [x] Сделать API для настройки wildcard (?)
- [x] Сделать API для управления send_gps и другими параметрами (?)

### Спецификация

- [ ] Сделать отдельный repo на gitlab, где будет лежать спецификация (сейчас она в старом репо [ran-routing](https://gitlab.everynet.io/platform/ran/ran-routing/-/blob/master/docs/RanAPI_Spec.MD))
- [ ] Обновить информацию об эндпоинтах
- [ ] Обновить описания структур данных согласно новой схеме
    - [ ] Добавить информацию про новый формат TxWindow (с поддержкой нескольких)
- [ ] Обновить примеры с использованием curl

### SDK

#### Python

- [x] Добавить поддержку upsert для subscription-api

#### GO

- [ ] Добавить поддержку upsert для subscription-api
- [ ] Упразднить ConnectionManager


### Bridges

#### ChirpStack v3/v4

- [x] Cинхронизация устройств
    - [x] Завершить систему быстрого считывания информации об устройствах из ChirpStack (прочти готово, доделать и закоммитить)
    - [x] Использовать upsert для быстрой синхронизации устройств
- [ ] Обновить документацию у бриджей по необходимости
- [x] У bridge дляChirpStack v4 обновить контракты chirpstack-api (было минорное обновление)
- [ ] Сделать релиз нового бриджа на GitHub

#### TTN

**!!!** Код этого бриджа сильно устарел. 

- [ ] Поддержка нового Streaming API
- [ ] Обновление tti-contracts
- [ ] etc


