Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
Perl-скрипт вместо blame-notifier на ОС…

Perl-скрипт вместо blame-notifier на ОС Linux

08 Апр 2021

Как известно, нашими клиентами являются разработчики. А разработчики могут неожиданно приятно удивлять. К примеру, один из наших пользователей написал свой собственный скрипт, который позволяет настроить рассылку email-сообщений об ошибках, найденных PVS-Studio. Отличие данного скрипта от нашего инструмента blame-notifier заключается в том, что он не требует установки .NET Core на Linux. Мы решили написать небольшую заметку про этот Perl-скрипт, т. к. считаем, что он может пригодиться кому-то еще.

0821_perl-script_ru/image1.png

Введение

Perl-скрипт, о котором пойдёт речь в этой заметке, опубликован на github под лицензией GPL-2.0, поэтому воспользоваться им может любой желающий.

Основной его функционал заключается в том, что он уведомляет о проблемах, найденных PVS-Studio, путем рассылки email. Можно сказать, что это практически аналог нашего инструмента blame-notifier. Электронное письмо, которое отправляет Perl-скрипт, формируется в HTML-формате и отправляется автору коммита. Информация о коммите и его авторе извлекается из Git. Стоит заметить, что для отправки email есть ряд настроек, которые мы рассмотрим чуть позже.

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

Также есть возможность добавления к письму вложений. К примеру, к email можно прикрепить полный лог ошибок, обнаруженных PVS-Studio.

Требования

Конечно, есть ряд предварительных настроек, которые необходимо сделать для того, чтобы скриптом можно было воспользоваться.

Во-первых, проект должен использовать систему контроля версий Git, так как скрипт извлекает всю необходимую информацию об авторе коммита через git blame / git annotate.

Во-вторых, необходимо настроить базу данных для того, чтобы скрипт мог автоматически сохранять там найденные ошибки и, соответственно, отправлять email только для новых ошибок. Если вы хотите получать уведомления обо всех ошибках в проекте, а не только о новых – такое тоже возможно. В разделе "Варианты использования" я напишу об этом чуть подробнее.

В-третьих, необходимо настроить почту для отправки электронных писем, если у вас она еще не настроена. Этот пункт я тоже детально разберу в разделе "Настройка почты".

И самое последнее – необходимо, чтобы в операционной системе был установлен Perl. Но называть это требованием не совсем верно, т. к. обычно Perl бывает установлен на каждой ОС Linux.

Установка

Приступим к рассмотрению процесса настройки более подробно. Установку я буду производить на своей виртуальной машине, на которой установлен дистрибутив Linux openSUSE. Кстати, в файле README git-репозитория вы можете посмотреть настройку под Debian, но процесс почти ничем не отличается.

Итак, перед настройкой нам необходимо будет клонировать репозиторий с github.

Необходимые модули

Для того чтобы воспользоваться скриптом, нам понадобится установить следующие модули (указаны необходимые модули для openSUSE):

  • perl-DBI – инструмент для Perl, не зависимый от базы данных;
  • perl-DBD-mysql – драйвер для базы данных MySQL;
  • perl-MIME-Lite – для генерации MIME-сообщений;
  • perl-YAML – YML-парсер для загрузки файлов конфигурации;
  • perl-List-MoreUtils – дополнительные утилиты;
  • perl-FindBin-Real – для поиска каталога исходного Perl-скрипта.

Сделать это можно командой:

$> sudo zypper install perl-DBI
perl-DBD-mysql 
perl-MIME-Lite 
perl-YAML 
perl-List-MoreUtils 
perl-FindBin-Real

А данные модули вы можете установить по желанию. Они упростят вам работу с кодом, но на работоспособность скрипта никак не повлияют:

  • perl-IPC-Filter – нужен для подсветки синтаксиса;
  • highlight – нужен для подсветки исходного кода GNU.

Настройка почты

Для настройки отправления почты воспользуемся msmtp. Установка производится командой:

$> sudo zypper install msmtp msmtp-mta

После установки необходимо создать файл /etc/msmtprc. Файл должен содержать настройки почты. К примеру, для Yandex-почты данный файл будет выглядеть таким образом:

# Set default values for all following accounts.
defaults
auth on
tls on
tls_starttls on
tls_certcheck off
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log

# Account
account        default
host           smtp.yandex.ru
port           587
auth           on
keepbcc        on
from           email@yandex.ru
user           email@yandex.ru
password       emailpassword

# Set a default account
account default: default

# Map local users to mail addresses (for crontab)
aliases /etc/aliases

Файл msmtp.log, в который скрипт будет записывать логи, вам нужно будет также создать самостоятельно.

Также для отправки почты вам потребуется включить протоколы POP3 и IMAP в настройках вашего почтового ящика.

На этом настройку почты можно считать завершенной. Чтобы убедиться, что все работает, вы можете отправить тестовое сообщение:

$> echo "test message" | mail -s "test" email@yandex.com

Настройка базы данных

Далее нам необходимо настроить любую из баз данных, которая будет поддерживаться Perl. Возьмем MariaDB, как и предлагает автор скрипта.

Установить ее можно командой:

$> sudo zypper install mariadb

Затем необходимо сделать:

$> sudo rcmysql start
$> sudo mysql_secure_installation

После установки нам необходимо создать новую базу данных с именем blame и нового пользователя с таким же именем:

$> sudo mysql
mysql> CREATE DATABASE blame;
mysql> GRANT ALL on blame.* TO 'blame'@'localhost' IDENTIFIED BY
'secret_mysql_password';
mysql> quit

Базу данных необходимо будет запустить перед запуском скрипта.

Конфигурация

Perl-скрипт будет искать конфигурационный файл в двух местах:

  • /etc/blame.cfg
  • $HOME/.blame.cfg

Если будут найдены оба файла, то файл, находящийся в домашней директории (home), переопределит файл с глобальными настройками.

Содержимое файла должно иметь YAML-формат:

---
# database connection string
dsn: DBI:mysql:blame
# database username
username: blame
# database password
password: secret_mysql_password
# smtp sender address
smtp_from: email@yandex.ru
# smtp subject
smtp_subject: New PVS Issues
# path substitution
path_search: '/root/src/src/'
path_replace: ''

Стоит обратить внимание на то, что данный файл содержит конфиденциальные данные и не должен быть доступен для чтения всем пользователям.

Варианты использования

Perl-скрипт в качестве входного параметра принимает путь до файла в формате errorfile, полученный в результате конвертации вывода анализатора через утилиту PlogConverter. Более подробно почитать про данную утилиту вы можете здесь.

К примеру, у нас есть отчёт о проверке PVS-Studio (назовём его report.plog). Получить файл, необходимый для работы Perl-скрипта, мы можем, задав PlogConverter-у следующую команду:

plog-converter report.plog -t errorfile -o report.txt

Теперь, чтобы запустить Perl-скрипт, нам необходимо выполнить следующую команду:

$> ./blame-notifier.pl < report.txt

Содержимое письма, которое придёт на почту, будет примерно следующим:

0821_perl-script_ru/image2.png

Помимо этого, существует ряд дополнительных параметров, которые позволят более гибко использовать скрипт. Для того чтобы получить больше информации, вы можете воспользоваться опцией -h.

Давайте рассмотрим некоторые примеры использования с дополнительными опциями.

По умолчанию скрипт группирует предупреждения анализатора по автору и отсылает на почту, которая извлекается скриптом командой git annotate. Помимо этого, вы можете изменить поведение так, чтобы получать уведомления от всех авторов, переопределив их почтовые адреса. Сделать это можно, указав при запуске опцию -r <your.email>:

$> ./blame-notifier.pl -r email@yandex.ru < report.txt

При каждом запуске скрипта обновляется база данных и формируется email-рассылка со свежими предупреждениями анализатора. Если вы не хотите ограничиваться отправкой рассылки только с новыми предупреждениями, то вы можете воспользоваться опцией -d. В таком случае к базе данных применится команда SQL DROP TABLE, и скрипт разошлет уведомления обо всех предупреждениях PVS-Studio.

$> ./blame-notifier.pl -d -r email@yandex.ru < report.txt

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

$> ./blame-notifier.pl -a 'report.txt,report.html' < report.txt

И, наконец, если вы хотите увидеть в консоли подробный вывод того, что сейчас происходит, вы можете передать скрипту опцию -v.

В заключение

Если вы не хотите устанавливать .NET Core на Linux – вы можете присмотреться к данному Perl-скрипту. Возможно, вы захотите использовать именно его вместо официального решения. Во всяком случае, теперь вы точно знаете, что такой способ тоже есть.

Однако обращаем ваше внимание на то, что за данное решение мы не несем ответственности и не гарантируем, что в случае изменений логов или форматов файлов автор скрипта будет поддерживать какую-либо совместимость с предыдущими версиями.

И, напоследок, важное примечание: автор скрипта не рекомендует запускать его под root, т. к. это потребует хранения конфигурационных файлов в домашнем каталоге пользователя. Вместо этого вы можете запускать анализ PVS-Studio в контейнере Docker.

Популярные статьи по теме


Комментарии (0)

Следующие комментарии next comments
close comment form
close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
** Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам