From 72cffbba7010ce5adbeb42a38326cfe32231679c Mon Sep 17 00:00:00 2001 From: "d.yudenicheva" Date: Tue, 19 Dec 2023 02:22:42 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BB/=D1=80=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/yudenicheva-ds/lab_2/.gitignore | 481 ++++++++++++++++++ tasks/yudenicheva-ds/lab_2/README.md | 65 +++ tasks/yudenicheva-ds/lab_2/data/data.txt | 7 + tasks/yudenicheva-ds/lab_2/data/data1.txt | 8 + tasks/yudenicheva-ds/lab_2/data/data2.txt | 6 + tasks/yudenicheva-ds/lab_2/docker-compose.yml | 14 + tasks/yudenicheva-ds/lab_2/result-1/data.txt | 19 + tasks/yudenicheva-ds/lab_2/result/result.txt | 1 + tasks/yudenicheva-ds/lab_2/scrin/1.png | Bin 0 -> 33359 bytes tasks/yudenicheva-ds/lab_2/scrin/2.png | Bin 0 -> 25401 bytes .../yudenicheva-ds/lab_2/worker-1/Dockerfile | 26 + .../yudenicheva-ds/lab_2/worker-1/Program.cs | 40 ++ .../lab_2/worker-1/worker-1.csproj | 11 + .../yudenicheva-ds/lab_2/worker-2/Dockerfile | 26 + .../yudenicheva-ds/lab_2/worker-2/Program.cs | 33 ++ .../lab_2/worker-2/worker-2.csproj | 11 + 16 files changed, 748 insertions(+) create mode 100644 tasks/yudenicheva-ds/lab_2/.gitignore create mode 100644 tasks/yudenicheva-ds/lab_2/README.md create mode 100644 tasks/yudenicheva-ds/lab_2/data/data.txt create mode 100644 tasks/yudenicheva-ds/lab_2/data/data1.txt create mode 100644 tasks/yudenicheva-ds/lab_2/data/data2.txt create mode 100644 tasks/yudenicheva-ds/lab_2/docker-compose.yml create mode 100644 tasks/yudenicheva-ds/lab_2/result-1/data.txt create mode 100644 tasks/yudenicheva-ds/lab_2/result/result.txt create mode 100644 tasks/yudenicheva-ds/lab_2/scrin/1.png create mode 100644 tasks/yudenicheva-ds/lab_2/scrin/2.png create mode 100644 tasks/yudenicheva-ds/lab_2/worker-1/Dockerfile create mode 100644 tasks/yudenicheva-ds/lab_2/worker-1/Program.cs create mode 100644 tasks/yudenicheva-ds/lab_2/worker-1/worker-1.csproj create mode 100644 tasks/yudenicheva-ds/lab_2/worker-2/Dockerfile create mode 100644 tasks/yudenicheva-ds/lab_2/worker-2/Program.cs create mode 100644 tasks/yudenicheva-ds/lab_2/worker-2/worker-2.csproj diff --git a/tasks/yudenicheva-ds/lab_2/.gitignore b/tasks/yudenicheva-ds/lab_2/.gitignore new file mode 100644 index 0000000..f20ffbc --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/.gitignore @@ -0,0 +1,481 @@ +## Наши данные для работы программы +result-1/ +result/ + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk diff --git a/tasks/yudenicheva-ds/lab_2/README.md b/tasks/yudenicheva-ds/lab_2/README.md new file mode 100644 index 0000000..868177b --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/README.md @@ -0,0 +1,65 @@ +# Отчёт по лабораторной работе №2 + +Выполнил: студент гр. ИСЭбд-41 Юденичева Дарья. + + +Вариант программы 1: Берет из каталога `/var/data` случайный файл и перекладывает его в `/var/result/data.txt`. + +Вариант программы 2: Ищет наибольшее число из файла `/var/data/data.txt` и сохраняет его вторую степень в `/var/result/result.txt`. + +## Создание приложений + +Создадим 2 приложения. +Был выбран язык C# и технология .NET 8. + +Для создания обычных консольных приложений воспользуемся командами: + +```sh +dotnet new console -o worker-1 +dotnet new console -o worker-2 +``` + +Согласно варианту программа 1 должна брать случайный файл из каталога `/var/data`, и перекладывать его в `/var/result/data.txt`. + +[Исходный текст программы worker-1](worker-1/Program.cs) + +Согласно варианту программа 2 должна искать наибольшее число из файла `/var/data/data.txt`, и сохранять его вторую степень в `/var/result/result.txt`. + +[Исходный текст программы worker-2](worker-2/Program.cs) + +Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего. + +## Настройка окружения + +Для связи двух приложений воспользуемся следующей схемой: + +1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1. + Оттуда будут браться исходные данные. +2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складываться промежуточные данные. +3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2. + Оттуда будут браться промежуточные результаты. +4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2. + Туда будут складывать результаты финальной обработки. + +Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки. + +Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения. + + +## Сборка и запуск + +В каталог `./data` помещены 3 файлов с наборами чисел. + +Для запуска приложения необходимо ввести команду `docker compose up ---build`. + +Результат запуска после сборки: + +В результате в каталоге `./result-1` перекладывается случайный выбранный файл `result.txt` из каталога `/var/data`: + +![Alt text](scrin/1.png) + +В каталоге `./result` сохраняется файл с содержимым `7921`, что соответствует квадрату наибольшего числа в файле. + +![Alt text](scrin/2.png) + diff --git a/tasks/yudenicheva-ds/lab_2/data/data.txt b/tasks/yudenicheva-ds/lab_2/data/data.txt new file mode 100644 index 0000000..03087bd --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/data/data.txt @@ -0,0 +1,7 @@ +101 +90 +14 +5 +56 +23 +17 diff --git a/tasks/yudenicheva-ds/lab_2/data/data1.txt b/tasks/yudenicheva-ds/lab_2/data/data1.txt new file mode 100644 index 0000000..4fc1702 --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/data/data1.txt @@ -0,0 +1,8 @@ +15 +85 +34 +10 +17 +54 +43 +18 diff --git a/tasks/yudenicheva-ds/lab_2/data/data2.txt b/tasks/yudenicheva-ds/lab_2/data/data2.txt new file mode 100644 index 0000000..fc44809 --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/data/data2.txt @@ -0,0 +1,6 @@ +10 +14 +19 +56 +89 +31 diff --git a/tasks/yudenicheva-ds/lab_2/docker-compose.yml b/tasks/yudenicheva-ds/lab_2/docker-compose.yml new file mode 100644 index 0000000..e452531 --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3.1" +services: + worker-1: + build: ./worker-1 + volumes: + - ./data:/var/data + - ./result-1:/var/result + worker-2: + build: ./worker-2 + volumes: + - ./result-1:/var/data + - ./result:/var/result + depends_on: + - worker-1 \ No newline at end of file diff --git a/tasks/yudenicheva-ds/lab_2/result-1/data.txt b/tasks/yudenicheva-ds/lab_2/result-1/data.txt new file mode 100644 index 0000000..73e7974 --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/result-1/data.txt @@ -0,0 +1,19 @@ +100 +22 +11 +15 +46 +23 +11 +55 +449 +78 +65 +15 +35 +11 +59 +11 +87 +465 +11 \ No newline at end of file diff --git a/tasks/yudenicheva-ds/lab_2/result/result.txt b/tasks/yudenicheva-ds/lab_2/result/result.txt new file mode 100644 index 0000000..7813681 --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/result/result.txt @@ -0,0 +1 @@ +5 \ No newline at end of file diff --git a/tasks/yudenicheva-ds/lab_2/scrin/1.png b/tasks/yudenicheva-ds/lab_2/scrin/1.png new file mode 100644 index 0000000000000000000000000000000000000000..6b8baa0fa21b5d27398bdbd1e6a509ce1b501cf0 GIT binary patch literal 33359 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 dmP;Z#3Zu-rDA_IG?=G%9QPfZ + + + Exe + net8.0 + worker_1 + enable + enable + + + diff --git a/tasks/yudenicheva-ds/lab_2/worker-2/Dockerfile b/tasks/yudenicheva-ds/lab_2/worker-2/Dockerfile new file mode 100644 index 0000000..93fb81f --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/worker-2/Dockerfile @@ -0,0 +1,26 @@ +# Используем базовый образ с пакетом SDK .NET 7.0 +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build-env + +# Устанавливаем рабочую директорию для всех последующих команд +WORKDIR /app + +# Копируем все файлы из текущего контекста в рабочую директорию +COPY . ./ + +# Восстанавливаем зависимости проекта +RUN dotnet restore + +# Публикуем приложение в режиме выпуска +RUN dotnet publish -c Release -o out + +# Используем базовый образ с ASP.NET 7.0 +FROM mcr.microsoft.com/dotnet/aspnet:8.0 + +# Устанавливаем рабочую директорию для всех последующих команд +WORKDIR /app + +# Копируем файлы из build-env в текущую директорию +COPY --from=build-env /app/out . + +# Устанавливаем точку входа в приложение +ENTRYPOINT ["dotnet", "worker-2.dll"] \ No newline at end of file diff --git a/tasks/yudenicheva-ds/lab_2/worker-2/Program.cs b/tasks/yudenicheva-ds/lab_2/worker-2/Program.cs new file mode 100644 index 0000000..d4ec59d --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/worker-2/Program.cs @@ -0,0 +1,33 @@ +using System.Text; + + +string[] numbers; +using (FileStream fstream = File.OpenRead("/var/result/data.txt")) +{ + byte[] buffer = new byte[fstream.Length]; + await fstream.ReadAsync(buffer, 0, buffer.Length); + string text = Encoding.Default.GetString(buffer); + text = text.Replace("\r\n", ";"); + numbers = text.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); +} + +int maxNum = int.MinValue; +foreach(var number in numbers) +{ + int currentNum = Convert.ToInt32(number); + if(currentNum > maxNum) + { + maxNum = currentNum; + } +} + +int maxNumSqr = maxNum * maxNum; + +using (FileStream fstream = new FileStream("/var/result/result.txt", FileMode.OpenOrCreate)) +{ + byte[] buffer = Encoding.Default.GetBytes(maxNumSqr.ToString()); + await fstream.WriteAsync(buffer, 0, buffer.Length); +} + +Console.WriteLine("Максимальное число: " + maxNum); +Console.WriteLine("Возведение в квадрат: " + maxNumSqr); diff --git a/tasks/yudenicheva-ds/lab_2/worker-2/worker-2.csproj b/tasks/yudenicheva-ds/lab_2/worker-2/worker-2.csproj new file mode 100644 index 0000000..c75d6da --- /dev/null +++ b/tasks/yudenicheva-ds/lab_2/worker-2/worker-2.csproj @@ -0,0 +1,11 @@ + + + + Exe + net8.0 + worker_2 + enable + enable + + +