diff --git a/tsukanova_irina_lab_2/.gitignore b/tsukanova_irina_lab_2/.gitignore new file mode 100644 index 0000000..0196882 --- /dev/null +++ b/tsukanova_irina_lab_2/.gitignore @@ -0,0 +1,2 @@ +/.venv +/.idea diff --git a/tsukanova_irina_lab_2/README.md b/tsukanova_irina_lab_2/README.md new file mode 100644 index 0000000..b22bf49 --- /dev/null +++ b/tsukanova_irina_lab_2/README.md @@ -0,0 +1,16 @@ +# Цуканова Ирина ПИбд-32 +# Лабораторная работа №2 - Разработка простейшего распределённого приложения + +### Язык разработки приложений: Python + +## Выбранные варианты +- Для программы 1: Ищет в каталоге ```/var/data``` самый большой по объёму файл и перекладывает его в ```/var/result/data.txt```. +- Для программы 2: Сохраняет произведение первого и последнего числа из файла ```/var/result/data.txt``` в ```/var/result/result.txt```. + +## Описание: +Каждая программа лежит в своей папке, первая в worker-1, вторая в worker-2. +В этих же папках лежат Dockerfile'ы с инструкциями по сборке. В них присутствуют комментарии для значимых строк. +Монтированные папки ```data``` для ```/var/data``` и ```result``` для ```/var/result```. + + +## [Видео](https://drive.google.com/file/d/1eBbIDgTo3MF4EeM677EPEKgJEINekaC0/view?usp=drive_link) \ No newline at end of file diff --git a/tsukanova_irina_lab_2/data/file_1.txt b/tsukanova_irina_lab_2/data/file_1.txt new file mode 100644 index 0000000..f74e918 --- /dev/null +++ b/tsukanova_irina_lab_2/data/file_1.txt @@ -0,0 +1 @@ +34 905 63 92 74 9 3 25 8 0 2 4 24 452 94 6 2 4 2 65 83 73 672 47 23 21 1 \ No newline at end of file diff --git a/tsukanova_irina_lab_2/data/file_2.txt b/tsukanova_irina_lab_2/data/file_2.txt new file mode 100644 index 0000000..85c06ca --- /dev/null +++ b/tsukanova_irina_lab_2/data/file_2.txt @@ -0,0 +1 @@ +4 9 6 320 75 348 12 75 94 63 45 23 3 \ No newline at end of file diff --git a/tsukanova_irina_lab_2/data/file_3.txt b/tsukanova_irina_lab_2/data/file_3.txt new file mode 100644 index 0000000..cb69abd --- /dev/null +++ b/tsukanova_irina_lab_2/data/file_3.txt @@ -0,0 +1 @@ +5 34 7 9 6 43 5 768 4 23 1 3 657 534 4 3 87 6 9 8 56 37 525 5 7 3 2 65 4 86 7 295 473 254 633 4 45 2 \ No newline at end of file diff --git a/tsukanova_irina_lab_2/docker-compose.yaml b/tsukanova_irina_lab_2/docker-compose.yaml new file mode 100644 index 0000000..2fbe8cd --- /dev/null +++ b/tsukanova_irina_lab_2/docker-compose.yaml @@ -0,0 +1,18 @@ +services: + + worker_one: + container_name: worker_one + build: + dockerfile: ./worker-1 + volumes: + - ./data:/var/data + - ./result:/var/result + + worker_two: + container_name: worker_two + build: + dockerfile: ./worker-2 + volumes: + - ./result:/var/result + depends_on: + - worker_one \ No newline at end of file diff --git a/tsukanova_irina_lab_2/result/data.txt b/tsukanova_irina_lab_2/result/data.txt new file mode 100644 index 0000000..cb69abd --- /dev/null +++ b/tsukanova_irina_lab_2/result/data.txt @@ -0,0 +1 @@ +5 34 7 9 6 43 5 768 4 23 1 3 657 534 4 3 87 6 9 8 56 37 525 5 7 3 2 65 4 86 7 295 473 254 633 4 45 2 \ No newline at end of file diff --git a/tsukanova_irina_lab_2/result/result.txt b/tsukanova_irina_lab_2/result/result.txt new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/tsukanova_irina_lab_2/result/result.txt @@ -0,0 +1 @@ +10 diff --git a/tsukanova_irina_lab_2/worker-1/Dockerfile b/tsukanova_irina_lab_2/worker-1/Dockerfile new file mode 100644 index 0000000..585db02 --- /dev/null +++ b/tsukanova_irina_lab_2/worker-1/Dockerfile @@ -0,0 +1,11 @@ +# Использую базовый образ Python +FROM python:3.12-slim + +# Устанавливаю рабочую директорию внутри контейнера +WORKDIR /app + +# Копирую все файлы в контейнер +COPY worker_1.py . + +# Команда для запуска Python-скрипта +CMD ["python", "worker_1.py"] diff --git a/tsukanova_irina_lab_2/worker-1/worker_1.py b/tsukanova_irina_lab_2/worker-1/worker_1.py new file mode 100644 index 0000000..fa8f9ee --- /dev/null +++ b/tsukanova_irina_lab_2/worker-1/worker_1.py @@ -0,0 +1,27 @@ +import os +import shutil + +# Ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt. +print("start worker_1") +dir_data = "/var/data" +dir_res = "/var/result" + +if not os.path.exists(dir_data): + os.mkdir(dir_data) + +if not os.path.exists(dir_res): + os.mkdir(dir_res) + +largest_file = None +largest_size = 0 + +for root, dirs, files in os.walk(dir_data): + for file in files: + file_path = os.path.join(root, file) + file_size = os.path.getsize(file_path) + if file_size > largest_size: + largest_size = file_size + largest_file = file_path + +if largest_file: + shutil.copyfile(largest_file, dir_res + "/data.txt") diff --git a/tsukanova_irina_lab_2/worker-2/Dockerfile b/tsukanova_irina_lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..360f8ec --- /dev/null +++ b/tsukanova_irina_lab_2/worker-2/Dockerfile @@ -0,0 +1,11 @@ +# Использую базовый образ Python +FROM python:3.12-slim + +# Устанавливаю рабочую директорию внутри контейнера +WORKDIR /app + +# Копирую все файлы в контейнер +COPY worker_2.py . + +# Команда для запуска Python-скрипта +CMD ["python", "worker_2.py"] diff --git a/tsukanova_irina_lab_2/worker-2/worker_2.py b/tsukanova_irina_lab_2/worker-2/worker_2.py new file mode 100644 index 0000000..924a47d --- /dev/null +++ b/tsukanova_irina_lab_2/worker-2/worker_2.py @@ -0,0 +1,19 @@ +# Сохраняет произведение первого и последнего числа из файла /var/result/data.txt в /var/result/result.txt. + +print("start worker_2") + +with open('/var/result/data.txt', 'r') as f: + numbers = [int(num) for num in f.read().split() if num.isdigit()] + +if numbers: + first_number = numbers[0] + last_number = numbers[-1] + + result = first_number * last_number + + with open('/var/result/result.txt', 'w') as f: + f.write(f"{result}\n") + + print(f"Получен результат - {result}") +else: + print("Результат не получен. Файл не содержит чисел")