diff --git a/klyushenkova_ksenia_lab_2/.gitignore b/klyushenkova_ksenia_lab_2/.gitignore new file mode 100644 index 0000000..eb53ea0 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/.gitignore @@ -0,0 +1,2 @@ +/.venv +/.idea \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/README.md b/klyushenkova_ksenia_lab_2/README.md new file mode 100644 index 0000000..175da50 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/README.md @@ -0,0 +1,15 @@ +# Клюшенкова Ксения ПИбд-42 +# Лабораторная работа №2 - Разработка простейшего распределённого приложения + +### Язык разработки приложений: Python + +## Варианты +- Программа 1: Ищет в каталоге ```/var/data``` самый большой по объёму файл и перекладывает его в ```/var/result/data.txt```. +- Программа 2: Сохраняет произведение первого и последнего числа из файла ```/var/result/data.txt``` в ```/var/result/result.txt```. + +## Описание: +Первая программа лежит в папке w-1, вторая в папке w-2. В каждой папке также есть DockerFile, содержащие в себе +инструкции по сборке. В них присутствуют комментарии для значимых строк. Монтированные папки ```data``` для ```/var/data``` и ```result``` для ```/var/result```. + + +## [Видео](https://disk.yandex.ru/i/es7vPXJMiW5Rlg) \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/data/1.txt b/klyushenkova_ksenia_lab_2/data/1.txt new file mode 100644 index 0000000..c054bb3 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/data/1.txt @@ -0,0 +1 @@ +3 7 12 18 25 3 7 12 18 25 \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/data/2.txt b/klyushenkova_ksenia_lab_2/data/2.txt new file mode 100644 index 0000000..7027d4b --- /dev/null +++ b/klyushenkova_ksenia_lab_2/data/2.txt @@ -0,0 +1 @@ +10 20 30 40 50 \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/data/3.txt b/klyushenkova_ksenia_lab_2/data/3.txt new file mode 100644 index 0000000..9556a61 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/data/3.txt @@ -0,0 +1 @@ +5 15 30 50 75 \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/data/4.txt b/klyushenkova_ksenia_lab_2/data/4.txt new file mode 100644 index 0000000..f5268b6 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/data/4.txt @@ -0,0 +1 @@ +-4 -2 0 2 4 \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/data/5.txt b/klyushenkova_ksenia_lab_2/data/5.txt new file mode 100644 index 0000000..08784ec --- /dev/null +++ b/klyushenkova_ksenia_lab_2/data/5.txt @@ -0,0 +1 @@ +100 95 90 85 80 \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/docker-compose.yaml b/klyushenkova_ksenia_lab_2/docker-compose.yaml new file mode 100644 index 0000000..081541f --- /dev/null +++ b/klyushenkova_ksenia_lab_2/docker-compose.yaml @@ -0,0 +1,18 @@ +services: + + worker_one: + container_name: w-1 + build: + context: ./w-1 + volumes: + - ./data:/var/data + - ./result:/var/result + + worker_two: + container_name: w-2 + build: + context: ./w-2 + volumes: + - ./result:/var/result + depends_on: + - worker_one \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/result/data.txt b/klyushenkova_ksenia_lab_2/result/data.txt new file mode 100644 index 0000000..c054bb3 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/result/data.txt @@ -0,0 +1 @@ +3 7 12 18 25 3 7 12 18 25 \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/result/result.txt b/klyushenkova_ksenia_lab_2/result/result.txt new file mode 100644 index 0000000..4ec9c99 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/result/result.txt @@ -0,0 +1 @@ +625.0 \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/w-1/Dockerfile b/klyushenkova_ksenia_lab_2/w-1/Dockerfile new file mode 100644 index 0000000..c79721b --- /dev/null +++ b/klyushenkova_ksenia_lab_2/w-1/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.12-slim + +WORKDIR /app + +COPY worker-1.py . + +CMD ["python", "worker-1.py"] \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/w-1/worker-1.py b/klyushenkova_ksenia_lab_2/w-1/worker-1.py new file mode 100644 index 0000000..1e456d0 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/w-1/worker-1.py @@ -0,0 +1,44 @@ +import os +import shutil + +# Ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt. +# Определяем пути +source_dir = '/var/data' +target_file = '/var/result/data.txt' + +def find_largest_file(directory): + largest_file = None + max_size = 0 + + # Перебираем все файлы в каталоге + for root, _, files in os.walk(directory): + for file in files: + file_path = os.path.join(root, file) + try: + size = os.path.getsize(file_path) + if size > max_size: + max_size = size + largest_file = file_path + except OSError as e: + print(f"Ошибка при обработке файла {file_path}: {e}") + + return largest_file + +def move_largest_file_to_target(source_dir, target_file): + largest_file = find_largest_file(source_dir) + if not largest_file: + print("В каталоге нет файлов.") + return + + try: + # Создаём директорию для файла, если она не существует + os.makedirs(os.path.dirname(target_file), exist_ok=True) + + # Перемещаем содержимое самого большого файла + shutil.copyfile(largest_file, target_file) + print(f"Самый большой файл {largest_file} был перемещён в {target_file}.") + except OSError as e: + print(f"Ошибка при перемещении файла: {e}") + + +move_largest_file_to_target(source_dir, target_file) diff --git a/klyushenkova_ksenia_lab_2/w-2/Dockerfile b/klyushenkova_ksenia_lab_2/w-2/Dockerfile new file mode 100644 index 0000000..2c51e91 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/w-2/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.12-slim + +WORKDIR /app + +COPY worker-2.py . + +CMD ["python", "worker-2.py"] \ No newline at end of file diff --git a/klyushenkova_ksenia_lab_2/w-2/worker-2.py b/klyushenkova_ksenia_lab_2/w-2/worker-2.py new file mode 100644 index 0000000..b6e6ff0 --- /dev/null +++ b/klyushenkova_ksenia_lab_2/w-2/worker-2.py @@ -0,0 +1,49 @@ +import os + +# Ищет набольшее число из файла /var/result/data.txt и сохраняет его вторую степень в /var/result/result.txt. +# Пути к файлам +input_file = '/var/result/data.txt' +output_file = '/var/result/result.txt' + +def find_largest_number_and_save_squared(input_file, output_file): + try: + # Проверяем существование входного файла + if not os.path.exists(input_file): + print(f"Файл {input_file} не найден.") + return + + # Чтение чисел из файла + with open(input_file, 'r') as file: + numbers = [] + for line in file: + for word in line.split(): + try: + numbers.append(float(word)) + except ValueError: + continue + + # Проверяем, что числа найдены + if not numbers: + print("В файле нет чисел.") + return + + # Находим наибольшее число + largest_number = max(numbers) + + # Вычисляем квадрат + squared_number = largest_number ** 2 + + # Создаём директорию для файла, если её нет + os.makedirs(os.path.dirname(output_file), exist_ok=True) + + # Записываем квадрат в файл + with open(output_file, 'w') as file: + file.write(str(squared_number)) + + print(f"Наибольшее число: {largest_number}") + print(f"Квадрат числа сохранён в {output_file}") + except Exception as e: + print(f"Ошибка: {e}") + + +find_largest_number_and_save_squared(input_file, output_file)