sergeev_evgenii_lab_2 is done! #128

Merged
Alexey merged 5 commits from sergeev_evgenii_lab_2 into main 2024-01-18 16:05:00 +04:00
16 changed files with 206 additions and 0 deletions

View File

@ -0,0 +1,42 @@
## Задание
Развернуть два взаимосвязанных сервиса по варианту:
Вариант № 4 для первой программы:
* Сервис формирует файл /var/result/data.txt так, что каждая строка файла - количество символов в именах файлов из каталога /var/data.
Вариант № 2 для второй программы:
* Сервис ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
## Выполнение
Были написаны два сервиса на языке python с использованием технологии flask.
Они выводят на страницу кнопки, при нажатии на которые происходит соответствующие действия по заданию
Для сервисов прописаны файлы Dockerfile, описывающие создание контейнеров:
* Для обоих контейнеров выбирается Python 11
* На оба контейнера пробрасываются порты, на которых работает приложение: 8081 для первого и 8082 для второго
* Внутри контейнеров создаются папки /work для файлов скриптов, папки /var/result, /var/data для обоих сервисов
* В оба контейнера устанавливается фреймворк Flask
* Выбирается рабочая директория /work и туда копируются файлы скриптов
* Командой запускаются сами скрипты
Общий yml-файл настроен следующим образом:
* блок services, где перечислены разворачиваемые сервисы.
* для каждого сервиса прописан build, где обозначается его папка
* для каждого сервиса прописано пробрасывание портов на хостовую машину
* для каждого сервиса прописано отображение внутриконтейнерных папок на хостовые
## Результат
Пример выполнения:
Исходные данные: четыре файла в папке /var/data с разным по длине названием
Ход работы: нажатие кнопок на странице первого сервиса, потом - второго
Созданные контейнеры:
![Контейнеры](images/containers.png)
Страница первого задания:
![Страница первого задания](images/exercise1.png)
Выходные данные при выполнении второго задания:
![Второе задание. Результат](images/exercise2.png)
## Ссылка на видео
https://youtu.be/CEAAr0xolxM

View File

@ -0,0 +1,19 @@
version: '3'
services:
service1:
build:
context: ./service1
ports:
- "8081:8081"
volumes:
- .\var\data:/var/data
- .\var\result:/var/result
service2:
build:
context: ./service2
ports:
- "8082:8082"
volumes:
- ./var/result:/var/result

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,15 @@
FROM python:3.11
ENV LISTEN_PORT=8081
EXPOSE 8081
RUN ["mkdir", "/work"]
RUN ["mkdir", "/var/data"]
RUN ["mkdir", "/var/result"]
RUN pip install Flask
WORKDIR /work
COPY index.html service1.py ./
CMD ["python", "service1.py"]

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Сервис № 1</title>
</head>
<body>
<form action="http://localhost:8081/ex">
<input type="submit" value="Выполнить 1ое задание"/>
</form>
</body>
</html>

View File

@ -0,0 +1,39 @@
from flask import Flask, redirect, render_template
import os
app = Flask(__name__, template_folder='')
@app.route('/')
def home():
return render_template("index.html")
@app.route('/ex')
def do():
current_directory = os.getcwd()
directory_elements = current_directory.split(os.path.sep) # Разделяем по разделителю каталогов
cur_d = os.path.sep.join(directory_elements[:-1])
data_dir = cur_d + '/var/data'
path_result_file = cur_d + '/var/result/data.txt'
try:
# Получаем список файлов в указанном каталоге
files = os.listdir(data_dir)
# Формируем путь к каждому файлу и считаем количество символов в именах
characters_count_list = [len(file) for file in files]
# Пишем результат в файл data.txt
with open(path_result_file, 'w') as result_file:
for count in characters_count_list:
result_file.write(f'{count}\n')
print(f'Файл успешно создан.')
except Exception as e:
print(f'Произошла ошибка: {e}')
return redirect("/")
app.run(host='0.0.0.0', port=8081)

View File

@ -0,0 +1,14 @@
FROM python:3.11
ENV LISTEN_PORT=8082
EXPOSE 8082
RUN ["mkdir", "/work"]
RUN ["mkdir", "/var/result"]
RUN pip install Flask
WORKDIR /work
COPY index.html result.html service2.py ./
CMD ["python", "service2.py"]

View File

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Сервис № 2</title>
</head>
<body>
<form action="http://localhost:8082/ex">
<input type="submit" value="Выполнить 2ое задание"/>
</form>
</body>
</html>

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Результат работы</title>
</head>
<body>
<h2>Результат: {{num}}</h2>
</body>
</html>

View File

@ -0,0 +1,43 @@
import os
from flask import Flask, render_template
app = Flask(__name__, template_folder='')
@app.route('/')
def home():
return render_template("index.html")
@app.route('/ex')
def do():
current_directory = os.getcwd()
directory_elements = current_directory.split(os.path.sep) # Разделяем по разделителю каталогов
cur_d = os.path.sep.join(directory_elements[:-1])
path_data_file = cur_d + '/var/result/data.txt'
path_result_file = cur_d + '/var/result/result.txt'
min_number = 0
try:
# Чтение чисел из файла
with open(path_data_file, 'r') as file:
numbers = [float(line.strip()) for line in file]
# Поиск минимального числа
min_number = min(numbers)
# Возведение минимального числа в третью степень
result = min_number ** 3
# Запись результата в файл
with open(path_result_file, 'w') as result_file:
result_file.write(str(result))
print(f'Наименьшее число из файла {path_data_file} в третьей степени сохранено в {path_result_file}.')
except Exception as e:
print(f'Произошла ошибка: {e}')
return render_template("result.html", num=min_number)
app.run(host='0.0.0.0', port=8082)

View File

View File