Как с помощью генеративного ИИ улучшить PR в open source проект.
## Введение
Fluent Bit - это быстрый и легковесный логгер и форвардер логов, который часто используется в облачных средах для сбора и отправки данных. В этой статье я расскажу, как с помощью ИИ удалось быстро разобраться в незнакомой кодовой базе и подготовить качественный PR.
## Проблема
При настройке отправки логов в Amazon Kinesis через Fluent Bit я столкнулся с ограничением - плагин не позволял указать нестандартный порт для подключения. Это было критично в нашей инфраструктуре, где из-за особенностей сетевой архитектуры мы используем нестандартные порты для доступа к kinesis.
## Первоначальное решение
Мой коллега предложил простой патч, который решал проблему:
Было:
ctx->kinesis_client->port = 443;
struct flb_upstream *upstream = flb_upstream_create(config, ctx->endpoint,
443, FLB_IO_TLS,
ctx->client_tls);
Стало:
ctx->kinesis_client->port = ctx->port;
struct flb_upstream *upstream = flb_upstream_create(config, ctx->endpoint,
ctx->port, FLB_IO_TLS,
ctx->client_tls);
Патч работал, но для долгосрочного решения нужно было внести изменения в апстрим проекта. Пересборка Fluent Bit при каждом обновлении не самый удобный вариант.
## Работа с ИИ
Для работы я использовал cursor.com - форк VSCode с интегрированным Claude AI. Главное преимущество этого редактора в том, что он "понимает" всю кодовую базу проекта.
Вот как проходила работа с ИИ:
1. Сначала я показал ему существующий патч и попросил предложить улучшения. ИИ самостоятельно:
- Обнаружил существующие в кодовой базе механизмы логирования (
flb_plg_debug и flb_plg_error)- Предложил добавить информативные сообщения о выбранном порте
- Добавил валидацию входных данных после моей просьбы.
2. ИИ самостоятельно написал тесты, проверяющие:
- Инициализацию с дефолтным портом
- Использование кастомного порта
- Обработку некорректных значений порта
3. Когда возникли проблемы с подхватыванием порта, ИИ предложил пошаговую отладку через gdb:
# Сборка с отладочной информацией
cmake .. -DCMAKE_BUILD_TYPE=Debug -DFLB_DEV=On
# Запуск отладчика
gdb --args ./bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf
# Команды отладки
(gdb) break cb_kinesis_init
(gdb) run
(gdb) print flb_output_get_property("port", ins)
(gdb) print *ins
## Результат
Итоговый PR был вмержен в основную ветку проекта. На всю работу ушло около 6 часов, включая время на знакомство с кодовой базой Fluent Bit.
Теперь изменение конфигурации Fluent Bit для работы с нестандартным портом Kinesis выглядит так:
[OUTPUT]
Name kinesis
Match *
region us-east-1
port 4443 # Новый параметр
stream my-stream
Я надеюсь в версии fluent-bit 3.2 оно уже будет работать.
P.S. Я пробовал копилот от гитхаба для этой задачи - он мне показался несколько бесполезым и не шел ни в какое сравнение с sonnet 3.5.