Merge pull request 'bondarenko_max_lab_2' (#231) from bondarenko_max_lab_2 into main

Reviewed-on: #231
This commit is contained in:
Alexey 2024-12-15 13:38:02 +04:00
commit cdd0a7b7c9
10 changed files with 196 additions and 0 deletions

2
bondarenko_max_lab_2/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
node_modules/
*.log

View File

@ -0,0 +1,55 @@
# Лабораторная работа 2 - Разработка простейшего распределённого приложения
### ПИбд-42 || Бондаренко Максим
# Описание работы
> Задача:
В данной лабораторной работе изучить способы создания и развертывания простого распределённого приложения.
### Первая программа лабораторной работы.
```
Вариант - 2: Формирует файл /var/result/data.txt из первых строк всех файлов каталога /var/data.
Для реализации программы я буду использовать JavaScript с Node.js
```
### Вторая программа лабораторной работы.
```
Вариант - 2: Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
Для реализации программы я буду использовать JavaScript с Node.js
```
> Инструкция по запуску
1. Запуск Docker - Desktop
2. Открыть консоль в папке с docker-compose.yml
3. Ввести команду:
```
docker-compose up --build
```
> Docker-compose.yml
```
version: '3'
services:
app1:
build:
context: ./app-1
volumes:
- ./data:/var/data # Монтируем локальную папку data в /var/data
- ./result:/var/result # Монтируем локальную папку result в /var/result
container_name: app1
app2:
build:
context: ./app-2
depends_on:
- app1
volumes:
- ./result:/var/result # Монтируем ту же папку result
container_name: app2
```
#### В результате в папке result создаётся два текстовых документа:
1. data - результат работы первого проекта
2. result - результат работы второго проекта
> Видео демонстрация работы
https://cloud.mail.ru/public/FyyE/LTkRXBQXN

View File

@ -0,0 +1,14 @@
# Образ с Node.js версии 18
FROM node:18
# Создание директории
WORKDIR /app
# Добавление кода в контейнер из index.js
COPY index.js .
# Установка рабочей папки для вводных данных и результата
RUN mkdir -p /var/data /var/result
# Запуск index.js с помощью среды выполнения Node.js
CMD ["node", "index.js"]

View File

@ -0,0 +1,33 @@
// Первая программа лабораторной работы.
// Вариант - 2: Формирует файл /var/result/data.txt из первых строк всех файлов каталога /var/data.
// Для реализации программы я буду использовать JavaScript с Node.js
// Импорт модулей
const fs = require('fs');
const path = require('path');
// Добавляем пути к папкам
const dataDir = '/var/data';
const resultFile = '/var/result/data.txt';
// Функция для извлечения первых строк всех файлов в data и записи резултата в result
const gatherFirstLines = () => {
// Обёртываю в try/catch
try {
const files = fs.readdirSync(dataDir); // Считывание название файлов из data
// Проходимся по файлам
// Добовляем первые строчки
const firstLines = files.map((file) => {
const filePath = path.join(dataDir, file);
const content = fs.readFileSync(filePath, 'utf-8');
return content.split('\n')[0];
});
fs.writeFileSync(resultFile, firstLines.join('\n')); // Записываем первые строки в `data.txt`
console.log('First lines have been successfully written to', resultFile); // Логирую в терминал результат
} catch (error) {
console.error('Error processing files:', error); // Перехватываю ошибку
}
};
gatherFirstLines(); // Вызываю функцию

View File

@ -0,0 +1,14 @@
# Образ с Node.js версии 18
FROM node:18
# Создание директории
WORKDIR /app
# Добавление кода в контейнер из index.js
COPY index.js .
# Установка рабочей папки для вводных данных и результата
RUN mkdir -p /var/data /var/result
# Запуск index.js с помощью среды выполнения Node.js
CMD ["node", "index.js"]

View File

@ -0,0 +1,30 @@
// Вторая программа лабораторной работы.
// Вариант - 2: Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
// Для реализации программы я буду использовать JavaScript с Node.js
// Импорт модулей
const fs = require('fs');
const path = require('path');
// Добавляем пути к папкам
const dataFile = '/var/result/data.txt';
const resultFile = '/var/result/result.txt';
// Функция для запаси наименьшего числа в кубе из data в result
const calculateMinCubed = () => {
// Обёртываю в try/catch
try {
const content = fs.readFileSync(dataFile, 'utf-8'); // Открытие файла с кодировкой UTF-8
const numbers = content.split('\n').map(Number).filter(Boolean); // Преобразую в числа
const minNumber = Math.min(...numbers); // Ищу минимальное число
const result = Math.pow(minNumber, 3); // Возвожу в 3-тью степень
fs.writeFileSync(resultFile, result.toString()); // Записываю результат в файл
console.log(`Cubed minimum number (${minNumber}^3) saved to`, resultFile); // Логирую в терминал результат
} catch (error) {
console.error('Error processing file:', error); // Перехватываю ошибку
}
};
calculateMinCubed(); // Вызываю функцию

View File

@ -0,0 +1,10 @@
25
91
77
63
45
25
21
89
6
18

View File

@ -0,0 +1,10 @@
98
62
45
77
65
45
61
62
10
76

View File

@ -0,0 +1,10 @@
37
54
100
34
1
77
55
10
30
28

View File

@ -0,0 +1,18 @@
version: '3'
services:
app1:
build:
context: ./app-1
volumes:
- ./data:/var/data # Монтируем локальную папку data в /var/data
- ./result:/var/result # Монтируем локальную папку result в /var/result
container_name: app1
app2:
build:
context: ./app-2
depends_on:
- app1
volumes:
- ./result:/var/result # Монтируем ту же папку result
container_name: app2