UP-LINE — административная панель
Управление релизами, клиентами, устройствами и автообновлениями.

  • Добавить получении сообщений с устройств

  • Дополнить аналитику событий ПО устройств тем, что не вошло в первую версию: периоды короче суток (час), heatmap распределения ошибок по часам и дням недели, MTBF (среднее время между отказами) по устройству и клиенту, а также сравнение двух периодов ("эта неделя vs прошлая") — чтобы после релиза сразу было видно, выросло число ошибок или нет

  • На странице релиза добавить отдельную кнопку "Установить админам" — массовое назначение нового релиза устройствам с типом "Администратор" / "Оператор и администратор". Сейчас "Установить всем" и "Установить клиенту" фильтруют целевые устройства по типу Operator и админ-устройства туда не попадают, релиз на них приходится ставить руками по одному. Логичный порядок выкатки: сначала админам клиента (они применят миграции), потом операторам — с включённой галочкой "Проверить миграции у админов клиентов"

  • Реализовать историю установленных версий на устройстве — на странице устройства показывать список ранее установленных релизов с датой установки, версией и (если возможно) кто/как назначил. Сейчас в БД хранится только текущая установленная версия (InstalledReleaseId) и версия к обновлению (UpdateToReleaseId), смена этих полей не оставляет следа — при разборе инцидентов невозможно понять, на какой версии устройство было неделю назад. Нужна отдельная таблица device_release_history (device_id, release_id, installed_at, source) и запись в неё в момент подтверждения установки устройством

  • Расширить поэтапную установку на админ-устройства. Сейчас задача на установку берёт только операторов, админов и админ-операторов клиента приходится обновлять отдельно и вручную. Нужен порядок "сначала админы, потом операторы": первым этапом — админы клиента (они применят миграции), и только после этого волны операторов, для которых проверка миграций уже работает

  • Кнопки, отправляющие данные, теперь показывают, что запрос ушёл: после нажатия на кнопке появляется индикатор ожидания, сама она блокируется до ответа сервера, а повторное нажатие ничего не отправляет. Раньше страница после нажатия просто стояла без признаков жизни, и было непонятно, идёт обработка или нажатие не сработало

    Заметнее всего это при создании релиза, где загрузка установщиков занимает минуты: кнопка меняется на "Сохраняем релиз…", а под ней идёт счётчик времени ожидания и напоминание не закрывать и не обновлять страницу до конца загрузки

    В действиях с окном подтверждения индикатор включается только после нажатия "Подтвердить": при отмене кнопка остаётся обычной. Если форма не прошла проверку на самой странице, индикатор тоже не появляется

    Кнопки "Обновить" на странице устройства — миграции, производственные линии, конфигурация, дерево файлов логов — показывают индикатор на время запроса к устройству

  • В потоке событий ПО устройств появился канал "Очистка негативных статусов". Устройство раз в сутки чистит таблицу негативных статусов валидации от старых записей и шлёт сюда ошибку очистки и сообщение о том, что она давно не выполнялась. Канал виден в фильтре потока и в аналитике

  • В релиз можно класть apk приложения ТСД. Панель узнаёт его по подстроке "update_hi-mark_tsd" в имени файла или просто по расширению .apk. На устройство такой файл не скачивается и не устанавливается — он остаётся на панели, а модуль оператора и модуль администратора показывают на него прямую ссылку в окне с составом обновления, откуда его можно скачать на рабочее место. Apk необязателен: релиз без него корректен

    Ссылки на apk в карточке релиза теперь открываются. Раньше панель не знала этот тип файла и отвечала 404, хотя сам файл лежал на диске

    При создании релиза проверяется состав файлов: обязателен установщик backend, обязателен хотя бы один frontend — оператора или администратора, и на одно назначение допускается не больше одного файла. Раньше сохранить можно было любой набор, в том числе без единого установщика: устройство всё равно проводило полный цикл обновления — останавливало линии и отчитывалось об успешной установке, не установив ничего. Требования и причина описаны рядом со списком распознаваемых имён на самой странице создания релиза

    Та же проверка стоит на загрузке пререлиза сборкой: неполный пакет отклоняется с понятной ошибкой вместо того, чтобы стать пререлизом, о неполноте которого узнают уже при оформлении релиза

  • В меню появился раздел "Установка" — поэтапная установка релиза вместо выкатки на весь парк разом. На странице релиза рядом с привычными кнопками появилась "Установить поэтапно": задаётся, какая доля устройств обновляется по дням (по умолчанию 10% → 30% → 100%), и панель сама выдаёт обновление волнами. Устройства, до которых очередь ещё не дошла, о новой версии не знают и файлы не качают

    Задача берёт все операторские устройства, на которых стоит версия, отличная от нужной — настраивать тут нечего. При желании охват можно сузить до конкретных клиентов

    Доля накопительная: если сегодня часть устройств не успела обновиться — были в работе, выключены или не на связи — они никуда не пропадают, а войдут в порог следующего дня. Поэтому установка не "сгорает": то, что не поставилось сегодня, поставится завтра вместе со следующей волной

    Дни, когда обновления не ставятся — пятница, выходные и праздники производственного календаря — этап не расходуют. Задача, начатая в четверг, перейдёт ко второму этапу в понедельник, а не потеряет его на выходных

    Очередь раскладывается вперемежку по клиентам, поэтому в первую волну не попадёт целиком один клиент — обновление разойдётся по разным. Устройства не на связи, занятые другой установкой и с работающей производственной линией место в волне не занимают: их черёд наступит, когда они освободятся. Иначе первый день установки мог бы пройти вхолостую — слоты заняты, а поставить релиз никто не может

    Перед каждой волной проверяются миграции: если у админ-устройства клиента не хватает миграций, которые требует релиз, его операторы придерживаются в очереди и уходят в установку сами, как только миграции накатят. На странице задачи видно, сколько устройств придержано и каких клиентов ждём

    Первый этап идёт осторожно: устройства берутся по три, и следующая тройка уходит только после того, как предыдущая встала успешно целиком. Если хоть одно устройство из тройки не встало, установка останавливается — разведка для того и нужна. Первый этап длится столько дней, сколько нужно на его долю парка, и только потом установка идёт по дням целыми волнами

    Если установки начинают падать — задача останавливается сама (по умолчанию при доле неудач выше 20%) и пишет причину. Пауза, ручная или автоматическая, снимает установку с тех, кто ещё не начал ставить, и возвращает их в очередь — при продолжении их выдадут заново

    На первом этапе, если станция не начала установку за 15 минут, оператор отменил её на месте или отложил — устройство возвращается в очередь на 2 часа, а его место в тройке сразу занимает следующее. Через 2 часа оно пробуется снова. Со второго этапа этого нет: волна идёт крупными порциями и просто добавляет новые устройства, ничего не забирая у уже назначенных

    Если станция застряла на 15 минут в "В процессе установки" или "Проверка установки" — это считается ошибкой установки: она уже началась, и сама станция об этом больше ничего не сообщит. Такие устройства идут в долю неудач, по которой срабатывает автостоп. Если установка всё же доедет и версия встанет, запись сама поправится на "Установлено"

    На странице задачи видно текущий этап, сколько устройств открыто к обновлению сегодня, история по дням (назначено / установлено / ошибок) и список устройств с фильтром по состоянию. Активные задачи показываются на главной и на странице релиза. Кнопки "Установить всем" и "Установить клиенту" никуда не делись — они по-прежнему выкатывают релиз сразу, для срочных случаев

    Поэтапная установка не ставит обновления в пятницу: если что-то сломается, разгребать пришлось бы в выходные. Это касается и волн, и устройств, назначенных раньше — станция, получившая релиз в четверг, в пятницу его не поставит. На обычное назначение релиза и на собственные окна установки клиента запрет не распространяется, там пятница остаётся рабочим днём

    Задачу можно завести заранее и начать позже: в поле "Начать с даты" указывается день, с которого пойдут волны. До него не назначается никто, и этапы считаются от этой даты — удобно завести релиз в четверг, а установку начать с понедельника

  • В карточке устройства появилась кнопка "Админка ТП" — она открывает админку техподдержки самой рабочей станции прямо из панели. Раньше попасть туда можно было только с площадки клиента: станции стоят в закрытых сетях и снаружи недоступны. Теперь страницы идут по тому же соединению, которое устройство само держит с админ-панелью, поэтому доступны все разделы техподдержки — партии, агрегация, коды маркировки, этикетки, заказы, отчёты, эмуляторы и оборудование линии

    Отдельный вход на станции не нужен: сеанс техподдержки открывается автоматически под вашей учётной записью, код доступа и QR для этого не требуются

    Доступны не только просмотр, но и действия: формы (например переподключение оборудования), кнопки, работающие без перезагрузки страницы ("Проверить наличие этикетки" и подобные), фильтры, постраничная навигация

    Каждое изменяющее действие записывается в журнал устройства с указанием сотрудника — по журналу видно, кто и что делал на станции через админ-панель. У таких записей свой тип события — "Админка ТП", по нему можно отфильтровать журнал и посмотреть только работу техподдержки

    Раздел закрыт ролью "Управление" и выше: через него доступны действия администратора рабочей станции, поэтому роли "Просмотр" кнопка не видна и адрес вручную тоже не откроется

    Если устройство не на связи или не успело ответить, вместо страницы техподдержки открывается объяснение с кнопкой "Повторить" и ссылкой на карточку устройства. Действия ждут ответа до пяти минут — столько же живёт сеанс техподдержки на станции, и столько могут занимать операции, которые обращаются в "Честный знак" (например закрытие партии с отчётами). Если ответа так и не было, кнопка "Повторить" для таких действий не предлагается: операция могла выполниться, и повторный запуск сделал бы её дважды

  • Рядом появилась вторая кнопка — "Модуль админа". Она так же, через соединение устройства, открывает модуль администратора линии, который установлен на самой станции: партии, печать, коды маркировки, справочники и остальные его разделы

    Вход в модуль остаётся его собственным — под учётной записью администратора линии. Админ-панель только доставляет запросы до станции и не подменяет авторизацию модуля

    Модуль открывается в отдельной вкладке и работает как обычно: переходы по разделам, формы, запросы к линии. Единственное, чего в нём не будет, — живого уведомления о ходе установки релиза: оно приходит по веб-сокету, а он через это соединение не проходит. Статус установки по-прежнему виден в карточке устройства здесь, в админ-панели

    Доступ к модулю — та же роль "Управление" и выше, что и к админке техподдержки

  • Фильтр по установленной версии на странице "Устройства" с операторами "меньше", "меньше или равна" и "не равна" теперь показывает и устройства без установленной версии: у такого устройства версия заведомо старее любой заданной и заведомо ей не равна. Раньше они не попадали в выборку ни под одним оператором сравнения и через фильтр по версии их было не найти — например "меньше 8.0.0" молча пропускал машины, которые ещё ни разу не обновлялись. Под фильтром появилась подсказка, что такие устройства включены в выборку, со ссылкой "Показать только их". Операторы "больше", "больше или равна" и "равна" работают как раньше

    К срезу устройств без версии добавились ещё два перехода: счётчик "Без релиза" в сводке справа на странице устройств и строка "Без установленной версии" в блоке "Распределение по релизам" на главной стали ссылками на список с состоянием "Без установленного релиза" — раньше это число было видно, но посмотреть, какие именно это устройства, можно было только выставив фильтр вручную

  • Блок сводки на главной "Распределение по версиям" стал "Распределением по релизам". Строки идут от свежих релизов к старым — раньше порядок был по числу устройств, и только что вышедшая версия на паре машин терялась в конце списка. У каждой строки теперь видна дата создания релиза (полная дата со временем — в подсказке при наведении), а номер версии стал ссылкой на карточку релиза

    Рядом с числом устройств выводится их доля от всего парка. Полоса под строкой тоже показывает эту долю, а не долю от самой массовой версии, как раньше. В списке — шесть самых новых релизов, остальные сворачиваются в строку "Остальные релизы" с общим числом устройств: вместе со строкой "Без установленной версии" доли складываются в весь парк

  • В разделе "События ПО устройств" добавлена колонка "Клиент" со ссылкой на его карточку — раньше, чтобы понять, чьё это устройство, приходилось открывать само устройство. Устройства без клиента показываются с прочерком. На странице конкретного устройства колонка не появляется — клиент там и так известен

  • В аналитике событий ПО график "События во времени" стал линейным, как в аналитике производства: у каждой критичности своя линия. Раньше это была стопка столбцов, где общая высота скрывала ход отдельных серий — не было видно, растут ошибки или просто прибавилось уведомлений. При наведении на дату показываются значения сразу по всем критичностям

    В аналитике производства имя клиента в таблице заданий стало ссылкой на его карточку — как рядом сделано с устройством

  • Плитки сводки на главной теперь открывают раздел с уже выставленным фильтром, а не общий список: "Онлайн", "Оффлайн", "Ожидают обновления", "Ждут окна обновления" и "Сбои установки" ведут на страницу устройств, "Лицензии истекают" — на клиентов со статусом лицензии "Скоро истекает", "С ошибками · 24ч" — в поток событий за последние сутки. Фильтр виден в форме и сбрасывается кнопкой — раньше после перехода приходилось выставлять его вручную, а часть условий задать было нечем

    Для этого на страницах появились новые фильтры. На "Устройствах" — "Состояние": онлайн, оффлайн, ожидают обновления, ждут окна обновления, сбои установки, без установленного релиза; сводка справа и постраничная навигация считаются по выбранному состоянию. В "Потоке событий" — период "с / по" и сводный вариант статуса "Ошибки и критические" (раньше выбирался только один статус, а ограничить период было нельзя); те же поля появились в блоке "Логи" на странице устройства. На "Клиентах" фильтр по статусу лицензии теперь можно задать ссылкой, и он подставляется при открытии страницы

  • Сборка теперь сама заливает свежие установщики в панель — выкладывать их вручную больше не нужно. Такая загрузка попадает в список релизов как "Предварительный": у неё пока нет ни номера версии, ни описания, ни типа

    Предварительный релиз нельзя назначить на устройства: кнопок "Установить всем" и "Установить клиенту" на его карточке нет, и в списках версий на страницах устройства он тоже не появляется. Сначала его нужно оформить — кнопка "Оформить релиз" на карточке, где задаются номер версии, тип и описание. После этого он становится обычным релизом и ведёт себя как все остальные

    Панель держит не больше трёх предварительных релизов одновременно: при загрузке нового самые старые удаляются вместе с файлами, чтобы ночные сборки не забивали диск

  • В списке релизов у предварительных вместо номера версии стоит пометка "Предварительный", а в сводке справа они считаются отдельной строкой. В "Всего релизов", разбивку по типам и "Последнюю версию" они не входят — иначе свежая ночная сборка выглядела бы как последний выпущенный релиз

    По той же причине кнопка "Последний релиз" на главной ведёт на последний оформленный релиз, а не на предварительный

  • Описание релиза больше не может испортить вёрстку страницы: раньше текст описания подставлялся в страницу как есть, теперь он всегда выводится текстом. Заодно починились переносы строк — они не работали вовсе, и описание показывалось одним слипшимся абзацем

    Номер версии проверяется строже. Раньше проходили значения вида "1a2b3" или "v1.2.3-beta", хотя подсказка к полю требует формат 0.0.0 — теперь принимается только он

  • Устранены зависания панели: страница могла на несколько минут перестать отвечать, причём каждый раз другая

    Если база не отвечает, страница показывает ошибку за десятки секунд, а не висит молча до пяти минут

    Данные мониторинга держатся в памяти за последние сутки — ровно за тот период, который показывают графики

  • Появились полноценные учётные записи. Раньше логины и пароли лежали в конфигурации админ-панели и были общими на всех — теперь у каждого своя запись, пароль хранится в защищённом виде и его не видит никто, включая администратора. Прежние логины перенесены автоматически, пароли у них остались те же — перенастраивать ничего не нужно

    После обновления все открытые сеансы завершатся, потребуется войти заново. Это разовое действие

  • У администратора появился раздел "Пользователи": список всех учётных записей с ролью, состоянием и датой последнего входа, создание новых, изменение, задание пароля и удаление. Завести учётную запись можно только отсюда — самостоятельной регистрации в панели нет

    Учётную запись можно не удалять, а отключить: вход сразу запрещается, а сама запись и её история остаются. Встроенного администратора и собственную учётную запись нельзя отключить или понизить в правах — чтобы панель не осталась без владельца

  • Появились три роли. "Просмотр" — только чтение: списки, карточки устройств и клиентов, аналитика, события; кнопки изменения такому пользователю не показываются. "Управление" — вся работа с релизами, обновлениями, устройствами, клиентами, лицензиями и конфигурациями, а также сканер QR и лог приложения, но без доступа к учётным записям. "Администратор" — то же самое плюс управление пользователями

    Роль меняется на странице учётной записи и начинает действовать сразу: если пользователь в этот момент работает в панели, его сеанс завершится, и при следующем входе права будут уже новые. Так же работают отключение учётной записи и смена пароля

  • В шапке справа вместо кнопки "Выйти" теперь меню с именем и ролью: "Сменить пароль", "Пользователи" (у администратора) и "Выйти". Сменить свой пароль может любой вошедший — при этом остальные сеансы этой учётной записи (другой браузер, телефон) завершаются, а текущий остаётся

    Вход защищён от подбора пароля: после пяти неудачных попыток подряд он блокируется на несколько минут. Снять блокировку раньше может администратор — кнопкой "Разблокировать" в списке пользователей или задав новый пароль

    В потоке событий теперь видно, кто назначил обновление. К записям о смене версии ПО к установке, смене установленной версии и отмене установки в конце дописывается автор — имя сотрудника и его логин. Работает и для точечных действий на странице устройства, и для массовых назначений на всех или на клиента. У автоматических назначений по расписанию и у записей, которые присылает само устройство, автора нет — их делает не человек

    Подтверждение входа техподдержки по QR тоже стало именным: в журнале устройства записывается, кто именно открыл доступ. Раньше там стояла общая учётная запись, и установить это было нельзя. Сам сканер QR доступен ролям "Управление" и "Администратор"

  • Появился раздел "События ПО" — поток событий, которые само ПО устройства отправляет в каналы мониторинга (ошибки, предупреждения, статистика). Раньше их можно было смотреть только в Telegram, теперь они собираются в админ-панели с фильтрами по клиенту, критичности (уведомление / предупреждение / критическое / ошибка), каналу (приложение, внешнее API, архивация кодов, дамп и доступность базы, конфигурации, статистика, очистка временных файлов, планировщик задач, поиск кодов), периоду и тексту события. У событий с приложенными данными есть кнопка "Подробнее" — она открывает то, что раньше приходило в Telegram отдельным файлом: данные события, лог запроса и лог ошибки. Со страницы устройства в раздел ведёт кнопка "Открыть" — поток сразу сужается до этого устройства

    Если устройство было без связи, события копятся на нём и досылаются пачкой — у таких записей рядом с датой события показывается, когда его фактически приняли. События хранятся 30 дней, дальше удаляются автоматически

  • У раздела "События ПО" появилась аналитика (кнопка "Аналитика" на странице потока). За выбранный период показываются: сводка, разбивка по критичности, график событий во времени с разделением по критичности, топ повторяющихся ошибок, топ устройств по числу ошибок, распределение по клиентам и по каналам. Похожие ошибки группируются вместе: номера заказов и прочие числа в тексте не мешают увидеть, что это одна и та же проблема. Отдельным блоком выводятся "волны" — когда одна и та же ошибка за короткий срок повторилась на нескольких устройствах сразу (признак проблемы релиза или внешнего сервиса, а не одного устройства). Из любой строки аналитики можно провалиться в поток событий: период и текст ошибки подставятся в фильтры автоматически

  • Добавлены оповещения на почту при наплыве событий. Письмо уходит в двух случаях: когда за короткий промежуток набирается много ошибок и критических событий, и когда одна и та же ошибка бьёт сразу на нескольких устройствах. В письме — сводка, список чаще всего повторяющихся ошибок и ссылка на раздел в админ-панели. Повторное письмо того же типа не приходит, пока не пройдёт заданное время, чтобы затянувшийся сбой не превратился в поток писем. Список получателей, почтовый сервер и пороги срабатывания задаются в конфигурации админ-панели

    Отправка событий с устройств в админ-панель включается на стороне ПО: уведомления, которые раньше уходили только в Telegram, теперь идут сюда. Если связи с админ-панелью нет, события копятся на устройстве и досылаются позже

    Для каждого канала событий можно выбрать, что с ним делать: хранить целиком, хранить без вложений (текст события остаётся, приложенные данные и логи отбрасываются — именно они занимают основной объём) или не хранить вовсе. Настройка задаётся в конфигурации админ-панели и применяется без перезапуска. В фильтре по каналам такие каналы подписаны, чтобы не искать в них события впустую

  • Добавлен раздел "Лог" — то, что админ-панель пишет в консоль сервера, теперь видно прямо в браузере, без подключения к серверу. Показываются последние 5000 строк: запуск приложения, предупреждения и ошибки со стеком вызовов. Есть фильтр по уровню (все / info / warn / только ошибки), поиск по тексту, пауза, кнопка выгрузки всего лога в файл. Новые строки подтягиваются сами раз в 3 секунды, ошибки подсвечиваются. Раздел виден только администраторам — в логе попадаются внутренние детали. Лог хранится в памяти приложения и очищается при его перезапуске

  • В разделе "Аналитика" проценты выводятся с точностью до сотых. Раньше значения округлялись до целых, и на больших партиях доли процента брака и невалидных кодов были неразличимы — 0,4% и 0,04% одинаково показывались как 0%

  • Запрещена установка релиза старше 30 дней. На странице релиза кнопки "Установить всем" и "Установить клиенту" у такой версии заблокированы с подсказкой, в списке выбора на странице устройства устаревшие релизы не показываются, а при попытке назначить их в обход интерфейса выводится сообщение об ошибке. Правило действует для всех типов релизов, включая тестовые

  • При создании релиза файлы старше 30 дней больше не проходят молча: список устаревших файлов показывается в окне с пояснением, а не только строкой под полем выбора. Проверка продублирована на сервере — релиз не создастся, даже если проверка в браузере не сработала

  • На странице "Релизы" появилась постраничная навигация — по 10 записей на страницу (раньше весь список грузился в браузер целиком). Поиск по версии, фильтр по типу и "Скрыть архивные" учитываются при разбиении на страницы. Пейджер на "Релизах" и "Устройствах" теперь выглядит одинаково и сохраняет выбранные фильтры при переходе

  • Обратный отсчёт на кнопке подтверждения добавлен и в остальные окна подтверждения (назначение релиза клиенту и всем устройствам, изменение установленной версии, перенос устройства к другому клиенту, удаления на страницах клиента, устройства, релиза и конфигураций) — раньше он был только у части действий. Окно подтверждения больше не открывается повторно поверх уже открытого. Дата и время везде выводятся по-русски и в одном формате — раньше в некоторых местах день недели дублировался числом

  • Раздел "Аналитика" дополнен: появился блок "Агрегаты по статусам" с итогами по первому и второму уровню упаковки, брак (отбраковка линией) отделён от невалидных кодов и считается отдельной плиткой, в топе проблемных вместо продуктов — производственные линии с указанием клиента, а выполнение плана считается только по заданиям, где план задан, и больше не занижается заданиями без плана

  • Добавлен раздел "Аналитика" — сводка по производству со всех устройств. Вверху фильтры: клиент, устройство, период (произвольные даты либо быстрый выбор 7 / 30 / 90 дней). Далее плитки за период: заданий, отсканировано, валидных, выполнение плана, невалидных и брака — числом и в процентах. Ниже разбивка невалидных по причинам (несчитанные, не найдено в БД, дубликаты, невалидный GTIN, невалидная длина, тайм-аут валидации, сетевая ошибка, истёкший срок). Два графика — динамика по дням (отсканировано, валидно, невалидно, брак) и топ-10 продуктов по числу проблемных кодов. Внизу таблица заданий за период с постраничной навигацией: устройство, клиент, линия, продукт, номер задания, план, скан, валид, % плана, брак, проблемы, дата начала и статус; из таблицы можно перейти на страницу устройства

  • На странице "Устройства" появилась постраничная навигация. Раньше весь список грузился в браузер целиком, и на большом парке страница открывалась долго. Сводка сбоку (счётчики по типам, онлайн / оффлайн, без релиза, ожидают обновления) считается на сервере по всему отфильтрованному списку, а не только по видимой странице

  • Ускорена работа админ-панели под нагрузкой: сводка на главной, страницы устройств, клиентов и релизов, приём данных от устройств (конфигурации, миграции, информация о производственных линиях, лицензии, выдача релизов) переведены на более экономные запросы к базе, добавлены недостающие индексы, версия сервера БД определяется один раз при старте, а не при каждом запросе

  • Вход и выход перенесены из подвала в шапку — кнопка видна на любой странице и не прячется в сворачиваемое меню на телефоне. Сессия теперь живёт 30 дней и продлевается при работе: установленная как приложение (PWA) админ-панель больше не разлогинивает при каждом закрытии. В разделе "Сканер QR" камера включается сразу, если доступ к ней уже был разрешён — лишний раз нажимать "Включить камеру" не нужно

  • Начат сбор итогов производственных заданий с устройств — они хранятся в админ-панели полгода и стали основой для раздела "Аналитика". Раньше подобные данные были видны только в блоке "Информация о производственных линиях" на странице конкретного устройства и только на текущий момент, без истории и без возможности сравнить устройства между собой

  • На главной странице появилась сводка по парку устройств (видна после входа в систему). Вверху — плитки с ключевыми числами: всего устройств, сколько сейчас онлайн и оффлайн, у скольких были ошибки за последние сутки, сколько ожидают обновления и сколько из них ждут своего окна установки, сколько установок завершились сбоем и у скольких клиентов скоро истекает лицензия. Ниже — распределение устройств по установленным версиям ПО и сводка текущей установки релизов по стадиям. Данные обновляются автоматически раз в минуту и по кнопке «Обновить»; плитки кликабельны и ведут в соответствующие разделы

  • На странице релиза добавлен блок «Установка релиза» — наглядно видно, как идёт выкатка конкретной версии: сколько устройств уже установили релиз из общего числа (с полосой прогресса), сколько сейчас в процессе установки, сколько ожидают начала, у скольких установка завершилась сбоем и сколько отменено. Отдельно подсвечиваются «застрявшие» устройства — те, что дольше 6 часов остаются на одной стадии установки, чтобы такую проблему можно было заметить вовремя, а не искать вручную по каждому устройству

  • Режим планового обновления: при назначении релиза теперь можно указать дату установки — и одному устройству, и при массовом назначении (всем устройствам или по клиенту). До этой даты обновление не устанавливается, а начиная с неё установка пройдёт как обычно — в окно обновления клиента. Поле необязательное: без даты релиз ставится по расписанию, как раньше; при установке вне расписания дата не запрашивается. Назначенная дата видна в статусе устройства ("Ожидает: … установка на 25.07.2026") на страницах устройства, клиента и релиза, а также фиксируется в логе устройства

  • В дереве файлов на странице устройства появились галочки — отмеченные файлы скачиваются одной кнопкой "Скачать выбранные" единым zip-архивом с сохранением структуры папок. Отметка папки выбирает всё вложенное. Раньше файлы приходилось качать по одному — с диалогом сохранения на каждый и ограничением браузера на 6 параллельных загрузок. Файлы, ещё не полученные с устройства, при скачивании пропускаются с подсказкой; один выбранный файл скачивается напрямую, как раньше. Сам блок переименован из "Файлы логов" в "Файлы устройства" — в нём не только логи

  • Все страницы админ-панели теперь используют полную ширину экрана — на широких мониторах в таблицы устройств, клиентов, миграций и потока событий помещается заметно больше данных. Формы создания и редактирования конфигурации сервера тоже растянуты на всю ширину

  • Добавлен вход техподдержки по QR-коду. На странице входа сервера теперь показывается QR-код — вместо копирования ключа доступа его можно отсканировать телефоном и подтвердить вход одним нажатием. Прежний вход по коду сохранён как запасной (кнопка "Вход по коду" на форме входа сервера)

  • Админ-панель теперь можно установить как приложение (PWA) на телефон или компьютер — с иконкой на домашнем экране и запуском в отдельном окне. На мобильном появляется предложение установить приложение (закрывается крестиком и больше не показывается)

  • Добавлен раздел "Сканер QR" со встроенным сканером для подтверждения входа техподдержки прямо из приложения. При обрыве связи вместо ошибки открывается понятная страница "Нет соединения" с кнопкой повтора

  • Админ-панель адаптирована под телефон. Широкие таблицы — устройства, клиенты, релизы, поток событий, конфигурации, а также списки на детальных страницах и страницах назначения релиза — на узком экране показываются карточками, без горизонтальной прокрутки. Пагинация умещается в одну строку; описание релиза, список миграций и файлов раскрываются на всю ширину; на главной блок "Быстрый переход" поднят наверх; у сканера появилось общее меню; футер, подписи полей и раскладка приведены в порядок

  • Добавлена страница "Миграции" — сводка по миграциям БД по всем клиентам. Миграции идут от новых к старым, по каждой видно, сколько клиентов её применили: зелёный бейдж — применили все, жёлтый — не все, рядом перечислены клиенты, у которых миграция ещё не применена. Учитываются снимки миграций головных устройств (самый свежий по времени синхронизации); клиенты, не приславшие снимок, показаны отдельной плашкой и в подсчёте не участвуют. Есть поиск по имени миграции и фильтр по статусу

  • Добавлен раздел "Конфигурации серверов" — справочник рекомендуемых серверных конфигураций (процессор, оперативная память, диск и текстовое описание). Список доступен всем сотрудникам, добавление, редактирование и удаление — администраторам

  • Калькулятор серверных требований по результату расчёта подбирает и показывает подходящую готовую конфигурацию сервера из этого справочника, а сам расчёт можно выгрузить в PDF

  • На странице "Поток событий" добавлены фильтр по клиенту и поиск по тексту события — вместе с уже имевшимися фильтрами по типу и статусу события можно быстро найти нужные записи среди событий всех устройств. Поиск по тексту работает и в блоке "Логи" на странице устройства

  • Устройства в карточке клиента теперь отсортированы по типу — сначала администраторы, затем "оператор и администратор", затем операторы; внутри каждого типа — по имени. Раньше список шёл просто по имени, и админ-устройства терялись среди операторских

  • Настраиваемый график установки обновлений для каждого клиента. На детальной странице клиента можно задать окна времени (начало, конец и дни недели), в том числе переходящие через полночь. Автоматические обновления запускаются только внутри этих окон и только в рабочие дни производственного календаря — праздники и перенесённые выходные исключаются. Время задаётся в часовом поясе клиента, который выбирается на странице редактирования клиента. Если устройство ждёт наступления окна, это видно по его статусу. Без заданных окон действует стандартный график 08:00–17:00 МСК по рабочим дням

  • При назначении релиза галочки "Пропустить устройства с уже установленным этим релизом" и "Проверить миграции у админов клиентов" теперь включены по умолчанию — это самый частый и безопасный сценарий выкатки, раньше их приходилось ставить вручную

  • Страница устройства и связанные с ней данные — конфигурация, файлы логов, миграции, а также обновления в реальном времени — теперь доступны не только администраторам, но и пользователям с ролью "user". Раньше часть этих блоков у обычных пользователей не загружалась

  • Переработана очистка устаревших данных мониторинга, таблица мониторинга оптимизирована — меньше нагрузка на базу данных

  • Исправлено удаление устройств и клиентов

  • Добавлен блок "Быстрый переход" на главной странице — кнопки "Последний релиз" и "Создать новый релиз", выбор клиента и устройства из выпадающих списков с переходом на детальную страницу

  • Добавлен фильтр по версии установленного релиза на странице "Устройства" — операторы больше / меньше / равно / не равно (≥, >, ≤, <, =, ≠)

  • Добавлены понятные страницы ошибок (страница не найдена, нет доступа, сбой сервера и т. п.) — вместо пустой страницы с одной строкой видно описание проблемы и кнопки "На главную" / "Войти" / "Назад"

  • Если сессия истекла во время работы со страницей — кнопки обновления данных (шапка устройства, мониторинг, логи, конфигурация и т. п.) больше не зависают молча, а корректно сообщают, что нужно войти заново

  • Калькулятор серверных требований открыт без авторизации — это публичная утилита, не работает с данными админки

  • Ускорена загрузка страниц "Устройства", "Клиенты", детальных страниц клиента и релиза

  • Ускорена выдача файлов релиза устройствам — контрольные суммы файлов теперь кэшируются, а не пересчитываются при каждом запросе

  • На странице "Создание нового релиза" добавлена подсказка с распознаваемыми именами файлов (backend, frontend оператора, frontend администратора) — имя файла должно содержать одну из подстрок, иначе устройство не определит назначение

  • К релизу можно прикрепить список новых миграций БД (поле "Новые миграции БД в этом релизе" на страницах создания и редактирования релиза). На страницах назначения релиза ("Установить всем" и "Установить клиенту") появилась галочка "Проверить миграции у админов клиентов" — если её включить, перед назначением сверяется, что у админ-устройства каждого клиента эти миграции уже накатаны. Клиентам, у которых всё на месте, релиз отмечается к установке автоматически. Для клиентов с недостающими миграциями откроется страница с предупреждением и решением по каждому клиенту — "Назначить всё равно" или "Пропустить". На этой же странице видно, кому релиз уже назначен автоматически и сколько у каждого устройств

  • На страницах "Установить всем" и "Установить клиенту" появилась галочка "Пропустить устройства с уже установленным этим релизом" — если её включить, устройства, у которых этот же релиз уже стоит как установленный, не переназначаются повторно. Удобно при повторной массовой выкатке, когда часть устройств уже на нужной версии — не нужно вручную исключать их из назначения. Галочка прокидывается через страницу подтверждения миграций — фильтр применяется и к авто-назначенным клиентам, и к выбранным "Назначить всё равно"

  • При назначении релиза конкретному устройству-администратору (или "оператор и администратор") проверка миграций больше не выполняется — раньше админ-устройство сверялось само с собой и при отсутствии новой миграции из релиза релиз блокировался ровно тем, что он должен был принести. Теперь админам релиз назначается без самопроверки, а операторам — после (с галочкой проверки миграций)

  • Защита от случайных удалений: удаление клиента, юр. лица, устройства, релиза, очистка данных и кэша мониторинга, отмена установки релиза и выход из системы теперь требуют отправки формы с подтверждением. Случайный переход по ссылке, превью в мессенджере или предзагрузка браузером запустить операцию больше не могут. Окно подтверждения выглядит как раньше

  • Ошибки при сохранении (например, не указана дата окончания лицензии или выбран тот же клиент при переносе устройства) больше не открывают пустую страницу с одной строкой текста — сообщение появляется на той же странице в виде красной плашки сверху, форму можно сразу поправить и отправить заново

  • Общий редизайн страниц админки. На страницах создания и редактирования (релиза, клиента, лицензии), назначения и отмены установки релиза, настроек устройства, переноса устройства к клиенту форма больше не сидит одинокой узкой колонкой по центру с пустым правым краем — она расположена рядом со сводкой / справкой. На детальных страницах релиза, клиента и устройства информация о сущности и кнопки действий разнесены по двум колонкам, кнопки сгруппированы в карточку с понятными заголовками ("Назначение релиза", "Управление релизом", "Опасная зона" и т. п.). На страницах списков "Релизы", "Клиенты", "Устройства" появился сайдбар со сводкой — счётчики по типам, статусам лицензии, онлайн / оффлайн и т. п.

  • На странице "Релизы" — поиск по версии и фильтр по типу с мгновенной фильтрацией без перезагрузки страницы. Чекбокс "Скрыть архивные" включён по умолчанию, чтобы рабочий список не разбавляли старые архивные релизы. Длинные описания релизов в списке автоматически сворачиваются после ~5 строк, разворачиваются по кнопке "Показать целиком". Тестовые / development-релизы дополнительно помечены жёлтым баром слева — хорошо виден и в светлой, и в тёмной теме

  • На странице "Клиенты" — поиск по имени клиента и фильтр по статусу лицензии

  • Окна подтверждения на странице устройства теперь показывают конкретные данные: вместо "назначить выбранную версию" — "Назначить версию «1.2.3» устройству «My Device»". То же при изменении установленной версии и отмене запланированной установки. Кнопка "Сохранить" на формах назначения переименована в "Назначить релиз" / "Изменить версию" / "Назначить всем устройствам" / "Назначить клиенту" — чтобы понимать, что произойдёт после нажатия

  • На странице "Устройство → Установить новую версию ПО" появилась галочка "Проверить миграции у админ-устройства клиента" — по аналогии с галочкой на массовом назначении релиза. Если у админа клиента не хватает миграций из релиза, перед назначением открывается страница со списком недостающих миграций и кнопкой "Назначить всё равно" (либо "Отмена" — назад на страницу устройства)

  • На странице "Поток событий" пагинация теперь и сверху, и снизу таблицы — не нужно листать вниз, чтобы перейти на следующую страницу. Над таблицей показывается счётчик "Страница X из Y, всего N". Кнопка "Сбросить" появляется только когда выбран хотя бы один фильтр

  • Календарь автоматических обновлений переработан: на больших экранах четыре месяца в ряд вместо трёх, сегодняшний день и выходные выделены аккуратнее — без громоздких бейджей. Легенда вынесена в шапку календаря рядом с заголовком

  • Главная страница: сверху появилась карточка с кратким описанием панели. Неавторизованным пользователям больше не показываются ссылки на разделы под авторизацией ("Клиенты", "Релизы", "Устройства", "Поток событий") — раньше клик уводил на страницу с ошибкой "Требуется авторизация". В шапке подсвечивается раздел, в котором сейчас находитесь. Дата и время сервера выведены компактнее (с подсказкой при наведении). В подвале строка с состоянием автообновлений, копирайтом и навигацией собрана в одну строку (раньше занимала две)

  • Страница авторизации и калькулятор серверных требований переоформлены в стиле остальной админки. В калькуляторе форма и описание "что считает калькулятор" показаны рядом, результат — две крупные плитки "Размер БД" и "Операций в секунду". Страница "Политика конфиденциальности" заполнена реальным содержанием — раньше там был пустой стаб с английским текстом

  • Добавлена возможность отменить установку релиза у конкретного клиента — кнопка "Отменить установку у клиента" на странице "Релиз" с выбором клиента из списка тех, у кого запланирована установка

  • Добавлено редактирование описания релиза — кнопка "Редактировать релиз" на детальной странице "Релиз"

  • Добавлены окна подтверждения на критические действия: отмена установки релиза у всех / у клиента / на устройстве, назначение релиза клиенту, перенос устройства к другому клиенту

  • Увеличено количество строк до 50 на страницу в блоке "Логи" на странице "Устройство" и на странице "Поток событий"

  • Кнопка "Обновить" в шапке страницы "Устройство" теперь обновляет только шапку, не перезагружая всю страницу

  • Переработан блок "Конфигурация" на странице "Устройство": конфигурация устройства разбита на тематические карточки — Общее, Каналы, Параметры мониторинга, мониторинг внешних апи и ошибок, архивирование (с отдельным блоком сжатия), дамп БД, поиск кодов маркировки, 1С (по интеграциям), CSB, миграция БД, перезапуск, пинг, Modbus, режим приложения, параметры разработки (с переводом на русский и разделением на две колонки), очистка временных файлов, задачи планировщика — все с человеческими лейблами

  • Конфигурация устройства больше не передаётся в составе обычной синхронизации — она приходит отдельным сообщением, однократно при подключении устройства к админке (по аналогии с миграциями). Это разгружает регулярный обмен данными

  • Добавлена кнопка "Обновить" в блоке "Конфигурация" на странице "Устройство" — принудительная синхронизация без перезагрузки страницы; после обновления спойлер "Подробности" автоматически разворачивается

  • Добавлено визуальное уведомление на кнопках "Обновить" в блоках "Конфигурация", "Миграции БД" и "Файлы логов" при недоступности устройства (вместо тихой ошибки в консоли)

  • Конфигурация устройства корректно отображается независимо от регистра ключей в JSON — раньше при разном регистре часть полей могла не считаться

  • Кнопка "Обновить" в блоке "Информация о производственных линиях" на странице "Устройство" теперь запрашивает свежие данные у самого устройства, а не просто перерисовывает блок по уже имеющимся в админке данным

  • Добавлена авто-отправка информации о производственных линиях с устройства раз в 10 минут — блок "Информация о производственных линиях" на открытой странице "Устройство" обновляется без перезагрузки страницы

  • В блок "Информация о производственных линиях" добавлены недостающие счётчики статистики: с истёкшим временем валидации, сетевые ошибки при проверке в БД, с истёкшим сроком годности

  • Информация о производственных линиях теперь хранится компактнее — в шапке блока появилась дата последней синхронизации

  • Переработаны блок "Логи" на странице "Устройство" и страница "Поток событий": фильтры и пагинация без перезагрузки страницы, единый источник данных на бэке

  • Ускорена выборка логов: добавлены индексы по дате создания и составной (устройство, дата)

  • Добавлен блок "Миграции БД" на странице "Устройство" со списком миграций, статусом применения, счётчиками применённых/ожидающих и кнопкой принудительного обновления

  • Обновлён блок "Мониторинг" на странице "Устройство": вкладки вместо карусели, обновление графиков без перезагрузки страницы

  • Обновлён блок "Информация о производственных линиях" на странице "Устройство": вкладки со стрелочной навигацией вместо карусели, добавлена кнопка "Обновить" — обновление данных без перезагрузки страницы

  • Исправлен выбор диапазона дат в блоке "Мониторинг"

  • Ускорена работа графиков мониторинга и очистка устаревших данных

  • Добавлена кнопка "Удалить" в блоке "Файлы логов" на странице "Устройство" — удаляет локальную копию файла на сервере, на устройстве файл сохраняется

  • Добавлен приём конфигурации устройства из синхронизации (запуск, приложение, БД с маскировкой кредов, CSB, очистка временных файлов, планировщик задач, модули, master-slave, мульти-линии)

  • Добавлен блок "Конфигурация" на странице "Устройство" с датой последней синхронизации и сырым JSON

  • Добавлен калькулятор производства

  • Изменена сортировка на странице "Клиенты", по имени

  • Изменена сортировка юридических лиц на странице "Клиент", по названию

  • Изменена сортировка устройств на странице "Клиент", по названию

  • Изменена сортировка клиентов при назначении установки релиза на странице "Релиз", по имени

  • Добавлена возможность получить ключи доступа на странице "Устройство" в списке событий для в входа в административную панель технической поддержки устройства

  • Добавлена фильтрация на страницу "Поток событий"

  • Добавлена навигация и фильтрация на страницу "Устройство"

  • Реализовано автоматическое указание типа релиза "Тестовый", если любой из установочных файлов содержит текст "develop".

  • Добавлено удаление данных мониторинга устройств старше трех месяцев

  • Добавлено удаление данных релизов старше одного года

  • Добавлена индикация статуса релиза "Архивирован" и "Тип релиза" на странице списка релизов и на детальной странице релиза

  • Добавлена блокировка установки релиза если он архивирован

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

  • Добавлен тип релиза "Продуктовый" и "Тестовый"

  • Добавлена индикация для типа релиза "Тестовый" на странице списка релизов

  • Добавлена возможность установить обновление на все устройства одного клиента

  • Добавлен мониторинг ресурсов на страницу "Устройства"

  • Добавлена информация о статусе производственных линий на страницу "Устройства" и в раздел "Устройства" детальной страницы "Клиента"

  • Перенос контроля расписания автоматической установки обновлений на сторону административной панели

  • Перенос лицензирования на сторону административной панели

  • Добавлен вывод информации об активности автоматической установки обновлений на текущий момент

  • Добавлен календарь установки обновлений в автоматическом режиме

    Добавлен учет выходных и праздничных дней при проверки возможности запуска автоматической установки обновлений

  • Добавлена возможность запускать установку обновлений в автоматическом режиме вне расписания

  • Добавлена возможность запускать установку обновления на всех устройствах и отменять установку обновления на всех устройствах

  • Добавлена информация о производственных линиях на страницу "Устройство"

  • Добавлена возможность удаления "Устройства" и "Клиента"

  • Добавлена возможность изменения установленной версии ПО "Устройства"

  • Добавлена сортировка по дате последней активности на странице "Устройства" и детальной странице "Клиента"

  • Обновлена регистрация устройств, добавлено обновление информации устройства

  • Установлен русский язык даты для приложения по умолчанию

  • Добавлена в шапку дата и время сервера на момент обработки запроса

  • Для перевода в локальное время для приложения установлен часовой пояс +4 по умолчанию

  • Изменено отображение даты и времени последнего запуска и последней активности устройства

    Теперь отображается сколько времени прошло с момента даты и времени с подсказкой в которой отображаются точные дата и время

  • Изменено отображение данных релиза устройства

  • Изменены размеры колонок таблиц

  • Добавлен вывод переносов строк в описании релиза и сообщении лога

  • Еще больше улучшений дизайна (отступы, тени), для большей читаемости интерфейса

  • Добавлены значки для: "Статус активности", "Статус релиза", "Статус установки релиза", "Статус лога"

  • Перевод времени в локальное

  • Обновление дизайна

  • Обновлена авторизация

  • Добавлен раздел "Устройства"

  • Добавлен раздел "Поток"

  • Упрощены таблицы

  • Релиз приложения

  • Добавлен раздел "Клиенты"

  • Добавлен раздел "Релизы"