Евгений Сайты › Peppers Сбер ID
Сайты, SEO и GEO, реклама, чат-боты, ИИ и дизайн | Москва
Рейтинг
9 371
№ 111 в каталоге
Отзывы
Профессионализм
9/10
Коммуникация
9 /10
Город
Москва
Опыт работы
11 лет
На сайте с
2016 года
Юридический статус
Самозанятый
Freelance.Boutique
Премиум-сервис для лучших исполнителей

Поддержка старых систем курьерской службы: ColdFusion на Lucee, ночные скрипты на Perl, быстрые SQL-отчёты и новый API с обменом в JSON

Используемые навыки API ColdFusion JSON Perl SQL

Описание

Поддержка внутренней системы курьерской службы для юрлиц: кабинет клиентов и рабочее место диспетчеров на ColdFusion, ночные скрипты на Perl, быстрые отчёты и новый API, через который клиенты создают отправления из своих программ. Систему ведёт Евгений Росляков. Сайты и веб-системы он делает с 2016 года, живёт в Москве и работает удалённо с компаниями из любых городов. Он самозанятый, заключает договор перед началом работ и передаёт юрлицам закрывающие документы.

Служба возит документы и небольшие грузы по Москве и в регионы. Клиенты у неё — компании.

Система работает с 2005 года. Диспетчеры и клиенты сидят в веб-интерфейсе на ColdFusion. По ночам запускаются скрипты на Perl: импортируют реестры отправлений от клиентов, считают тарифы, строят отчёты. Всё лежит в одной SQL-базе.

За двадцать лет накопилось вот что. Сервер Adobe ColdFusion давно без обновлений, а купить новую лицензию в России нельзя. В старых формах нашлись места, где запрос к базе собирается склейкой строк, то есть открыт для SQL-инъекций. Отчёты строились долго. Скрипты на Perl никто не проверял, и когда они падали ночью, об этом узнавали утром от диспетчеров.

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

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

Решение

Сначала аудит: что где лежит, какие версии, какие скрипты и когда запускаются, какие запросы тяжёлые. Я составил список рисков и порядок работ, чтобы заказчик видел, что делается первым и почему.

С ColdFusion от Adobe всё просто: новую лицензию не продадут. Но код на CFML работает и на открытом движке Lucee. Язык тот же, поэтому систему переписывать не пришлось. Правки понадобились только в несовместимых местах: несколько устаревших тегов и функций, отличия в работе с датами. Приложение переехало на Lucee и на новый сервер, после чего я прошёл по сценариям диспетчеров и клиентов.

Дальше безопасность. Формы, где значения из полей подставлялись в SQL-запрос текстом, переделал на параметризованные запросы. Значение теперь уходит в базу отдельно от команды, и типичный путь для инъекции закрыт.

Скрипты на Perl привёл в порядок. Обновил модули, добавил журнал: каждый запуск записывает, что обработал и чем закончил. Для разбора реестров и расчёта тарифов написал тесты на реальных примерах. При сбое диспетчер получает письмо, а не узнаёт утром по звонкам.

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

Затем сделал REST API поверх той же базы. Методы: создать отправление, рассчитать стоимость, получить статус, посмотреть историю. Обмен в формате JSON. У каждого клиента свой ключ доступа, частота запросов ограничена, чтобы чужая ошибка в цикле не положила систему. Для программистов клиентов написал описание API с примерами запросов и ответов.

Результат

Система работает на живом, поддерживаемом движке и больше не зависит от лицензии, которую нельзя купить. Диспетчеры почти не заметили перехода: экраны прежние, привычные кнопки на тех же местах.

Уязвимые формы закрыты. Ночные задачи пишут журнал, а сбой приходит письмом, поэтому утром диспетчерам не приходится выяснять, что случилось. Отчёты открываются заметно быстрее, ночной расчёт перестал наползать на утро.

Крупные клиенты подключились к API. Отправление создаётся прямо из их программы, а диспетчер получает его уже в системе. Меньше ручной загрузки реестров, меньше опечаток в адресах.

Не всё сделано. Часть интерфейса выглядит так же, как в 2005 году: работе это не мешает, а менять его стоит вместе с диспетчерами. База по-прежнему одна и без реплики. Копии есть, но если сервер откажет, подниматься придётся из копии, и заказчик отложил отказоустойчивость на период после сезона.

Я остался на постоянной поддержке: слежу за журналами, обновляю то, что устаревает, помогаю новым клиентам с API.

Если у вас есть система, которую боятся трогать, а лицензий на её платформу уже не купить, пришлите мне на freelance.ru описание: на чём она написана и что в ней нельзя останавливать. Скажу, стоит ли её сохранять.

Оценили проект:

Другие проекты

Все проекты →
Веб-разработка и IT Создание сайта для бутик-отеля на WordPress: три языка на WordPress Multilingual, Elementor, дизайн WordPress и прямое бронирование
Создание сайта для бутик-отеля на WordPress: три языка на WordPress Multilingual, Elementor, дизайн WordPress и прямое бронирование
19
Дизайн и Брендинг Концепт электрокара-шаттла для курортов: автоскетчи и футуродизайн кузова, компоновка в SketchUp, AI Рендеринг для поиска образа и финальные рендеры в Keyshot
Концепт электрокара-шаттла для курортов: автоскетчи и футуродизайн кузова, компоновка в SketchUp, AI Рендеринг для поиска образа и финальные рендеры в Keyshot
14
Веб-разработка и IT Создание сайта и веб-приложения для управляющей компании: заявки жителей на Laravel, PHP и MySQL, тесты PHPUnit
Создание сайта и веб-приложения для управляющей компании: заявки жителей на Laravel, PHP и MySQL, тесты PHPUnit
24
Маркетинг и Продвижение Продвижение в интернете для сети кофеен: единый визуал для соцсетей, шаблоны Canva, анимация GIF для сторис и экранов меню
Продвижение в интернете для сети кофеен: единый визуал для соцсетей, шаблоны Canva, анимация GIF для сторис и экранов меню
21