Проект SimpleDAG — это система для обработки данных из CSV-файлов с использованием направленного ациклического графа (DAG). Программа позволяет настраивать операции через YAML-конфигурации и выполнять их в последовательности, задаваемой пользователем с помощью графа зависимостей.
SimpleDAG позволяет:
- Загружать данные из CSV-файлов.
- Настраивать операции обработки данных через YAML-конфигурации.
- Строить граф выполнения операций на основе пользовательской схемы.
- Выполнять операции в правильном порядке с использованием обхода в глубину.
- Логировать процесс выполнения и результаты.
Поддерживаемые операции:
- Числовые: сумма (
sum), среднее значение (average). - Строковые: конкатенация (
concatinate).
.
├── data/ # Директория с данными и конфигурациями
│ ├── test.csv # Пример CSV-файла с данными
│ ├── test.yaml # Пример YAML-конфигурации
│ └── *.yaml # Другие конфигурационные файлы
├── docs/ # Документация
├── include/ # Заголовочные файлы
│ ├── graph.h # Структуры и функции для работы с графами
│ ├── graphics.h # Графические элементы (логотип, инструкции)
│ ├── operations.h # Операции обработки данных
│ ├── parser.h # Парсеры конфигураций и CSV
│ ├── router.h # Маршрутизатор утилиты
│ └── utils.h # Вспомогательные утилиты
├── libs/ # Внешние библиотеки
│ └── Tiny_Yaml/ # Парсер YAML-файлов
├── src/ # Исходный код
│ ├── graph.cpp # Реализация работы с графами
│ ├── operations.cpp # Реализация операций
│ ├── parser.cpp # Реализация парсеров
│ ├── router.cpp # Реализация маршрутизатора
│ └── utils.cpp # Реализация утилит
├── tests/ # Тесты
│ ├── graph/ # Тесты графов
│ ├── operations/ # Тесты операций
│ ├── parser/ # Тесты парсеров
│ └── utils/ # Тесты утилит
├── main.cpp # Главная программа
├── Makefile # Файл сборки
└── README.md # Документация
- g++ с поддержкой C++17
- Make (утилита для сборки)
- Git (для клонирования репозитория)
- googletest (для запуска тестов)
Совместимые ОС: Ubuntu, Arch Linux, macOS
sudo apt-get update
sudo apt-get install -y build-essential libgtest-dev
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
sudo cp lib/*.a /usr/libsudo pacman -Syu
sudo pacman -S gtestbrew update
brew install googletestgit clone https://github.com/AlexeyL54/SimpleDAG.git
cd SimpleDAGmake
./SimpleDAG.outТесты расположены в соответствующих поддиректориях tests/ и покрывают:
- Создание и управление графами
- Корректность операций обработки данных
- Парсинг конфигураций и CSV-файлов
- Вспомогательные утилиты и логирование
# Сборка всех тестов (через скрипт)
./buildTests.sh
# Или сборка отдельных тестов (только на Ubuntu, Arch Linux)
cd tests/operations && make
cd ../graph && make
cd ../parser && make
cd ../utils && make
# Запуск всех тестов (через скрипт)
./runTests.sh
# Запуск отдельных тестов
./tests/operations/test_operations.out
./tests/graph/test_graph.out
./tests/parser/test_parser.out
./tests/utils/test_utils.outПоместите CSV-файл с данными и YAML-конфигурацию в директорию data/. В YAML-конфигурации в поле path укажите название CSV-файла, который нужно обработать.
- Выбор конфигурации: Программа отобразит список доступных YAML-файлов в директории
data/. - Проверка конфигурации: Система проверит наличие всех указанных операций и корректность их описания.
- Просмотр операций: Будет отображен список доступных операций с их идентификаторами.
- Ввод схемы графа: Пользователь вводит последовательности операций в формате
1->2->3. - Выполнение: Программа построит граф и выполнит операции в правильном порядке (топологическая сортировка).
- Логирование: Результаты сохраняются в файл лога с меткой времени.
Вводите связи между операциями (их номерами) в формате ->. Для завершения ввода введите end.
Пример:
1->2->3
1->4->5
2->4
end
Эта схема создаст граф, где:
- Операция 1 выполняется перед 2 и 4.
- Операция 2 выполняется перед 3 и 4.
- Операция 4 выполняется перед 5.
Важные замечания:
- Если ввести ветвь, не связанную с начальными операциями (например,
4->5без указания, как добраться до4из других узлов), она не будет выполнена. - Строго соблюдайте формат
->. Неверные форматы (например,1-2->3или1>2->3) приведут к тому, что некорректные ребра не будут добавлены в граф.
path: test.csv
operations:
sum_elements_of_column_1:
func: sum
column: 0
average_of_column_1:
func: average
column: 0
concat_strings:
func: concatinate
column: 3path: Путь к CSV-файлу относительно директорииdata/.operations: Словарь операций, где:- Ключ: Уникальный идентификатор операции (используется для логирования).
func: Тип операции (sum,average,concatinate).column: Номер столбца для обработки (индексация с 0).
- Graph Module (
graph.h/cpp): Управление направленным ациклическим графом операций (построение, обход, топологическая сортировка). - Operations Module (
operations.h/cpp): Реализация операций обработки данных. - Parser Module (
parser.h/cpp): Чтение и парсинг конфигураций YAML и CSV-файлов. - Utils Module (
utils.h/cpp): Вспомогательные функции, текстовый пользовательский интерфейс (TUI) и логирование. - Graphics Module (
graphics.h): Визуальные элементы интерфейса (логотип, инструкции). - Router Module (
router.h/cpp): Маршрутизация и управление workflow утилиты.
- Загрузка и парсинг YAML-конфигурации.
- Чтение и загрузка данных из указанного CSV-файла.
- Построение графа операций на основе пользовательской схемы.
- Обход графа (топологическая сортировка) и последовательное выполнение операций.
- Сохранение результатов и процесса работы в лог-файл.
Основной код проекта распространяется под лицензией MIT.
Проект использует библиотеку Tiny_Yaml, которая распространяется под собственной лицензией. Подробности смотрите в файле libs/Tiny_Yaml/LICENSE.