Привет, Хабр! Меня зовут Лиля, я программист в группе разработки инструментов тестирования ЮMoney. Расскажу, как мы создавали и развивали шкаф с мобильными девайсами.
Сегодня у нас около 100 мобильных устройств, и каждый день ими пользуются сотрудники, чтобы тестировать и отлаживать наши приложения. Кто-то берёт девайсы на день, кому-то нужно больше времени. При этом нам необходимо как-то понимать, где в текущий момент времени находится каждое устройство.
До 2016-го года, когда устройств было мало, мы использовали тумбочку и тетрадь, в которой фиксировали, кто какой девайс взял. Но отдел мобильной разработки рос, количество устройств — тоже, к тому же их иногда теряли. Стало понятно, что нам надо как-то модернизировать процесс работы с девайсами.
Так в конце 2016 года мы сделали первую версию шкафа с мобильными устройствами.
Шкаф 1.0
Это был открытый шкаф, в котором лежало около 70 устройств. Шкаф был постоянно подключен к источнику питания, а ещё к нему прикрепили планшет с приложением на C#, которое отвечало за автоматизацию учёта девайсов.
Чтобы идентифицировать сотрудника, который берёт девайс, мы прикрепили к шкафу считыватель пропусков. А для учёта устройств приклеили на их задние крышки QR-коды, в которые были зашиты идентификационные номера из нашей базы. Сотрудник показывал QR-код нужного устройства в камеру планшета и брал его для работы. В общем, система позволяла легко фиксировать, кто и какой девайс взял. Это было намного удобнее, чем вести записи самостоятельно.
Почитать подробнее о первой версии шкафа можно в этой статье.
Тогда нам казалось: вот он, шкаф нашей мечты! И всё было хорошо до 2019 года. Но в один не самый прекрасный день наш планшет вздулся, и мы потеряли актуальную базу с устройствами, историю работы с ними и последнюю версию приложения.
Было два пути: восстановить работу с этим шкафом или разработать новый подход.
На тот момент у мобильной разработки не было ресурсов на восстановление шкафа, поэтому вся активность по проекту перешла на отдел тестирования. При этом у тестировщиков отсутствовала экспертиза, чтобы восстанавливать и поддерживать приложение на C#. А ещё в старом шкафу уже не было места для новых гаджетов. Так мы решили закупить новый шкаф и разработать новый подход к автоматизации учёта девайсов.
Шкаф 2.0
В начале 2020-го мы купили новый шкаф с металлическим корпусом и стеклянной дверью, разработали новую схему работы. Вот как она выглядела:
-
В центре системы мы установили одноплатный мини-компьютер Raspberry Pi.
-
Шкаф закрывался на электронный замок. На Raspberry Pi был написан скрипт, который мог открывать этот замок.
-
Сервер, на котором крутилось приложение шкафа (приложение умело отправлять команду на Raspberry Pi для открытия замка).
-
Также к Raspberry Pi были присоединены USB-хабы, к которым мы подключили мобильные устройства и два 3G-модема.
-
На Raspberry Pi был написан скрипт, который проксировал SMS с этих модемов в наше приложение шкафа. У нас есть боевые тестовые аккаунты, привязанные к номерам телефонов, SIM-карты от которых находятся в этих модемах.
-
Свитчер для создания подсети Raspberry Pi.
Шкаф 2.0 выглядел вот так:
Девайсы переехали в этот шкаф физически, но их учёт мы продолжали вести вручную. Из-за пандемии и ограничений на посещение офиса нам не удалось сразу восстановить приложение для автоматизации этого процесса.
Шкаф 2.1
В начале 2021 года началась работа по восстановлению автоматизации шкафа, а осенью мы запустили новую версию приложения, написанного на стеке Kotlin, MongoDB и Vue.js.
Это приложение решило две основные задачи автоматизации работы с устройствами: идентификацию сотрудника, который хочет открыть шкаф, и идентификацию устройства, которое хочет взять/сдать сотрудник.
Идентификация сотрудника, взаимодействующего со шкафом
Мы хотели обратиться к опыту предыдущего приложения и использовать наши пропуски. Но столкнулись с проблемой: в связи с инфраструктурными изменениями у нас не стало внутреннего API, куда можно было бы отправить ID пропуска и получить информацию о сотруднике ЮMoney. Мы отказались от этой идеи и придумали новый подход: развернули на нашем внутреннем сервере Telegram-бота, который мог обращаться к нашему внутреннему API и получать информацию о сотрудниках по Telegram-логину. Перед шкафом мы установили планшет, в котором была открыта страница браузера с QR-кодом — ссылкой на наш Telegram-бот. Таким образом мы смогли разграничивать права доступа для открытия шкафа по департаментам и выдавать доступы к шкафу лично.
Так мы научились понимать, какой сотрудник открывает шкаф. Оставалось решить, как идентифицировать девайс, с которым сотрудник будет взаимодействовать.
Мы хотели проверять состояние USB-хабов с помощью Raspberry Pi. План был такой:
-
запомнить, кто открыл шкаф;
-
считать, какие устройства были в нём на момент открытия;
-
когда шкаф закрыли, ещё раз считать, какие девайсы остались внутри;
-
по разнице состояний хабов понять, сдал/взял ли сотрудник какое-либо устройство.
Столкнулись с проблемой: хабы нестабильно отдавали своё состояние. Пришлось отказаться от этого подхода.
Так мы вернулись к идее с использованием QR-кодов. Мы наклеили каждому девайсу из шкафа на заднюю крышку его QR-код и теперь при открытии шкафа на планшете открывается страничка с включённой камерой. Сотрудник берёт девайс, который хочет взять или сдать, и сканирует его QR-код в камеру планшета. Таким образом мы фиксируем в нашем приложении, что сотрудник взял девайс/вернул его в шкаф.
Веб-интерфейс шкафа для учёта мобильных девайсов
Мы разработали веб интерфейс шкафа, где можно:
-
посмотреть, какие устройства есть в шкафу в табличном виде, фильтровать, сортировать эти данные;
-
посмотреть историю: кто когда брал/сдавал девайсы и открывал шкаф;
-
добавить новое устройство;
-
отредактировать некоторые поля устройств (версию ОС, номер телефона);
-
поменять держателя устройства — эту функцию разработали для случаев, когда сотрудники встречались вне офиса. Сейчас используем её для передачи устройств коллегам в других городах: сотрудник создаёт запрос, и через курьера девайс отправляется в другой город, а в веб-интерфейсе мы привязываем устройство к новому владельцу.
Так мы восстановили автоматизацию учёта устройств. Однако мы понимали, что шкаф продолжал нуждаться в технических доработках. Весной 2024 года мы собрали у сотрудников ЮMoney обратную связь по использованию шкафа, проанализировали её, сформировали список задач и приступили к реализации.
Шкаф 2.2
Раньше, когда сотрудник подходил к шкафу и открывал его, чтобы взять устройство или положить обратно, было непонятно, когда тянуть дверцу: замок срабатывал слишком тихо. Мы хотели сопроводить открытие шкафа звуковым эффектом, как в вендинговых аппаратах. Но наш шкаф находится в опенспейсе, и такой звук мешал бы сотрудникам.
Поэтому мы попробовали сопроводить открытие шкафа визуальным эффектом. Для этого подсоединили к Raspberry Pi светодиодную ленту, которая светится фиолетовым цветом, когда шкаф закрыт, и зелёным, если он открыт.
Было много технических доработок
-
Изначально логика работы шкафа была реализована в одном большом монолитном проекте, который не только определял порядок взаимодействия с девайсами, но и позволял запустить автотесты для iOS, проанализировать их результаты, отправить мобильные автотесты в блокировку, настроить конфигурацию запуска Android-автотестов. Всё это затрудняло работу со шкафом. И мы выделили его логику из монолитного проекта в отдельный, развернули его в Kubernetes.
-
Было не очень удобно вносить изменения в скрипты на Raspberry Pi: приходилось вручную доставлять эти изменения на Raspberry Pi, перезапускать скрипты. Мы унесли эти скрипты в систему контроля версий и настроили автоматическое развёртывание.
-
Добавили мониторинг состояния проекта «Шкаф», а также мониторинг доступности Raspberry Pi.
-
Настроили бекапирование базы данных.
Сделали UX-улучшения
-
Теперь, когда кто-то берёт или сдаёт девайс, бот пишет в личные сообщения этому сотруднику и в Telegram-чат мониторинга, какие это устройства.
-
Когда какой-то сотрудник увольняется и у него на руках остались устройства, бот в Telegram также присылает мониторингу уведомление, что их нужно вернуть.
Доработали веб-интерфейс
-
Добавили много новых полей для девайсов, и они перестали помещаться в окно браузера. Поэтому пришлось сделать кастомизацию вывода этих полей.
-
Новое поле «Комментарии» оказалось очень удобным, особенно для iOS-устройств, где предустановлены приложения, которые сейчас не так просто скачать.
-
Также мы научились отправлять девайсы в ремонт или списывать их с помощью веб-интерфейса. Раньше списанные девайсы приходилось вручную удалять из базы данных, а теперь можно просто изменить их статус. При этом история по девайсу остаётся.
-
Ещё мы добавили вкладки с устройствами в ремонте и в архиве.
Планы на будущее
У нас есть бэклог задач, которые мы хотим реализовать в ближайшем будущем:
-
Сделать так, чтобы в шкафу всегда были заряженные устройства. Сейчас девайсы лежат без питания, потому что однажды мы столкнулись со вздутием устройств во время зарядки. Чтобы девайсы быстро не разряжались, сотрудники выключают их перед возвращением в шкаф. Но иногда бывает, что ты берёшь девайс, а он полностью разряжен. Мы хотели подключить USB-хабы к умным розеткам и настроить питание по расписанию. Но наши хабы не включаются сами после отключения от питания, сотруднику необходимо подойти к шкафу и нажать на кнопку включения на самом хабе. Пока от этого решения отказались.
-
Автоматизировать управление доступом к шкафу через внутренний менеджер доступов. Сейчас мы храним в базе данных информацию о том, у каких департаментов или каких конкретных сотрудников есть доступ к шкафу.
-
Показывать в окне с информацией о девайсе последнее совершённое с ним действие.
-
Обогатить историю девайсов, фиксировать, кто и что с ними делал.
-
Напоминать сотруднику, что у него на руках девайс — раз в неделю или реже.
Мы регулярно собираем от сотрудников ЮMoney обратную связь о том, удобно ли им работать со шкафом, поэтому у нас всегда много задач, связанных с улучшениями этой системы. Считаю, мы уверенно идём к шкафу своей мечты. 💜
Пишите в комментариях, есть ли в вашем офисе подобный шкаф с устройствами? Как вы его развиваете и что бы посоветовали нам?
Если хотите следить, как наш шкаф обновляется и трансформируется, подписывайтесь на наш блог. 😉
ссылка на оригинал статьи https://habr.com/ru/articles/861580/
Добавить комментарий