forked from Alexey/DAS_2024_1
Merge pull request 'dolgov_dmitriy_lab_2' (#48) from dolgov_dmitriy_lab_2 into main
Reviewed-on: Alexey/DAS_2024_1#48
This commit is contained in:
commit
85b809333b
2
dolgov_dmitriy_lab_2/.gitignore
vendored
Normal file
2
dolgov_dmitriy_lab_2/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
data
|
||||||
|
result
|
36
dolgov_dmitriy_lab_2/README.md
Normal file
36
dolgov_dmitriy_lab_2/README.md
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
# Лабораторная работа №2
|
||||||
|
|
||||||
|
## Выполнил: Долгов Дмитрий, группа ПИбд-42
|
||||||
|
|
||||||
|
### Были выбраны следующие варианты программ:
|
||||||
|
|
||||||
|
* _Вариант первого приложения: 6._ Берёт из каталога /var/data случайный файл и перекладывает его в /var/result/data.txt.
|
||||||
|
* _Вариант второго приложения: 1._ Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt.
|
||||||
|
|
||||||
|
Кроме того, для генерации файлов был реализован сервис file_generator
|
||||||
|
|
||||||
|
### Были использованы следующие технологии:
|
||||||
|
|
||||||
|
* git
|
||||||
|
* docker
|
||||||
|
* docker-compose
|
||||||
|
* язык программирования Python
|
||||||
|
|
||||||
|
### Для запуска лабораторной работы, находясь в папке `dolgov_dmitriy_lab_2`, необходимо выполнить следующую команду:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker-compose up --build
|
||||||
|
```
|
||||||
|
Таким образом, запустятся все сервисы, необходимые для выполнения лабораторной работы.
|
||||||
|
|
||||||
|
## Результат запуска:
|
||||||
|
```
|
||||||
|
app2-1 | Наибольшее числовое значение: 29.0
|
||||||
|
app2-1 | Результат: 841.0
|
||||||
|
app1-1 | Файл file_3.txt успешно перемещен в /var/result/data.txt
|
||||||
|
app2-1 exited with code 0
|
||||||
|
app1-1 exited with code 0
|
||||||
|
```
|
||||||
|
## Видео с результатом запуска:
|
||||||
|
|
||||||
|
Видео можно посмотреть по данной [ссылке](https://drive.google.com/file/d/1Iw6BR0lRvh4382QsIEfr5E68-09aKX9C/view?usp=drive_link).
|
8
dolgov_dmitriy_lab_2/app1/Dockerfile
Normal file
8
dolgov_dmitriy_lab_2/app1/Dockerfile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Стандартный образ Python
|
||||||
|
FROM python:3.9
|
||||||
|
# Указываем рабочую директорию
|
||||||
|
WORKDIR /app
|
||||||
|
# Копируем в ней файл app1.py
|
||||||
|
COPY app1.py .
|
||||||
|
# Команда для запуска при старте контейнера
|
||||||
|
CMD ["python", "app1.py"]
|
27
dolgov_dmitriy_lab_2/app1/app1.py
Normal file
27
dolgov_dmitriy_lab_2/app1/app1.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import os
|
||||||
|
import random
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
def move_random_file():
|
||||||
|
src_dir = "/var/data"
|
||||||
|
dst_file = "/var/result/data.txt"
|
||||||
|
|
||||||
|
# Получаем список всех файлов в src_dir
|
||||||
|
files = os.listdir(src_dir)
|
||||||
|
|
||||||
|
if files:
|
||||||
|
# Выбираем случайный файл
|
||||||
|
random_file = random.choice(files)
|
||||||
|
|
||||||
|
# Проверяем, что файл существует
|
||||||
|
if os.path.exists(os.path.join(src_dir, random_file)):
|
||||||
|
# Перемещаем файл в целевое место
|
||||||
|
shutil.move(os.path.join(src_dir, random_file), dst_file)
|
||||||
|
print(f"Файл {random_file} успешно перемещен в {dst_file}")
|
||||||
|
else:
|
||||||
|
print(f"Ошибка: Файл {random_file} не найден в {src_dir}")
|
||||||
|
else:
|
||||||
|
print("Папка пуста")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
move_random_file()
|
8
dolgov_dmitriy_lab_2/app2/Dockerfile
Normal file
8
dolgov_dmitriy_lab_2/app2/Dockerfile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Стандартный образ Python
|
||||||
|
FROM python:3.9
|
||||||
|
# Указываем рабочую директорию
|
||||||
|
WORKDIR /app
|
||||||
|
# Копируем содержимое текущей директории в рабочую директорию
|
||||||
|
COPY app2.py .
|
||||||
|
# Запускаем приложение
|
||||||
|
CMD ["python", "app2.py"]
|
26
dolgov_dmitriy_lab_2/app2/app2.py
Normal file
26
dolgov_dmitriy_lab_2/app2/app2.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import os
|
||||||
|
from math import sqrt
|
||||||
|
|
||||||
|
def find_largest_number_and_square():
|
||||||
|
input_file = "/var/data/data.txt"
|
||||||
|
output_file = "/var/result/result.txt"
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(input_file, 'r') as f:
|
||||||
|
numbers = [float(num.strip()) for num in f]
|
||||||
|
|
||||||
|
largest_num = max(numbers)
|
||||||
|
squared_num = largest_num ** 2
|
||||||
|
|
||||||
|
with open(output_file, 'w') as f:
|
||||||
|
f.write(str(squared_num))
|
||||||
|
|
||||||
|
print(f"Наибольшее числовое значение: {largest_num}")
|
||||||
|
print(f"Результат: {squared_num}")
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"Ошибка: Файл {input_file} не найден")
|
||||||
|
except ValueError:
|
||||||
|
print("Ошибка: В файле содержатся некорректные данные")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
find_largest_number_and_square()
|
42
dolgov_dmitriy_lab_2/docker-compose.yml
Normal file
42
dolgov_dmitriy_lab_2/docker-compose.yml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Сервисы, которые будут запускаться
|
||||||
|
services:
|
||||||
|
# Сервис генерации файлов
|
||||||
|
file_generator:
|
||||||
|
build:
|
||||||
|
# Директория с Dockerfile и скриптом генератора
|
||||||
|
context: ./file_generator
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
# Монтирование локальной папки data в /var/data в контейнере
|
||||||
|
volumes:
|
||||||
|
- ./data:/var/data
|
||||||
|
- ./result:/var/result
|
||||||
|
# Запуск команды, которая генерирует файл в папке /var/data
|
||||||
|
command: ["python", "file_generator.py"]
|
||||||
|
|
||||||
|
# Первая программа, которая перемещает рандомный файл из одной папки в другую
|
||||||
|
app1:
|
||||||
|
build:
|
||||||
|
# Директория с Dockerfile для первого приложения
|
||||||
|
context: ./app1
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
# Монтирование локальной папки result в /var/result в контейнере
|
||||||
|
volumes:
|
||||||
|
- ./result:/var/result
|
||||||
|
- ./data:/var/data
|
||||||
|
# Указывает, что первый сервис зависит от завершения работы генератора
|
||||||
|
depends_on:
|
||||||
|
- file_generator
|
||||||
|
# Запуск скрипта
|
||||||
|
command: ["python", "app1.py"]
|
||||||
|
|
||||||
|
# Вторая программа, которая считает квадрат максимального числа в файле (пояснения аналогичны первой)
|
||||||
|
app2:
|
||||||
|
build:
|
||||||
|
context: ./app2
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
volumes:
|
||||||
|
- ./result:/var/result
|
||||||
|
- ./data:/var/data
|
||||||
|
depends_on:
|
||||||
|
- file_generator
|
||||||
|
command: ["python", "app2.py"]
|
7
dolgov_dmitriy_lab_2/file_generator/Dockerfile
Normal file
7
dolgov_dmitriy_lab_2/file_generator/Dockerfile
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
FROM python:3.9
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY file_generator.py .
|
||||||
|
|
||||||
|
CMD [ "python", "file_generator.py" ]
|
33
dolgov_dmitriy_lab_2/file_generator/file_generator.py
Normal file
33
dolgov_dmitriy_lab_2/file_generator/file_generator.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import os
|
||||||
|
import random
|
||||||
|
|
||||||
|
def generate_files(count):
|
||||||
|
directory = "/var/data/"
|
||||||
|
if not os.path.exists(directory):
|
||||||
|
os.makedirs(directory)
|
||||||
|
|
||||||
|
for _ in range(count):
|
||||||
|
file_name = f"{directory}file_{random.randint(1, 10)}.txt"
|
||||||
|
|
||||||
|
with open(file_name, 'w') as f:
|
||||||
|
for _ in range(random.randint(1, 100)):
|
||||||
|
f.write(f"{random.randint(1, 100)}\n")
|
||||||
|
|
||||||
|
print(f"Сгенерирован файл {file_name}")
|
||||||
|
|
||||||
|
|
||||||
|
def generate_data():
|
||||||
|
|
||||||
|
file_name = "/var/data/data.txt"
|
||||||
|
|
||||||
|
with open(file_name, 'w') as f:
|
||||||
|
for _ in range(random.randint(10, 100)):
|
||||||
|
f.write(f"{random.randint(1, 30)}\n")
|
||||||
|
print(f"Сгенерирован файл {file_name}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
generate_files(10)
|
||||||
|
generate_data()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user