Меня зовут Владимир Власов, я — Senior Testing Engineer в Мобильной команде «Лаборатории Касперского». И под катом я расскажу, как мы создали решение, благодаря которому все устройства для тестирования в нашем офисе теперь учтены, а их поиск стал в разы быстрее и проще.
Человеческий фактор
Проблема с поиском устройств — отчасти проблема роста. Ее не возникало, когда в Мобильном штабе было относительно мало сотрудников и устройств. Однако мы росли, девайсов в нашем шкафу и ребят в командах становилось все больше. Потом наши устройства начали уходить в другие подразделения на разные задачи и ездить на выставки для демонстрации наших продуктов.
Сейчас сотрудников в Мобильном штабе полторы сотни. Устройств — больше тысячи.
До недавнего времени информация обо всех наших устройствах просто хранилась в системе TFS — Team Foundation Server. Каждый девайс там зарегистрирован как отдельный Task, а у каждой таски есть специальное поле Assigned to: в данном случае это примерно значит «Текущий владелец».
В теории любой сотрудник, когда берет устройство, должен вносить свое имя в это поле. И тогда все в компании всегда будут знать, у кого на руках каждое конкретное устройство в данный момент.
А на практике? Совершенно верно, в массе случаев сотрудники забывают актуализировать информацию об устройствах, которыми пользуются. Делают они это, конечно, не со зла; скорее, просто не ожидают, что завтра этот же девайс может понадобиться коллеге.
Но отсутствие злых намерений не скрашивает ситуацию. Когда в такой ситуации сотрудников и устройств много, цепочки владения рвутся напрочь. Найти нужный смартфон становится непосильно. А порой даже невозможно.
И вот, когда мы в команде поняли, что вообще не можем найти некоторые из наших устройств, то решили разобраться с проблемой учета, сведя к минимуму человеческий фактор. Но мы хотели не только помочь коллегам, которые не могли найти нужные девайсы. Была еще одна личная и потому не менее важная причина: мне хотелось выстроить классный работающий процесс для нескольких десятков человек.
Варианты решения
Предложений, как улучшить учет, чтобы устройства больше никогда не пропадали, было несколько. На этом этапе мы активно обсуждали все новые идеи и нестандартные решения.
Самая простая и логичная на первый взгляд идея — выделить сотрудников, которые будут выдавать устройства и переписывать их на коллег. Вроде бы разумно, но сразу возникает проблема: в те дни, когда никого из этих выделенных людей не будет в офисе, получить девайс будет просто невозможно.
Был и куда более радикальный вариант. Сотрудники не чувствуют материальную ответственность за девайсы? Так давайте ее закреплять за каждым сотрудником, который берет устройство! Идея хорошая, но жесткая. А кроме того, нужно проводить много формальных операций с документами, чтобы реально оформить ответственность.
Когда сотрудников и устройств в компании мало, это не проблема. А когда итераций передачи устройств так много, как у нас в команде, эта система критически замедляет работу. А еще замедляется сама, потому что нужно постоянно обрабатывать тонны бумаг.
Но мы нашли способ не просто свести человеческий фактор к минимуму, а полностью его нивелировать. И в основу нашего метода лег простой закрытый серверный шкаф.
Что в шкафу?
Этот шкаф стоит у нас прямо в одном из корпусов офиса. Он подключен к электричеству и LAN, а закрыт на электронный замок.
В шкафу могут одновременно находиться до 250 мобильных устройств, а открыть его можно обычным штатным пропуском сотрудника «Лаборатории Касперского».
Далее — в шкафу три полки. На двух из них стоят короба для телефонов. На каждое устройство в коробах наклеена своя уникальная RFID-метка. Над коробами — RFID-антенны с круговой поляризацией. Они соединяются с RFID-контроллером фирмы Impinj.
Он, в свою очередь, соединен с системным блоком, который подключен к внутренней сети «Лаборатории Касперского» и управляет контроллером. Системный блок и контроллер располагаются на третьей полке, под коробами с устройствами. Последний физический элемент системы — геркон, который отправляет в систему информацию о том, что дверь шкафа закрыли.
Таким образом, когда кто-то из ребят берет девайс из шкафа, система автоматически записывает этот девайс на нужного владельца. А когда устройство возвращается в шкаф, система и это быстро отмечает.
Конечно, идея с RFID была не «коробочной» — все компоненты подбирали индивидуально под задачу, а в некоторых случаях еще и ПЕРЕподбирали — например, когда в 2022 году с наличием некоторых компонентов на российском рынке возникли трудности и пришлось искать аналоги.
А еще неожиданной проблемой стал выбор RFID-меток для самих девайсов. Изначально хотели использовать обычные метки, буквально как в магазинах одежды. Но они не подошли, потому что в мобильных устройствах слишком много металла. Поэтому мы экспериментировали с особыми металлизированными метками и параллельно подбирали подходящий для разноформатных девайсов размер метки.
Но все же именно использование RFID, в отличие от других способов, не требует огромного количества USB и сопутствующих кабелей, свитчей и другого сетевого оборудования.
Как это работает
- Сотрудник открывает шкаф своим пропуском.
- Информация о сотруднике и времени открытия уходит в базу системы безопасности Kaspersky.
- Сотрудник берет нужное устройство и закрывает шкаф.
- Геркон передает системному блоку, что шкаф закрыт.
- Системный блок выполняет скрипт на Java, который взаимодействует с контроллером RFID-антенн.
- RFID-антенны несколько раз с определенным промежутком времени считывают метки устройств в шкафу.
- Каждый раз JAVA-скрипт формирует XLS-файл с номерами полученных меток.
- Скрипт миксует эти данные и формирует окончательный XLS-файл.
- База безопасности «Лаборатории Касперского» раз в сутки выгружает данные по открытиям двери шкафа на почтовый ящик.
- Также раз в сутки запускается второй скрипт, написанный на Python.
- Этот скрипт забирает данные об открытиях из письма.
- Затем данные сравниваются с таблицей XLS JAVA-скрипта, устанавливаются связи — кто в какое время открыл шкаф и взял/вернул конкретный девайс.
- На системном блоке работает сервисная учетная запись TSF, которая назначает возвращенные за сутки устройства на шкаф, а взятые — на конкретного сотрудника.
Скрипты под эту задачу полностью с нуля написали наши разработчики. Из-за специфичности задачи готовых решений не было.
Часть основного кода
Мы старались максимально упростить систему, не перегружать ее лишними решениями, чтобы каждый разработчик мог легко вникнуть и, если будет нужно, поправить скрипт. Опять же, система ориентирована на то, чтобы даже новички могли предложить какой-то оптимизационный хук, если увидят хорошую возможность его реализовать.
Место перезаписи устройства на другого пользователя
Выбор языков тоже обусловлен конкретной задачей и стремлением к простоте. Java — родной язык общения с RFID-контроллером, поэтому скрипт, который отвечает за команды, написан на Java.
А Python мы используем потому, что он прост и понятен всем, даже совсем начинающим инженерам по тестированию. Он как раз отвечает за обработку данных с контроллера и связь системы с внешним миром.
Никаких дополнений в саму систему TFS вносить не требовалось. Просто создали новую сервисную учетную запись, которая и вносит в TFS все изменения.
Может показаться, что система очень простая и ее можно было быстро создать даже руками одного человека. И на старте проекта нас реально было только два человека из тестирования. Но потом нам потребовались дополнительные силы и компетенции. В итоге к «волшебному шкафу» приложили руку два тестировщика, трое людей из команды разработки, служба IT, служба ИБ и специалисты из отдела хозяйственного управления.
Пилот, настоящее и будущее проекта
Сейчас наш шкаф в стадии пилота: к системе допущено четыре человека, в том числе я. Все мы так или иначе участвовали в ее создании. Поэтому нам проще отслеживать проблемы и быстро вносить правки.
Чаще всего мы сталкиваемся с проблемами в настройке контроллера. Например, антенны определяют не все устройства, находящиеся в шкафу. Чтобы это исправить, регулируем мощность сигнала, частоту опроса меток и расположение антенн внутри шкафа.
Основную логику сканирования мы реализовали. Теперь ключевое слово для нас — «чаще». Мы хотим чаще сканировать девайсы в шкафу, чаще отправлять данные об устройствах в TFS, чаще забирать информацию о сотрудниках, которые открывали шкаф. В общем, делаем все, чтобы информация о девайсах была максимально актуальной.
Пилотный проект запустили с двумя полками устройств по 52 штуки на каждой. В этом году планируем полностью запустить четыре полки устройств. И так как количество девайсов постоянно увеличивается, в планах установить второй шкаф.
Заключение
Проблема с поиском устройств — отчасти проблема роста. А значит, когда мы ее решаем, мы развиваемся и растем. Мне участие в этом проекте дало именно ощущение буста: незабываемый опыт в создании чего-то нового, что раньше ни я, ни другие члены команды не делали. Опыт работы со сложными системами и аппаратно-программными комплексами. А также возможность отладить механизмы, которые помогают работать всей нашей Мобильной команде.
Если вам было интересно, приходите к нам в Kaspersky на позицию Mobile SDET. Будем вместе тестировать все ключевые продукты команд Мобильного департамента, а также настраивать и поддерживать тестовое окружение.
И конечно, пишите в комментариях, если вам тоже знакомы проблемы учета девайсов, и делитесь историями, как вы их решали. Также буду рад вашим комментариям о том, что еще может сделать наш «волшебный шкаф» лучше.
Комментарии (8)
fizikdaos
18.07.2023 11:00Предлагаю механизм проще и дешевле: на каждом телефоне штрихкод (можно и нфс если хочется), у каждого сотрудника свой штрихкод/метка. Хочешь взять из шкафа? Сканируешь свою метку, шкаф открывается, берешь нужное, сканируешь и шкаф закрывается. Нужно вернуть? Сканируешь метку устройства, шкаф открывается, кладешь, закрываешь своей меткой. И как в холодильнике, пока открыт - горит лампочка и пищит если долго не закрыли. Т. е. смысл - не дать забыть отсканировать пару меток. Защиты от злого умысла конечно нет, но ее и не было. Данные можно даже не обрабатывать - сразу получается колонки кто-что. Система легко масштабируется - в итоге как в супермаркете будет, с точкой оплаты заказа.
rever50
18.07.2023 11:00По-моему это троллейбус из буханки. Достаточно фиксировать момент пересечения меткой антенны, как собственно это и делается в магазинах. Антенна устанавливается по периметру шкафа. Это уровень курсовой студента 2-го курса и esp32. А тут 10 человек включая парочку сеньоров.
fizikdaos
18.07.2023 11:00Ооо, еще проще придумал - устройства в ячейках, ячейки подписаны номерами устройств. Рядом карточки с фамилиями сотрудников. Берешь нужный, кладешь в ячейку свою карту. Возвращаешь - вынимаешь свою карту, кладешь устройство. Просто пользоваться, забыть невозможно, саботажники легко вычисляются по оставшимся карточкам.
Но есть минус - тут вообще ноль сеньоров задействуется, максимум джун принтер заправить для печати карточек.
cema93
Возможно я что-то неправильно понял из описанного текста, но как себя поведет система в следующей ситуации?
Я и коллега вместе поодошли к шкафу попивая чаёк и ведя милые беседы.
Коллега приложил бейдж, открыл шкаф, взял телефон А, закрыл шкаф.
Как только шкаф был закрыт я приложил бэйдж, открыл шкаф, взял телефон B, закрыл шкаф.
Если я правильно понял, то оба телефона могут быть записаны на моего коллегу т.к. в промежутке между закрытием и открытием двери небыло првоерки какие устройства в шкафу, а какие нет.
В данной ситуации выглядит более простым повесить считыватель меток на дверь, повесить какой-то индикатор типо лампочки и написать инструкцию "взял телефон, приложи к метке на двери, дождись зеленой лампочки."
А ваш скрипт можно использовать чтобы контролировать не прихватил ли коллега что-то лишнее с собой.
Direvius
можно не открывать шкаф, пока не произойдет учет устройств
Vlasovvl Автор
Описанная ситуация с парой человек случается, крайне редко. Что бы не было коллизий предусмотрен запрет на повторное открытие замка в 30 секунд. Этого достаточно, что бы провести сканирование. Но повторюсь, такая ситуация крайне маловероятна.
С собой что то лишнее не получится прихватить если все устройства в шкафу имеют метку. Ну можно, в теории, её оторвать. Но это уже "вандализм" :-)