.backend — описывает интерфейс диагностического инструмента, обеспечивающий взаимодействие с D-Bus. В нем же описываются методы интерфейса: info, run, list, report;
.diagnostictool — описывает отображение диагностического инструмента в ADT. Содержит информацию о тестах, доступных в рамках описываемого диагностического инструмента.
.backend и запуска исполняемых файлов.
.backend обо всех установленных диагностических инструментах и создает объекты на системной и сессионных (в зависимости от расположения backend-файлов) шинах D-Bus с именами вида «ru.basealt.alterator.<имя инструмента>».

.backend и .diagnostictool (или .diag), описывающие сущности Alterator Entry.
Примечание
.diagnostictool и .diag считаются верными.
/путь_к_исполняемому_файлу {param}
где {param} — означает имя теста, который необходимо выполнить.
-l или --list — вывод списка тестов. Список необходимо выводить в стандартный вывод. Имя каждого теста должно быть с новой строки;
-r или report — сгенерировать файл с отчетом. Файл с отчетом может представлять собой как текстовые данные, так и бинарные (например, архив). Его содержимое необходимо направить в стандартный вывод. ADT получит этот вывод и сохранит в файл с именем вида «имя_инструмента_дата» и суффиксом, указанным в файле .diagnostictool.
.backend и .diagnostictool следует воспользоваться спецификацией Alterator Entry
.backend и .diagnostictool являются текстовыми и содержат описание в виде секций. Синтаксис файлов:
[имя секции1] Поле1 = значение Поле2 = значение ПолеN = значение [имя секции2] Поле1 = значение Поле2 = значение ПолеN = значение [имя секцииN] Поле1 = значение Поле2 = значение ПолеN = значениеПри этом следует учитывать:
./backends для файла .backend;
./diagnostictools для файла .diagnostictool (или .diag).
.diagnostictool имеет имя вида <имя диагностического инструмента>.diagnostictool.
/usr/share/alterator/diagnostictools/. В противном случае, рекомендуется использовать каталог /etc/alterator/diagnostictools/.
.diagnostictool содержит информацию для GUI Он включает секцию [Alterator Entry] и секции, описывающие варианты тестирования.
.backend имеет имя вида <имя диагностического инструмента>.ru.basealt.alterator.backend.
/usr/share/alterator/backends/system — если объект необходимо создать на системной шине;
/usr/share/alterator/backends/user — если объект необходимо создать на сессионной шине;
/etc/alterator/backends/system/ — если объект необходимо создать на системной шине;
/etc/alterator/backends/user/ — если объект необходимо создать на сессионной шине;
.diagnostictool (cat <путь к файлу>);
<путь к исполняемому файлу> {param};
<путь к исполняемому файлу> -l;
<путь к исполняемому файлу> -R;
/usr/bin/diag-example;
/usr/share/alterator/backends/diag-example.backend;
/usr/share/alterator/diagnostictools/diag-example.diag.
/usr/bin/diag-example:
#!/bin/bash
#
# Copyright (c) 2024 Evgeny Sinelnikov <sin@altlinux.org>
#
# Example diagnostic tool
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
set -euo pipefail
. shell-getopt
PROG="${0##*/}"
PROG_VERSION='0.0.1'
cmd="run"
global_retval=0
print_version()
{
cat <<EOF
$PROG version $PROG_VERSION
Written by Evgeny Sinelnikov <sin@altlinux.org>
Copyright (C) 2024 Evgeny Sinelnikov <sin@altlinux.org>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
EOF
exit
}
show_usage()
{
cat <<EOF
$PROG - example diagnostic tool.
Usage: $PROG [options] [<diagnostic-task>]
Options:
-l, --list list of diagnostic tasks;
-V, --version print program version and exit;
-h, --help show this text and exit.
Report bugs to https://bugzilla.altlinux.org/
EOF
exit
}
TEMP=$(getopt -n "$PROG" -o "l,V,h" -l "list,version,help" -- "$@") || show_usage
eval set -- "$TEMP"
while :; do
case "$1" in
--) shift; break
;;
-l|--list) cmd="list";
;;
-V|--version) print_version
;;
-h|--help) show_usage
;;
*) fatal "Unrecognized option: $1"
;;
esac
shift
done
task_list="$*"
task_show()
{
local func="$1"
echo "$func"
}
task_run()
{
local retval=126
local func="$1"
if test -n "$task_list"; then
echo "$task_list" | tr ' ' '\n' | grep -q "^$func\$" ||
return 0
fi
$func && retval=0 || retval="$?"
test $retval = 0 || global_retval=1
return $retval
}
task()
{
local task="$1"
case "$cmd" in
list) task_show "$task"
;;
run) task_run "$task" && echo "[DONE]: $task" || echo "[FAIL]: $task"
;;
*) fatal "Unrecognized command: $cmd"
;;
esac
}
is_gigabyte()
{
/usr/sbin/dmidecode -s baseboard-manufacturer | grep -q "^Gigabyte Technology"
}
is_std_def_kernel_running()
{
uname -r | grep -q '^[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+-std-def-'
}
task is_gigabyte
task is_std_def_kernel_running
exit "$global_retval"
/usr/share/alterator/backends/diag-example.backend:
[Alterator Entry]
Type = Backend
Module = executor
Name = diag_example
Interface = diag1
[Info]
execute = cat /usr/share/alterator/diagnostictools/diag-example.diag
stdout_bytes = enabled
stdout_byte_limit = 200000
action_id = Info
[Run]
execute = diag-example {param}
stdout_signal_name = diag_example_stdout_signal
stderr_signal_name = diag_example_stderr_signal
thread_limit = 1
action_id = Run
[List]
execute = diag-example -l
stdout_strings = enabled
stdout_strings_limit = 200000
action_id = List
/usr/share/alterator/diagnostictools/diag-example.diag:
[Alterator Entry] Type = diag Name = Example DisplayName = Diagnostic tool example DisplayName[ru] = Пример инструмента диагностики Comment = Diagnostic tool comment Comment[ru] = Комментарий к диагностическому инструменту Icon = system-run [is_gigabyte] DisplayName = Is motherboard manufacturer — Gigabyte? DisplayName[ru] = Производитель материнской платы — Gigabyte?
Примечание
# systemctl restart alterator-manager.service

